UNPKG

@chemzqm/neovim

Version:

NodeJS client API for vim9 and neovim

108 lines (107 loc) 3.83 kB
"use strict"; 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(); }); }