UNPKG

greybel-languageserver-core

Version:
71 lines 3.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.activate = exports.getDefaultCompletionList = exports.getPropertyCompletionList = void 0; const miniscript_core_1 = require("miniscript-core"); const completion_list_builder_1 = require("../helper/completion-list-builder"); const lookup_type_1 = require("../helper/lookup-type"); const constants_1 = require("./autocomplete/constants"); const keywords_1 = require("./autocomplete/keywords"); const operators_1 = require("./autocomplete/operators"); const getPropertyCompletionList = async (helper, item) => { const entity = await helper.lookupBasePath(item); if (entity === null) { return null; } return entity.item.getAllProperties().reduce((result, it) => { const sources = it.type.getSource(); result.set(it.name, { kind: it.kind, line: sources && sources.length > 0 ? sources[0].start.line - 1 : -1 }); return result; }, new Map()); }; exports.getPropertyCompletionList = getPropertyCompletionList; const getDefaultCompletionList = () => { return [ ...keywords_1.AVAILABLE_KEYWORDS, ...operators_1.AVAILABLE_OPERATORS, ...constants_1.AVAILABLE_CONSTANTS ]; }; exports.getDefaultCompletionList = getDefaultCompletionList; function activate(context) { context.connection.onCompletion(async (params) => { if (!context.getConfiguration().autocomplete) { return; } const document = await context.fs.getTextDocument(params.textDocument.uri); if (document == null) { return; } // waiting for changes const activeDocument = await context.documentManager.getLatest(document); const helper = new lookup_type_1.LookupHelper(activeDocument, context); const astResult = await helper.lookupAST(params.position); const completionListBuilder = new completion_list_builder_1.CompletionListBuilder(); if (astResult) { const { closest } = astResult; if (closest instanceof miniscript_core_1.ASTMemberExpression) { completionListBuilder.addCollection(await (0, exports.getPropertyCompletionList)(helper, closest)); } else if (closest instanceof miniscript_core_1.ASTIndexExpression) { completionListBuilder.addCollection(await (0, exports.getPropertyCompletionList)(helper, closest)); } else { completionListBuilder.setDefault((0, exports.getDefaultCompletionList)()); completionListBuilder.addCollection(await helper.findAllAvailableIdentifierRelatedToPosition(astResult.closest)); } } else { completionListBuilder.setDefault((0, exports.getDefaultCompletionList)()); completionListBuilder.addCollection(await helper.findAllAvailableIdentifierInRoot()); } return completionListBuilder.build(); }); context.connection.onCompletionResolve((item) => { return item; }); } exports.activate = activate; //# sourceMappingURL=autocomplete.js.map