coc.nvim
Version:
LSP based intellisense engine for neovim & vim8.
145 lines • 6.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const os_1 = tslib_1.__importDefault(require("os"));
const path_1 = tslib_1.__importDefault(require("path"));
const extensions_1 = tslib_1.__importDefault(require("../../extensions"));
const util_1 = require("../../util");
const fs_1 = require("../../util/fs");
const basic_1 = tslib_1.__importDefault(require("../basic"));
const workspace_1 = tslib_1.__importDefault(require("../../workspace"));
const logger = require('../../util/logger')('list-extensions');
class ExtensionList extends basic_1.default {
constructor(nvim) {
super(nvim);
this.defaultAction = 'toggle';
this.description = 'manage coc extensions';
this.name = 'extensions';
this.addAction('toggle', async (item) => {
let { id, state } = item.data;
if (state == 'disabled')
return;
if (state == 'activated') {
extensions_1.default.deactivate(id);
}
else {
extensions_1.default.activate(id);
}
await util_1.wait(100);
}, { persist: true, reload: true, parallel: true });
this.addAction('disable', async (item) => {
let { id, state } = item.data;
if (state !== 'disabled')
await extensions_1.default.toggleExtension(id);
}, { persist: true, reload: true, parallel: true });
this.addAction('enable', async (item) => {
let { id, state } = item.data;
if (state == 'disabled')
await extensions_1.default.toggleExtension(id);
}, { persist: true, reload: true, parallel: true });
this.addAction('lock', async (item) => {
let { id } = item.data;
await extensions_1.default.toggleLock(id);
}, { persist: true, reload: true });
this.addAction('doc', async (item) => {
let { root } = item.data;
let files = await fs_1.readdirAsync(root);
let file = files.find(f => /^readme/i.test(f));
if (file) {
let escaped = await nvim.call('fnameescape', [path_1.default.join(root, file)]);
await workspace_1.default.callAsync('coc#util#execute', [`edit ${escaped}`]);
}
});
this.addAction('reload', async (item) => {
let { id, state } = item.data;
if (state == 'disabled')
return;
if (state == 'activated') {
extensions_1.default.deactivate(id);
}
extensions_1.default.activate(id);
await util_1.wait(100);
}, { persist: true, reload: true });
this.addMultipleAction('uninstall', async (items) => {
let ids = [];
for (let item of items) {
if (item.data.isLocal)
continue;
ids.push(item.data.id);
}
extensions_1.default.uninstallExtension(ids).catch(e => {
logger.error(e);
});
});
}
async loadItems(_context) {
let items = [];
let list = await extensions_1.default.getExtensionStates();
let lockedList = await extensions_1.default.getLockedList();
for (let stat of list) {
let prefix = '+';
if (stat.state == 'disabled') {
prefix = '-';
}
else if (stat.state == 'activated') {
prefix = '*';
}
else if (stat.state == 'unknown') {
prefix = '?';
}
let root = await this.nvim.call('resolve', stat.root);
let locked = lockedList.indexOf(stat.id) !== -1;
items.push({
label: `${prefix} ${stat.id}${locked ? ' ' : ''}\t${stat.isLocal ? '[RTP]\t' : ''}${stat.version}\t${root.replace(os_1.default.homedir(), '~')}`,
filterText: stat.id,
data: {
id: stat.id,
root,
state: stat.state,
isLocal: stat.isLocal,
priority: getPriority(stat.state)
}
});
}
items.sort((a, b) => {
if (a.data.priority != b.data.priority) {
return b.data.priority - a.data.priority;
}
return b.data.id - a.data.id ? 1 : -1;
});
return items;
}
doHighlight() {
let { nvim } = this;
nvim.pauseNotification();
nvim.command('syntax match CocExtensionsActivited /\\v^\\*/ contained containedin=CocExtensionsLine', true);
nvim.command('syntax match CocExtensionsLoaded /\\v^\\+/ contained containedin=CocExtensionsLine', true);
nvim.command('syntax match CocExtensionsDisabled /\\v^-/ contained containedin=CocExtensionsLine', true);
nvim.command('syntax match CocExtensionsName /\\v%3c\\S+/ contained containedin=CocExtensionsLine', true);
nvim.command('syntax match CocExtensionsRoot /\\v\\t[^\\t]*$/ contained containedin=CocExtensionsLine', true);
nvim.command('syntax match CocExtensionsLocal /\\v\\[RTP\\]/ contained containedin=CocExtensionsLine', true);
nvim.command('highlight default link CocExtensionsActivited Special', true);
nvim.command('highlight default link CocExtensionsLoaded Normal', true);
nvim.command('highlight default link CocExtensionsDisabled Comment', true);
nvim.command('highlight default link CocExtensionsName String', true);
nvim.command('highlight default link CocExtensionsLocal MoreMsg', true);
nvim.command('highlight default link CocExtensionsRoot Comment', true);
nvim.resumeNotification().catch(_e => {
// noop
});
}
}
exports.default = ExtensionList;
function getPriority(stat) {
switch (stat) {
case 'unknown':
return 2;
case 'activated':
return 1;
case 'disabled':
return -1;
default:
return 0;
}
}
//# sourceMappingURL=extensions.js.map