UNPKG

fish-lsp

Version:

LSP implementation for fish/fish-shell

101 lines (100 loc) 3.88 kB
"use strict"; 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 = {}));