greybel-languageserver-core
Version:
Core functionality of language server for GreyScript
65 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.activate = void 0;
const kind_1 = require("../helper/kind");
const handleItem = (document, item) => {
if (item.source == null) {
return [];
}
const kind = item.kind ? (0, kind_1.getSymbolItemKind)(item.kind) : 13; // SymbolKind.Variable
const result = [];
for (const source of item.source) {
const start = {
line: source.start.line - 1,
character: source.start.character - 1
};
const end = {
line: source.end.line - 1,
character: source.end.character - 1
};
result.push({
name: item.name,
kind,
location: {
uri: document.textDocument.uri,
range: { start, end }
}
});
}
return result;
};
const findAllAssignments = (document, query) => {
const typeDoc = document.typeDocument;
const defs = typeDoc.resolveAllAssignmentsWithQuery(query);
const result = [];
for (const defItem of defs) {
result.push(...handleItem(document, defItem));
}
return result;
};
function activate(context) {
context.connection.onDocumentSymbol(async (params) => {
const document = await context.fs.getTextDocument(params.textDocument.uri);
if (document == null) {
return;
}
const parseResult = context.documentManager.get(document);
if (!parseResult.parsedPayload) {
return;
}
return findAllAssignments(parseResult, '');
});
context.connection.onWorkspaceSymbol((params) => {
const result = [];
for (const document of context.fs.getAllTextDocuments()) {
const parseResult = context.documentManager.get(document);
if (!parseResult.parsedPayload) {
continue;
}
result.push(...findAllAssignments(parseResult, params.query));
}
return result;
});
}
exports.activate = activate;
//# sourceMappingURL=symbol.js.map