fish-lsp
Version:
LSP implementation for fish/fish-shell
101 lines (100 loc) • 3.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SymbolConverters = void 0;
const vscode_languageserver_1 = require("vscode-languageserver");
const symbol_1 = require("./symbol");
var SymbolConverters;
(function (SymbolConverters) {
const shouldIncludeAsDocumentSymbol = (symbol) => {
switch (true) {
case symbol.fishKind === 'FUNCTION_EVENT':
return false;
default:
return true;
}
};
const processDocumentSymbolChildren = (symbol) => {
const visitedChildren = [];
for (const child of symbol.children) {
if (!shouldIncludeAsDocumentSymbol(child))
continue;
const newChild = SymbolConverters.symbolToDocumentSymbol(child);
if (newChild) {
visitedChildren.push(newChild);
}
}
return visitedChildren;
};
const createMarkupContent = (symbol) => {
return {
kind: vscode_languageserver_1.MarkupKind.Markdown,
value: symbol.detail,
};
};
SymbolConverters.symbolToWorkspaceSymbol = (symbol) => {
return vscode_languageserver_1.WorkspaceSymbol.create(symbol.name, symbol.kind, symbol.uri, symbol.selectionRange);
};
SymbolConverters.symbolToDocumentSymbol = (symbol) => {
if (!shouldIncludeAsDocumentSymbol(symbol)) {
return undefined;
}
const children = processDocumentSymbolChildren(symbol);
return vscode_languageserver_1.DocumentSymbol.create(symbol.name, symbol.detail, symbol.kind, symbol.range, symbol.selectionRange, children);
};
SymbolConverters.symbolToLocation = (symbol) => {
return vscode_languageserver_1.Location.create(symbol.uri, symbol.selectionRange);
};
SymbolConverters.symbolToPosition = (symbol) => {
return {
line: symbol.selectionRange.start.line,
character: symbol.selectionRange.start.character,
};
};
SymbolConverters.symbolToFoldingRange = (symbol) => {
return {
startLine: symbol.range.start.line,
endLine: symbol.range.end.line,
startCharacter: symbol.range.start.character,
endCharacter: symbol.range.end.character,
collapsedText: symbol.name,
kind: vscode_languageserver_1.FoldingRangeKind.Region,
};
};
SymbolConverters.symbolToMarkupContent = (symbol) => {
return createMarkupContent(symbol);
};
SymbolConverters.symbolToHover = (symbol, currentUri = '') => {
return {
contents: createMarkupContent(symbol),
range: currentUri === symbol.uri ? symbol.selectionRange : undefined,
};
};
SymbolConverters.copySymbol = (symbol) => {
return new symbol_1.FishSymbol({
name: symbol.name,
detail: symbol.detail,
document: symbol.document,
uri: symbol.uri,
fishKind: symbol.fishKind,
node: symbol.node,
focusedNode: symbol.focusedNode,
scope: symbol.scope,
range: symbol.range,
selectionRange: symbol.selectionRange,
children: symbol.children.map(SymbolConverters.copySymbol),
});
};
SymbolConverters.symbolToString = (symbol) => {
return JSON.stringify({
name: symbol.name,
kind: symbol.kind,
uri: symbol.uri,
scope: symbol.scope.scopeTag,
detail: symbol.detail,
range: symbol.range,
selectionRange: symbol.selectionRange,
aliasedNames: symbol.aliasedNames,
children: symbol.children.map(child => child.name),
}, null, 2);
};
})(SymbolConverters || (exports.SymbolConverters = SymbolConverters = {}));