diff --git a/extensions/configuration-editing/src/settingsDocumentHelper.ts b/extensions/configuration-editing/src/settingsDocumentHelper.ts index d98d3d27308..b8f9c16fca6 100644 --- a/extensions/configuration-editing/src/settingsDocumentHelper.ts +++ b/extensions/configuration-editing/src/settingsDocumentHelper.ts @@ -34,7 +34,7 @@ export class SettingsDocument { // files.defaultLanguage if (location.path[0] === 'files.defaultLanguage') { - return this.provideDefaultLanguageCompletionItems(location, range); + return this.provideLanguageCompletionItems(location, range); } return this.provideLanguageOverridesCompletionItems(location, position); @@ -147,10 +147,10 @@ export class SettingsDocument { return Promise.resolve(completions); } - private provideLanguageCompletionItems(location: Location, range: vscode.Range, stringify: boolean = true): vscode.ProviderResult { + private provideLanguageCompletionItems(location: Location, range: vscode.Range, formatFunc: (string) => string = (l) => JSON.stringify(l)): vscode.ProviderResult { return vscode.languages.getLanguages().then(languages => { return languages.map(l => { - return this.newSimpleCompletionItem(stringify ? JSON.stringify(l) : l, range); + return this.newSimpleCompletionItem(formatFunc(l), range); }); }); } @@ -180,35 +180,13 @@ export class SettingsDocument { } if (location.path.length === 1 && location.previousNode && typeof location.previousNode.value === 'string' && location.previousNode.value.startsWith('[')) { - - // Suggestion model word matching includes starting quote and open sqaure bracket - // Hence exclude them from the proposal range - range = new vscode.Range(new vscode.Position(range.start.line, range.start.character + 2), range.end); - - return vscode.languages.getLanguages().then(languages => { - return languages.map(l => { - - // Suggestion model word matching includes closed sqaure bracket and ending quote - // Hence include them in the proposal to replace - return this.newSimpleCompletionItem(l, range, '', l + ']"'); - }); - }); + // Suggestion model word matching includes closed sqaure bracket and ending quote + // Hence include them in the proposal to replace + return this.provideLanguageCompletionItems(location, range, language => `"[${language}]"`); } return Promise.resolve([]); } - private provideDefaultLanguageCompletionItems(location: Location, range: vscode.Range): vscode.ProviderResult { - // Suggestion model word matching includes a starting quote - // Hence exclude it from the proposal range - range = new vscode.Range(new vscode.Position(range.start.line, range.start.character + 1), range.end); - - return vscode.languages.getLanguages().then(languages => { - return languages.map(l => { - return this.newSimpleCompletionItem(l, range, '', l + '"'); - }); - }); - } - private newSimpleCompletionItem(text: string, range: vscode.Range, description?: string, insertText?: string): vscode.CompletionItem { const item = new vscode.CompletionItem(text); item.kind = vscode.CompletionItemKind.Value;