fish-lsp
Version:
LSP implementation for fish/fish-shell
110 lines (109 loc) • 4.18 kB
JavaScript
;
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 = {}));