diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json index a02eaeb4b2d..8ad397186e7 100644 --- a/src/tsconfig.strictNullChecks.json +++ b/src/tsconfig.strictNullChecks.json @@ -320,6 +320,7 @@ "./vs/editor/contrib/parameterHints/provideSignatureHelp.ts", "./vs/editor/contrib/quickOpen/quickOpen.ts", "./vs/editor/contrib/smartSelect/tokenTree.ts", + "./vs/editor/contrib/snippet/snippetParser.ts", "./vs/editor/contrib/suggest/suggest.ts", "./vs/editor/contrib/suggest/wordDistance.ts", "./vs/editor/contrib/suggest/wordContextKey.ts", diff --git a/src/vs/editor/contrib/snippet/snippetParser.ts b/src/vs/editor/contrib/snippet/snippetParser.ts index aac26521f6a..a9940839d82 100644 --- a/src/vs/editor/contrib/snippet/snippetParser.ts +++ b/src/vs/editor/contrib/snippet/snippetParser.ts @@ -169,7 +169,7 @@ export abstract class Marker { return this._children; } - get snippet(): TextmateSnippet { + get snippet(): TextmateSnippet | undefined { let candidate: Marker = this; while (true) { if (!candidate) { @@ -247,7 +247,7 @@ export class Placeholder extends TransformableMarker { return this.index === 0; } - get choice(): Choice { + get choice(): Choice | undefined { return this._children.length === 1 && this._children[0] instanceof Choice ? this._children[0] as Choice : undefined; @@ -392,11 +392,14 @@ export class FormatString extends Marker { } private _toPascalCase(value: string): string { - return value.match(/[a-z]+/gi) - .map(function (word) { - return word.charAt(0).toUpperCase() - + word.substr(1).toLowerCase(); - }) + const match = value.match(/[a-z]+/gi); + if (!match) { + return value; + } + return match.map(function (word) { + return word.charAt(0).toUpperCase() + + word.substr(1).toLowerCase(); + }) .join(''); } @@ -470,7 +473,7 @@ export interface VariableResolver { function walk(marker: Marker[], visitor: (marker: Marker) => boolean): void { const stack = [...marker]; while (stack.length > 0) { - const marker = stack.shift(); + const marker = stack.shift()!; const recurse = visitor(marker); if (!recurse) { break; @@ -481,13 +484,13 @@ function walk(marker: Marker[], visitor: (marker: Marker) => boolean): void { export class TextmateSnippet extends Marker { - private _placeholders: { all: Placeholder[], last: Placeholder }; + private _placeholders?: { all: Placeholder[], last?: Placeholder }; get placeholderInfo() { if (!this._placeholders) { // fill in placeholders let all: Placeholder[] = []; - let last: Placeholder; + let last: Placeholder | undefined; this.walk(function (candidate) { if (candidate instanceof Placeholder) { all.push(candidate); @@ -646,8 +649,8 @@ export class SnippetParser { return snippet; } - private _accept(type: TokenType): boolean; - private _accept(type: TokenType, value: true): string; + private _accept(type?: TokenType): boolean; + private _accept(type: TokenType | undefined, value: true): string; private _accept(type: TokenType, value?: boolean): boolean | string { if (type === undefined || this._token.type === type) { let ret = !value ? true : this._scanner.tokenText(this._token); @@ -714,9 +717,9 @@ export class SnippetParser { return this._backTo(token); } - parent.appendChild(/^\d+$/.test(value) - ? new Placeholder(Number(value)) - : new Variable(value) + parent.appendChild(/^\d+$/.test(value!) + ? new Placeholder(Number(value!)) + : new Variable(value!) ); return true; } @@ -733,7 +736,7 @@ export class SnippetParser { return this._backTo(token); } - const placeholder = new Placeholder(Number(index)); + const placeholder = new Placeholder(Number(index!)); if (this._accept(TokenType.Colon)) { // ${1:} @@ -750,7 +753,7 @@ export class SnippetParser { } // fallback - parent.appendChild(new Text('${' + index + ':')); + parent.appendChild(new Text('${' + index! + ':')); placeholder.children.forEach(parent.appendChild, parent); return true; } @@ -848,7 +851,7 @@ export class SnippetParser { return this._backTo(token); } - const variable = new Variable(name); + const variable = new Variable(name!); if (this._accept(TokenType.Colon)) { // ${foo:} @@ -865,7 +868,7 @@ export class SnippetParser { } // fallback - parent.appendChild(new Text('${' + name + ':')); + parent.appendChild(new Text('${' + name! + ':')); variable.children.forEach(parent.appendChild, parent); return true; }