@chemzqm/neovim
Version:
NodeJS client API for vim9 and neovim
108 lines (107 loc) • 3.83 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupVim = setupVim;
exports.shutdown = shutdown;
exports.wait = wait;
const cp = __importStar(require("child_process"));
const net_1 = __importDefault(require("net"));
const os_1 = __importDefault(require("os"));
const path_1 = __importDefault(require("path"));
const attach_1 = require("../attach/attach");
const logger_1 = require("../utils/logger");
const vimrc = path_1.default.resolve(__dirname, 'vimrc');
let proc;
let nvim;
let server;
async function setupVim() {
var _a;
const address = path_1.default.join(os_1.default.tmpdir(), `coc-test-${uid(8)}.sock`);
let promise = new Promise(resolve => {
server = net_1.default.createServer(socket => {
const logger = (0, logger_1.createLogger)('test');
nvim = (0, attach_1.attach)({ reader: socket, writer: socket }, logger, false);
nvim.on('vim_error', err => {
console.error('Error from vim: ', err);
});
resolve(nvim);
});
server.on('error', e => {
console.error(e);
});
server.listen(address);
});
let executable = (_a = process.env.VIM_COMMAND) !== null && _a !== void 0 ? _a : 'vim';
proc = cp.spawn(executable, ['--clean', '--noplugin', '--not-a-term', '-u', vimrc], {
stdio: 'pipe',
shell: true,
cwd: __dirname,
env: Object.assign({ NVIM_REMOTE_ADDRESS: address }, process.env)
});
proc.on('error', err => {
console.error(err);
});
return await promise;
}
function uid(length) {
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
let result = '';
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
async function shutdown() {
if (nvim)
await nvim.quit();
if (server)
server.close();
if (proc)
proc.kill('SIGKILL');
}
function wait(ms) {
if (ms <= 0)
return Promise.resolve(undefined);
return new Promise(resolve => {
let timer = setTimeout(() => {
resolve(undefined);
}, ms);
timer.unref();
});
}