From b7c0163459e3da8948e009e21384aad4748d16fc Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Fri, 19 Aug 2016 13:10:16 +0200 Subject: [PATCH] [file icons] code assist for icon sets in settings --- .../configuration-editing/src/extension.ts | 59 +++++++++++++++---- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/extensions/configuration-editing/src/extension.ts b/extensions/configuration-editing/src/extension.ts index 68d4743ecd6..c0e82fa997b 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 -- GitLab