coc.nvim
Version:
LSP based intellisense engine for neovim & vim8.
166 lines • 5.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const path_1 = tslib_1.__importDefault(require("path"));
const child_process_1 = require("child_process");
const debounce_1 = tslib_1.__importDefault(require("debounce"));
const fs_1 = tslib_1.__importDefault(require("fs"));
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
const vscode_uri_1 = require("vscode-uri");
const which_1 = tslib_1.__importDefault(require("which"));
const platform = tslib_1.__importStar(require("./platform"));
exports.platform = platform;
const isuri_1 = tslib_1.__importDefault(require("isuri"));
const mkdirp_1 = tslib_1.__importDefault(require("mkdirp"));
const logger = require('./logger')('util-index');
const prefix = '[coc.nvim] ';
function escapeSingleQuote(str) {
return str.replace(/'/g, "''");
}
exports.escapeSingleQuote = escapeSingleQuote;
function echoErr(nvim, msg) {
echoMsg(nvim, prefix + msg, 'Error'); // tslint:disable-line
}
exports.echoErr = echoErr;
function echoWarning(nvim, msg) {
echoMsg(nvim, prefix + msg, 'WarningMsg'); // tslint:disable-line
}
exports.echoWarning = echoWarning;
function echoMessage(nvim, msg) {
echoMsg(nvim, prefix + msg, 'MoreMsg'); // tslint:disable-line
}
exports.echoMessage = echoMessage;
function wait(ms) {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, ms);
});
}
exports.wait = wait;
function echoMsg(nvim, msg, hl) {
let method = process.env.VIM_NODE_RPC == '1' ? 'callTimer' : 'call';
nvim[method]('coc#util#echo_messages', [hl, msg.split('\n')], true);
}
function getUri(fullpath, id, buftype) {
if (!fullpath)
return `untitled:${id}`;
if (platform.isWindows)
fullpath = path_1.default.win32.normalize(fullpath);
if (path_1.default.isAbsolute(fullpath))
return vscode_uri_1.URI.file(fullpath).toString();
if (isuri_1.default.isValid(fullpath))
return vscode_uri_1.URI.parse(fullpath).toString();
if (buftype != '')
return `${buftype}:${id}`;
return `unknown:${id}`;
}
exports.getUri = getUri;
function disposeAll(disposables) {
while (disposables.length) {
const item = disposables.pop();
if (item) {
item.dispose();
}
}
}
exports.disposeAll = disposeAll;
function executable(command) {
try {
which_1.default.sync(command);
}
catch (e) {
return false;
}
return true;
}
exports.executable = executable;
function runCommand(cmd, opts = {}, timeout) {
if (!platform.isWindows) {
opts.shell = opts.shell || process.env.SHELL;
}
return new Promise((resolve, reject) => {
let timer;
if (timeout) {
timer = setTimeout(() => {
reject(new Error(`timeout after ${timeout}s`));
}, timeout * 1000);
}
child_process_1.exec(cmd, opts, (err, stdout, stderr) => {
if (timer)
clearTimeout(timer);
if (err) {
reject(new Error(`exited with ${err.code}\n${err}\n${stderr}`));
return;
}
resolve(stdout);
});
});
}
exports.runCommand = runCommand;
function watchFile(filepath, onChange) {
let callback = debounce_1.default(onChange, 100);
try {
let watcher = fs_1.default.watch(filepath, {
persistent: true,
recursive: false,
encoding: 'utf8'
}, () => {
callback();
});
return vscode_languageserver_protocol_1.Disposable.create(() => {
watcher.close();
});
}
catch (e) {
return vscode_languageserver_protocol_1.Disposable.create(() => {
// noop
});
}
}
exports.watchFile = watchFile;
function isRunning(pid) {
try {
let res = process.kill(pid, 0);
return res == true;
}
catch (e) {
return e.code === 'EPERM';
}
}
exports.isRunning = isRunning;
function getKeymapModifier(mode) {
if (mode == 'n' || mode == 'v')
return '';
if (mode == 'i')
return '<C-o>';
if (mode == 's' || mode == 'x')
return '<Esc>';
return '';
}
exports.getKeymapModifier = getKeymapModifier;
async function mkdirp(path, mode) {
return new Promise(resolve => {
mkdirp_1.default(path, { mode }, err => {
if (err)
return resolve(false);
resolve(true);
});
});
}
exports.mkdirp = mkdirp;
function nfcall(fn, ...args) {
return new Promise((c, e) => fn(...args, (err, r) => err ? e(err) : c(r)));
}
// consider textDocument without version to be valid
function isDocumentEdit(edit) {
if (edit == null)
return false;
if (!vscode_languageserver_protocol_1.TextDocumentIdentifier.is(edit.textDocument))
return false;
if (!Array.isArray(edit.edits))
return false;
return true;
}
exports.isDocumentEdit = isDocumentEdit;
//# sourceMappingURL=index.js.map