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