UNPKG

perlnavigator-server

Version:

Perl language server

92 lines 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getWorkspaceSymbols = exports.getSymbols = void 0; const node_1 = require("vscode-languageserver/node"); const types_1 = require("./types"); const parser_1 = require("./parser"); async function getSymbols(textDocument, uri) { let perlDoc = await (0, parser_1.parseDocument)(textDocument, types_1.ParseType.outline); let symbols = []; perlDoc.elems?.forEach((elements, elemName) => { elements.forEach((element) => { let kind; switch (element.type) { case types_1.PerlSymbolKind.LocalSub: case types_1.PerlSymbolKind.OutlineOnlySub: kind = node_1.SymbolKind.Function; break; case types_1.PerlSymbolKind.LocalMethod: kind = node_1.SymbolKind.Method; break; case types_1.PerlSymbolKind.Package: kind = node_1.SymbolKind.Package; break; case types_1.PerlSymbolKind.Class: kind = node_1.SymbolKind.Class; break; case types_1.PerlSymbolKind.Role: kind = node_1.SymbolKind.Interface; break; case types_1.PerlSymbolKind.Field: kind = node_1.SymbolKind.Field; break; case types_1.PerlSymbolKind.Label: kind = node_1.SymbolKind.Key; break; case types_1.PerlSymbolKind.Phaser: kind = node_1.SymbolKind.Event; break; case types_1.PerlSymbolKind.Constant: kind = node_1.SymbolKind.Constant; break; case types_1.PerlSymbolKind.HttpRoute: kind = node_1.SymbolKind.Interface; break; default: return; } const location = { range: { start: { line: element.line, character: 0 }, end: { line: element.lineEnd, character: 100 }, }, uri: uri, }; const newSymbol = { kind: kind, location: location, name: elemName, }; symbols.push(newSymbol); }); }); return symbols; } exports.getSymbols = getSymbols; function getWorkspaceSymbols(params, defaultMods) { return new Promise((resolve, reject) => { let symbols = []; // const lcQuery = params.query.toLowerCase(); // Currently unused. defaultMods.forEach((modUri, modName) => { if (true) { // Just send the whole list and let the client sort through it with fuzzy search // if(!lcQuery || modName.toLowerCase().startsWith(lcQuery)){ const location = { range: { start: { line: 0, character: 0 }, end: { line: 0, character: 100 }, }, uri: modUri, }; symbols.push({ name: modName, kind: node_1.SymbolKind.Module, location: location, }); } }); resolve(symbols); }); } exports.getWorkspaceSymbols = getWorkspaceSymbols; //# sourceMappingURL=symbols.js.map