UNPKG

fish-lsp

Version:

LSP implementation for fish/fish-shell

110 lines (109 loc) 4.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutoloadedPathVariables = exports.autoloadedFishVariableNames = void 0; exports.setupProcessEnvExecFile = setupProcessEnvExecFile; const child_process_1 = require("child_process"); const path_1 = require("path"); const util_1 = require("util"); const snippets_1 = require("./snippets"); const markdown_builder_1 = require("./markdown-builder"); const env_manager_1 = require("./env-manager"); const execFileAsync = (0, util_1.promisify)(child_process_1.execFile); exports.autoloadedFishVariableNames = [ '__fish_bin_dir', '__fish_config_dir', '__fish_data_dir', '__fish_help_dir', '__fish_initialized', '__fish_sysconf_dir', '__fish_user_data_dir', '__fish_added_user_paths', '__fish_vendor_completionsdirs', '__fish_vendor_confdirs', '__fish_vendor_functionsdirs', 'fish_function_path', 'fish_complete_path', 'fish_user_paths', ]; async function setupProcessEnvExecFile() { try { const file = (0, path_1.resolve)(__dirname, '../../fish_files/get-fish-autoloaded-paths.fish'); const { stdout } = await execFileAsync('fish', [file]); stdout.split('\n').forEach(line => { const [variable, value] = line.split('\t'); if (variable) { const storeValue = value ? value.trim() : undefined; env_manager_1.env.set(variable, storeValue); } }); } catch (error) { process.stderr.write('[ERROR] retrieving autoloaded fish env variables failure\n'); } return exports.autoloadedFishVariableNames; } var AutoloadedPathVariables; (function (AutoloadedPathVariables) { function includes(name) { return exports.autoloadedFishVariableNames.includes(name); } AutoloadedPathVariables.includes = includes; function get(variable) { return env_manager_1.env.getAsArray(variable); } AutoloadedPathVariables.get = get; function asShowDocumentation(variable) { const value = get(variable); return [ `$${variable} set in global scope, unexported, with ${value.length} elements`, ...value.map((item, idx) => { return `$${variable}[${idx + 1}]: |${item}|`; }), ].join('\n'); } AutoloadedPathVariables.asShowDocumentation = asShowDocumentation; function update(variable, ...newValues) { const values = get(variable); const updatedValues = [...values, ...newValues].join(':'); env_manager_1.env.set(variable, updatedValues); return updatedValues; } AutoloadedPathVariables.update = update; function read(variable) { return env_manager_1.env.get(variable) || ''; } AutoloadedPathVariables.read = read; function all() { return Array.from(exports.autoloadedFishVariableNames); } AutoloadedPathVariables.all = all; function find(key) { if (includes(key)) { return get(key); } return []; } AutoloadedPathVariables.find = find; function has(key) { return includes(key); } AutoloadedPathVariables.has = has; function getHoverDocumentation(variable) { if (includes(variable)) { const doc = snippets_1.PrebuiltDocumentationMap.getByType('variable').find(({ name }) => name === variable); let description = 'Autoloaded fish variable'; description += doc?.description ? [ '\n' + markdown_builder_1.md.separator(), doc.description, ].join('\n') : ''; return [ `(${markdown_builder_1.md.italic('variable')}) ${markdown_builder_1.md.bold('$' + variable)}`, description, markdown_builder_1.md.separator(), markdown_builder_1.md.codeBlock('txt', asShowDocumentation(variable)), ].join('\n'); } return ''; } AutoloadedPathVariables.getHoverDocumentation = getHoverDocumentation; })(AutoloadedPathVariables || (exports.AutoloadedPathVariables = AutoloadedPathVariables = {}));