Skip to content

Commit b0e058e

Browse files
committed
[html] more strict null preparations (but still disabled, due to dependencies)
1 parent c656d5e commit b0e058e

8 files changed

Lines changed: 35 additions & 34 deletions

File tree

extensions/html/server/src/htmlServerMain.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ let documents: TextDocuments = new TextDocuments();
3939
// for open, change and close text document events
4040
documents.listen(connection);
4141

42-
let workspacePath: string;
42+
let workspacePath: string | undefined | null;
4343
var languageModes: LanguageModes;
4444

4545
let clientSnippetSupport = false;
@@ -53,7 +53,7 @@ documents.onDidClose(e => {
5353
delete documentSettings[e.document.uri];
5454
});
5555

56-
function getDocumentSettings(textDocument: TextDocument, needsDocumentSettings: () => boolean): Thenable<Settings> {
56+
function getDocumentSettings(textDocument: TextDocument, needsDocumentSettings: () => boolean): Thenable<Settings | undefined> {
5757
if (scopedSettingsSupport && needsDocumentSettings()) {
5858
let promise = documentSettings[textDocument.uri];
5959
if (!promise) {
@@ -83,7 +83,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
8383
});
8484

8585
function hasClientCapability(...keys: string[]) {
86-
let c = params.capabilities;
86+
let c = <any>params.capabilities;
8787
for (let i = 0; c && i < keys.length; i++) {
8888
c = c[keys[i]];
8989
}
@@ -96,7 +96,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
9696
let capabilities: ServerCapabilities & CPServerCapabilities = {
9797
// Tell the client that the server works in FULL text document sync mode
9898
textDocumentSync: documents.syncKind,
99-
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['.', ':', '<', '"', '=', '/', '>'] } : null,
99+
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['.', ':', '<', '"', '=', '/', '>'] } : undefined,
100100
hoverProvider: true,
101101
documentHighlightProvider: true,
102102
documentRangeFormattingProvider: false,
@@ -111,7 +111,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
111111
return { capabilities };
112112
});
113113

114-
let formatterRegistration: Thenable<Disposable> = null;
114+
let formatterRegistration: Thenable<Disposable> | null = null;
115115

116116
// The settings have changed. Is send on server activation as well.
117117
connection.onDidChangeConfiguration((change) => {
@@ -198,11 +198,12 @@ connection.onCompletion(async textDocumentPosition => {
198198
let document = documents.get(textDocumentPosition.textDocument.uri);
199199
let mode = languageModes.getModeAtPosition(document, textDocumentPosition.position);
200200
if (mode && mode.doComplete) {
201+
let doComplete = mode.doComplete;
201202
if (mode.getId() !== 'html') {
202203
connection.telemetry.logEvent({ key: 'html.embbedded.complete', value: { languageId: mode.getId() } });
203204
}
204-
let settings = await getDocumentSettings(document, () => mode.doComplete.length > 2);
205-
return mode.doComplete(document, textDocumentPosition.position, settings);
205+
let settings = await getDocumentSettings(document, () => doComplete.length > 2);
206+
return doComplete(document, textDocumentPosition.position, settings);
206207
}
207208
return { isIncomplete: true, items: [] };
208209
});

extensions/html/server/src/modes/embeddedSupport.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ interface EmbeddedRegion { languageId: string; start: number; end: number; attri
2828
export function getDocumentRegions(languageService: LanguageService, document: TextDocument): HTMLDocumentRegions {
2929
let regions: EmbeddedRegion[] = [];
3030
let scanner = languageService.createScanner(document.getText());
31-
let lastTagName: string;
32-
let lastAttributeName: string | null;
31+
let lastTagName: string = '';
32+
let lastAttributeName: string | null = null;
3333
let languageIdFromType: string | undefined = undefined;
3434
let importedScripts: string[] = [];
3535

@@ -45,7 +45,7 @@ export function getDocumentRegions(languageService: LanguageService, document: T
4545
regions.push({ languageId: 'css', start: scanner.getTokenOffset(), end: scanner.getTokenEnd() });
4646
break;
4747
case TokenType.Script:
48-
regions.push({ languageId: languageIdFromType, start: scanner.getTokenOffset(), end: scanner.getTokenEnd() });
48+
regions.push({ languageId: languageIdFromType!, start: scanner.getTokenOffset(), end: scanner.getTokenEnd() });
4949
break;
5050
case TokenType.AttributeName:
5151
lastAttributeName = scanner.getTokenText();
@@ -64,7 +64,7 @@ export function getDocumentRegions(languageService: LanguageService, document: T
6464
languageIdFromType = void 0;
6565
}
6666
} else {
67-
let attributeLanguageId = getAttributeLanguage(lastAttributeName);
67+
let attributeLanguageId = getAttributeLanguage(lastAttributeName!);
6868
if (attributeLanguageId) {
6969
let start = scanner.getTokenOffset();
7070
let end = scanner.getTokenEnd();

extensions/html/server/src/modes/formatting.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ export function format(languageModes: LanguageModes, document: TextDocument, for
5353
formatRange = Range.create(startPos, formatRange.end);
5454

5555
// perform a html format and apply changes to a new document
56-
let htmlMode = languageModes.getMode('html');
57-
let htmlEdits = htmlMode.format(document, formatRange, formattingOptions, settings);
56+
let htmlMode = languageModes.getMode('html')!;
57+
let htmlEdits = htmlMode.format!(document, formatRange, formattingOptions, settings);
5858
let htmlFormattedContent = applyEdits(document, htmlEdits);
5959
let newDocument = TextDocument.create(document.uri + '.tmp', document.languageId, document.version, htmlFormattedContent);
6060
try {

extensions/html/server/src/modes/javascriptMode.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ export function getJavascriptMode(documentRegions: LanguageModelCache<HTMLDocume
118118
}
119119
return item;
120120
},
121-
doHover(document: TextDocument, position: Position): Hover {
121+
doHover(document: TextDocument, position: Position): Hover | null {
122122
updateCurrentTextDocument(document);
123123
let info = jsLanguageService.getQuickInfoAtPosition(FILE_NAME, currentTextDocument.offsetAt(position));
124124
if (info) {
@@ -130,7 +130,7 @@ export function getJavascriptMode(documentRegions: LanguageModelCache<HTMLDocume
130130
}
131131
return null;
132132
},
133-
doSignatureHelp(document: TextDocument, position: Position): SignatureHelp {
133+
doSignatureHelp(document: TextDocument, position: Position): SignatureHelp | null {
134134
updateCurrentTextDocument(document);
135135
let signHelp = jsLanguageService.getSignatureHelpItems(FILE_NAME, currentTextDocument.offsetAt(position));
136136
if (signHelp) {
@@ -155,7 +155,7 @@ export function getJavascriptMode(documentRegions: LanguageModelCache<HTMLDocume
155155
documentation: ts.displayPartsToString(p.documentation)
156156
};
157157
signature.label += label;
158-
signature.parameters.push(parameter);
158+
signature.parameters!.push(parameter);
159159
if (i < a.length - 1) {
160160
signature.label += ts.displayPartsToString(item.separatorDisplayParts);
161161
}
@@ -178,7 +178,7 @@ export function getJavascriptMode(documentRegions: LanguageModelCache<HTMLDocume
178178
};
179179
});
180180
}
181-
return null;
181+
return [];
182182
},
183183
findDocumentSymbols(document: TextDocument): SymbolInformation[] {
184184
updateCurrentTextDocument(document);
@@ -214,9 +214,9 @@ export function getJavascriptMode(documentRegions: LanguageModelCache<HTMLDocume
214214
items.forEach(item => collectSymbols(item));
215215
return result;
216216
}
217-
return null;
217+
return [];
218218
},
219-
findDefinition(document: TextDocument, position: Position): Definition {
219+
findDefinition(document: TextDocument, position: Position): Definition | null {
220220
updateCurrentTextDocument(document);
221221
let definition = jsLanguageService.getDefinitionAtPosition(FILE_NAME, currentTextDocument.offsetAt(position));
222222
if (definition) {
@@ -240,7 +240,7 @@ export function getJavascriptMode(documentRegions: LanguageModelCache<HTMLDocume
240240
};
241241
});
242242
}
243-
return null;
243+
return [];
244244
},
245245
format(document: TextDocument, range: Range, formatParams: FormattingOptions, settings: Settings = globalSettings): TextEdit[] {
246246
currentTextDocument = documentRegions.get(document).getEmbeddedDocument('javascript', true);
@@ -276,7 +276,7 @@ export function getJavascriptMode(documentRegions: LanguageModelCache<HTMLDocume
276276
}
277277
return result;
278278
}
279-
return null;
279+
return [];
280280
},
281281
onDocumentRemoved(document: TextDocument) {
282282
jsDocuments.onDocumentRemoved(document);

extensions/html/server/src/modes/languageModes.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,29 +34,29 @@ export interface LanguageMode {
3434
getId(): string;
3535
configure?: (options: Settings) => void;
3636
doValidation?: (document: TextDocument, settings?: Settings) => Diagnostic[];
37-
doComplete?: (document: TextDocument, position: Position, settings?: Settings) => CompletionList;
38-
doResolve?: (document: TextDocument, item: CompletionItem) => CompletionItem;
39-
doHover?: (document: TextDocument, position: Position) => Hover;
40-
doSignatureHelp?: (document: TextDocument, position: Position) => SignatureHelp;
37+
doComplete?: (document: TextDocument, position: Position, settings?: Settings) => CompletionList | null;
38+
doResolve?: (document: TextDocument, item: CompletionItem) => CompletionItem | null;
39+
doHover?: (document: TextDocument, position: Position) => Hover | null;
40+
doSignatureHelp?: (document: TextDocument, position: Position) => SignatureHelp | null;
4141
findDocumentHighlight?: (document: TextDocument, position: Position) => DocumentHighlight[];
4242
findDocumentSymbols?: (document: TextDocument) => SymbolInformation[];
4343
findDocumentLinks?: (document: TextDocument, documentContext: DocumentContext) => DocumentLink[];
44-
findDefinition?: (document: TextDocument, position: Position) => Definition;
44+
findDefinition?: (document: TextDocument, position: Position) => Definition | null;
4545
findReferences?: (document: TextDocument, position: Position) => Location[];
4646
format?: (document: TextDocument, range: Range, options: FormattingOptions, settings: Settings) => TextEdit[];
4747
findDocumentColors?: (document: TextDocument) => ColorInformation[];
4848
getColorPresentations?: (document: TextDocument, color: Color, range: Range) => ColorPresentation[];
49-
doAutoClose?: (document: TextDocument, position: Position) => string;
49+
doAutoClose?: (document: TextDocument, position: Position) => string | null;
5050
onDocumentRemoved(document: TextDocument): void;
5151
dispose(): void;
5252
}
5353

5454
export interface LanguageModes {
55-
getModeAtPosition(document: TextDocument, position: Position): LanguageMode;
55+
getModeAtPosition(document: TextDocument, position: Position): LanguageMode | undefined;
5656
getModesInRange(document: TextDocument, range: Range): LanguageModeRange[];
5757
getAllModes(): LanguageMode[];
5858
getAllModesInDocument(document: TextDocument): LanguageMode[];
59-
getMode(languageId: string): LanguageMode;
59+
getMode(languageId: string): LanguageMode | undefined;
6060
onDocumentRemoved(document: TextDocument): void;
6161
dispose(): void;
6262
}
@@ -83,12 +83,12 @@ export function getLanguageModes(supportedLanguages: { [languageId: string]: boo
8383
modes['javascript'] = getJavascriptMode(documentRegions);
8484
}
8585
return {
86-
getModeAtPosition(document: TextDocument, position: Position): LanguageMode {
86+
getModeAtPosition(document: TextDocument, position: Position): LanguageMode | undefined {
8787
let languageId = documentRegions.get(document).getLanguageAtPosition(position);
8888
if (languageId) {
8989
return modes[languageId];
9090
}
91-
return null;
91+
return void 0;
9292
},
9393
getModesInRange(document: TextDocument, range: Range): LanguageModeRange[] {
9494
return documentRegions.get(document).getLanguageRanges(range).map(r => {

extensions/html/server/src/test/embedded.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ suite('HTML Embedded Support', () => {
1414

1515
var htmlLanguageService = getLanguageService();
1616

17-
function assertLanguageId(value: string, expectedLanguageId: string): void {
17+
function assertLanguageId(value: string, expectedLanguageId: string | undefined): void {
1818
let offset = value.indexOf('|');
1919
value = value.substr(0, offset) + value.substr(offset + 1);
2020

extensions/html/server/src/test/formatting.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ suite('HTML Embedded Formatting', () => {
1919
function assertFormat(value: string, expected: string, options?: any, formatOptions?: FormattingOptions, message?: string): void {
2020
var languageModes = getLanguageModes({ css: true, javascript: true });
2121
if (options) {
22-
languageModes.getAllModes().forEach(m => m.configure(options));
22+
languageModes.getAllModes().forEach(m => m.configure!(options));
2323
}
2424

2525
let rangeStartOffset = value.indexOf('|');

extensions/html/server/src/test/javascriptMode.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ suite('HTML Javascript Support', () => {
3131
let list = mode.doComplete!(document, position);
3232
assert.ok(list);
3333

34-
let actualLabels = list.items.map(c => c.label).sort();
34+
let actualLabels = list!.items.map(c => c.label).sort();
3535
for (let expected of expectedProposals) {
3636
assert.ok(actualLabels.indexOf(expected) !== -1, 'Not found:' + expected + ' is ' + actualLabels.join(', '));
3737
}

0 commit comments

Comments
 (0)