diff --git a/extensions/configuration-editing/src/settingsDocumentHelper.ts b/extensions/configuration-editing/src/settingsDocumentHelper.ts index 9bdfe486b35..32c6ac14854 100644 --- a/extensions/configuration-editing/src/settingsDocumentHelper.ts +++ b/extensions/configuration-editing/src/settingsDocumentHelper.ts @@ -158,11 +158,18 @@ export class SettingsDocument { } private provideLanguageOverridesCompletionItems(location: Location, position: vscode.Position): vscode.ProviderResult { - let range = this.document.getWordRangeAtPosition(position) || new vscode.Range(position, position); - const text = this.document.getText(range); if (location.path.length === 0) { + let range = this.document.getWordRangeAtPosition(position, /^\s*\[.*]?/) || new vscode.Range(position, position); + let text = this.document.getText(range); + if (text && text.trim().startsWith('[')) { + range = new vscode.Range(new vscode.Position(range.start.line, range.start.character + text.indexOf('[')), range.end); + return this.provideLanguageCompletionItems(location, range, language => `"[${language}]"`); + } + + range = this.document.getWordRangeAtPosition(position) || new vscode.Range(position, position); + text = this.document.getText(range); let snippet = '"[${1:language}]": {\n\t"$0"\n}'; // Suggestion model word matching includes quotes, @@ -184,6 +191,7 @@ export class SettingsDocument { if (location.path.length === 1 && location.previousNode && typeof location.previousNode.value === 'string' && location.previousNode.value.startsWith('[')) { // Suggestion model word matching includes closed sqaure bracket and ending quote // Hence include them in the proposal to replace + let range = this.document.getWordRangeAtPosition(position) || new vscode.Range(position, position); return this.provideLanguageCompletionItems(location, range, language => `"[${language}]"`); } return Promise.resolve([]);