UNPKG

fish-lsp

Version:

LSP implementation for fish/fish-shell

166 lines (165 loc) 7.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CompletionExample = exports.FishAliasCompletionItem = exports.FishAbbrCompletionItem = exports.FishCommandCompletionItem = exports.FishCompletionItem = exports.toCompletionItemKind = exports.FishCompletionItemKind = void 0; const vscode_languageserver_1 = require("vscode-languageserver"); exports.FishCompletionItemKind = { ABBR: 'abbr', BUILTIN: 'builtin', FUNCTION: 'function', VARIABLE: 'variable', EVENT: 'event', PIPE: 'pipe', ESC_CHARS: 'esc_chars', STATUS: 'status', WILDCARD: 'wildcard', COMMAND: 'command', ALIAS: 'alias', REGEX: 'regex', COMBINER: 'combiner', FORMAT_STR: 'format_str', STATEMENT: 'statement', ARGUMENT: 'argument', PATH: 'path', EMPTY: 'empty', SHEBANG: 'shebang', COMMENT: 'comment', DIAGNOSTIC: 'diagnostic', }; exports.toCompletionItemKind = { [exports.FishCompletionItemKind.ABBR]: vscode_languageserver_1.CompletionItemKind.Snippet, [exports.FishCompletionItemKind.BUILTIN]: vscode_languageserver_1.CompletionItemKind.Keyword, [exports.FishCompletionItemKind.FUNCTION]: vscode_languageserver_1.CompletionItemKind.Function, [exports.FishCompletionItemKind.VARIABLE]: vscode_languageserver_1.CompletionItemKind.Variable, [exports.FishCompletionItemKind.EVENT]: vscode_languageserver_1.CompletionItemKind.Event, [exports.FishCompletionItemKind.PIPE]: vscode_languageserver_1.CompletionItemKind.Operator, [exports.FishCompletionItemKind.ESC_CHARS]: vscode_languageserver_1.CompletionItemKind.Operator, [exports.FishCompletionItemKind.STATUS]: vscode_languageserver_1.CompletionItemKind.EnumMember, [exports.FishCompletionItemKind.WILDCARD]: vscode_languageserver_1.CompletionItemKind.Operator, [exports.FishCompletionItemKind.COMMAND]: vscode_languageserver_1.CompletionItemKind.Class, [exports.FishCompletionItemKind.ALIAS]: vscode_languageserver_1.CompletionItemKind.Constructor, [exports.FishCompletionItemKind.REGEX]: vscode_languageserver_1.CompletionItemKind.Operator, [exports.FishCompletionItemKind.COMBINER]: vscode_languageserver_1.CompletionItemKind.Keyword, [exports.FishCompletionItemKind.FORMAT_STR]: vscode_languageserver_1.CompletionItemKind.Operator, [exports.FishCompletionItemKind.STATEMENT]: vscode_languageserver_1.CompletionItemKind.Keyword, [exports.FishCompletionItemKind.ARGUMENT]: vscode_languageserver_1.CompletionItemKind.Property, [exports.FishCompletionItemKind.PATH]: vscode_languageserver_1.CompletionItemKind.File, [exports.FishCompletionItemKind.EMPTY]: vscode_languageserver_1.CompletionItemKind.Text, [exports.FishCompletionItemKind.SHEBANG]: vscode_languageserver_1.CompletionItemKind.File, [exports.FishCompletionItemKind.COMMENT]: vscode_languageserver_1.CompletionItemKind.Text, [exports.FishCompletionItemKind.DIAGNOSTIC]: vscode_languageserver_1.CompletionItemKind.Text, }; class FishCompletionItem { label; fishKind; detail; documentation; examples; constructor(label, fishKind, detail, documentation, examples) { this.label = label; this.fishKind = fishKind; this.detail = detail; this.documentation = documentation; this.examples = examples; this.local = false; this.useDocAsDetail = false; this.setKinds(fishKind); } setKinds(kind) { this.kind = exports.toCompletionItemKind[kind]; this.fishKind = kind; return this; } setLocal() { this.local = true; return this; } setUseDocAsDetail() { this.useDocAsDetail = true; return this; } setData(data) { this.data = data; const removeLength = data.word ? data.word.length : 1; this.textEdit = vscode_languageserver_1.TextEdit.replace(vscode_languageserver_1.Range.create({ line: data.position.line, character: data.position.character - removeLength }, data.position), this.insertText || this.label); return this; } setPriority(priority) { this.priority = priority; return this; } } exports.FishCompletionItem = FishCompletionItem; class FishCommandCompletionItem extends FishCompletionItem { } exports.FishCommandCompletionItem = FishCommandCompletionItem; class FishAbbrCompletionItem extends FishCommandCompletionItem { constructor(label, detail, documentation) { super(label, exports.FishCompletionItemKind.ABBR, detail, documentation); const last = Math.max(documentation.lastIndexOf('#') + 1, documentation.length); this.insertText = documentation.slice(label.length + 1, last); this.commitCharacters = ['\t', ';', ' ']; } } exports.FishAbbrCompletionItem = FishAbbrCompletionItem; class FishAliasCompletionItem extends FishCommandCompletionItem { constructor(label, detail, documentation) { super(label, exports.FishCompletionItemKind.ALIAS, detail, documentation); this.documentation = documentation.slice(label.length + 1); } } exports.FishAliasCompletionItem = FishAliasCompletionItem; (function (FishCompletionItem) { function create(label, kind, detail, documentation, examples) { switch (kind) { case exports.FishCompletionItemKind.ABBR: return new FishAbbrCompletionItem(label, detail, documentation); case exports.FishCompletionItemKind.ALIAS: return new FishAliasCompletionItem(label, detail, documentation); case exports.FishCompletionItemKind.COMMAND: case exports.FishCompletionItemKind.BUILTIN: case exports.FishCompletionItemKind.FUNCTION: case exports.FishCompletionItemKind.VARIABLE: case exports.FishCompletionItemKind.EVENT: return new FishCommandCompletionItem(label, kind, detail, documentation); default: return new FishCompletionItem(label, kind, detail, documentation, examples); } } FishCompletionItem.create = create; function fromSymbol(symbol) { switch (symbol.kind) { case vscode_languageserver_1.SymbolKind.Function: return create(symbol.name, exports.FishCompletionItemKind.FUNCTION, 'Function', symbol.detail).setLocal().setPriority(50); case vscode_languageserver_1.SymbolKind.Variable: return create(symbol.name, exports.FishCompletionItemKind.VARIABLE, 'Variable', symbol.detail).setLocal().setPriority(60); default: return create(symbol.name, exports.FishCompletionItemKind.EMPTY, 'Empty', symbol.detail).setLocal().setPriority(70); } } FishCompletionItem.fromSymbol = fromSymbol; function createData(uri, line, word, position, command, context) { return { uri, line, word, position, command, context }; } FishCompletionItem.createData = createData; })(FishCompletionItem || (exports.FishCompletionItem = FishCompletionItem = {})); var CompletionExample; (function (CompletionExample) { function create(title, ...shellText) { const shellTextString = shellText.length > 1 ? shellText.join('\n') : shellText.at(0); return { title, shellText: shellTextString, }; } CompletionExample.create = create; function toMarkedString(example) { return [ '___', '```fish', `# ${example.title}`, example.shellText, '```', ].join('\n'); } CompletionExample.toMarkedString = toMarkedString; })(CompletionExample || (exports.CompletionExample = CompletionExample = {}));