perlnavigator-server
Version:
Perl language server
92 lines • 3.57 kB
JavaScript
;
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