提交 b7c01634 编写于 作者: M Martin Aeschlimann

[file icons] code assist for icon sets in settings

上级 3ae6814c
......@@ -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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册