diff --git a/extensions/configuration-editing/src/extension.ts b/extensions/configuration-editing/src/extension.ts index 68d4743ecd615c01758ea549da3d3b8c914ad631..c0e82fa997b27cabb25e6b74521225b130106484 100644 --- a/extensions/configuration-editing/src/extension.ts +++ b/extensions/configuration-editing/src/extension.ts @@ -10,29 +10,62 @@ import {getLocation} from 'jsonc-parser'; export function activate(context) { + //keybindings.json command-suggestions + context.subscriptions.push(registerKeybindingsCompletions()); + + //settings.json command-suggestions + context.subscriptions.push(registerSettingsCompletions()); +} + +function registerKeybindingsCompletions() : vscode.Disposable { const commands = vscode.commands.getCommands(true); - //keybindings.json command-suggestions - const disposable = vscode.languages.registerCompletionItemProvider({ pattern: '**/keybindings.json' }, { + return vscode.languages.registerCompletionItemProvider({ pattern: '**/keybindings.json' }, { provideCompletionItems(document, position, token) { const location = getLocation(document.getText(), document.offsetAt(position)); if (location.path[1] === 'command') { const range = document.getWordRangeAtPosition(position) || new vscode.Range(position, position); - - return commands.then(ids => ids.map(id => { - const item = new vscode.CompletionItem(`"${id}"`); - item.kind = vscode.CompletionItemKind.Value; - item.textEdit = { - range, - newText: item.label - }; - return item; - })); + return commands.then(ids => ids.map(id => newCompletionItem(id, range))); } } }); +} + +function registerSettingsCompletions() : vscode.Disposable { + console.log('registerSettingsCompletions'); + return vscode.languages.registerCompletionItemProvider({ pattern: '**/settings.json' }, { - context.subscriptions.push(disposable); + provideCompletionItems(document, position, token) { + console.log('provideCompletionItems'); + const location = getLocation(document.getText(), document.offsetAt(position)); + console.log(location); + if (!location.isAtPropertyKey && location.path[0] === 'files.iconTheme') { + let result: vscode.CompletionItem[] = []; + const range = document.getWordRangeAtPosition(position) || new vscode.Range(position, position); + + vscode.extensions.all.forEach(e => { + let fileIconsContributions = e.packageJSON.contributes && e.packageJSON.contributes.fileIcons; + if (Array.isArray(fileIconsContributions)) { + fileIconsContributions.forEach(contribution => { + result.push(newCompletionItem(contribution.id, range)); + }); + } + }); + console.log(result); + return result; + } + } + }); } + +function newCompletionItem(text: string, range: vscode.Range) { + const item = new vscode.CompletionItem(JSON.stringify(text)); + item.kind = vscode.CompletionItemKind.Value; + item.textEdit = { + range, + newText: item.label + }; + return item; +} \ No newline at end of file