mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 21:09:43 +00:00
[file icons] code assist for icon sets in settings
This commit is contained in:
parent
3ae6814c8f
commit
b7c0163459
|
@ -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)));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
context.subscriptions.push(disposable);
|
||||
}
|
||||
|
||||
function registerSettingsCompletions() : vscode.Disposable {
|
||||
console.log('registerSettingsCompletions');
|
||||
return vscode.languages.registerCompletionItemProvider({ pattern: '**/settings.json' }, {
|
||||
|
||||
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;
|
||||
}
|
Loading…
Reference in a new issue