greybel-languageserver-core
Version:
Core functionality of language server for GreyScript
71 lines • 3.16 kB
JavaScript
;
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