UNPKG

fish-lsp

Version:

LSP implementation for fish/fish-shell

89 lines (88 loc) 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FishCompletionList = exports.FishCompletionListBuilder = void 0; const types_1 = require("./types"); const vscode_languageserver_1 = require("vscode-languageserver"); class FishCompletionListBuilder { logger; items; data = {}; constructor(logger) { this.logger = logger; this.items = []; } addItem(item) { this.items.push(item); } addItems(items) { this.items.push(...items); } addSymbols(symbols, insertDollarSign = false) { const symbolItems = symbols.map((symbol) => { if (insertDollarSign && symbol.kind === vscode_languageserver_1.SymbolKind.Variable) { return { ...types_1.FishCompletionItem.fromSymbol(symbol), label: '$' + symbol.name, }; } return types_1.FishCompletionItem.fromSymbol(symbol); }); this.items.push(...symbolItems); } addData(data) { this.items = this.items.map((item) => { const newData = { ...data, line: data.line.slice(0, data.line.length - data.word.length) + item.label, }; return item.setData(newData); }); return this; } reset() { this.items = []; } build(isIncomplete = false) { const uniqueItems = this.items.filter((item, index, self) => index === self.findIndex((t) => t.label === item.label)); return FishCompletionList.create(isIncomplete, this.data, uniqueItems); } log() { const result = this.items.map((item, index) => itemLoggingInfo(item, index)); this.logger.log('CompletionList', result); } get _logger() { return this.logger; } } exports.FishCompletionListBuilder = FishCompletionListBuilder; function itemLoggingInfo(item, index) { return { index, label: item.label, detail: item.detail, kind: types_1.toCompletionItemKind[item.fishKind], fishKind: item.fishKind, documentation: item.documentation, data: item.data, }; } var FishCompletionList; (function (FishCompletionList) { function empty() { return { isIncomplete: false, items: [], }; } FishCompletionList.empty = empty; function create(isIncomplete, data, items = []) { return { isIncomplete, items, itemDefaults: { data, }, }; } FishCompletionList.create = create; })(FishCompletionList || (exports.FishCompletionList = FishCompletionList = {}));