greybel-languageserver-core
Version:
Core functionality of language server for GreyScript
55 lines • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.lookupBase = exports.lookupIdentifier = exports.lookupScopes = exports.lookupRootScope = void 0;
const miniscript_core_1 = require("miniscript-core");
const lookupRootScope = (origin) => {
let current = origin;
while (current.scope) {
current = current.scope;
}
return current;
};
exports.lookupRootScope = lookupRootScope;
const lookupScopes = (origin) => {
if (!origin.scope)
return [origin];
const rootScope = (0, exports.lookupRootScope)(origin);
if (rootScope === origin.scope)
return [origin, rootScope];
return [origin, origin.scope, rootScope];
};
exports.lookupScopes = lookupScopes;
const lookupIdentifier = (root) => {
// non greedy identifier to string method; can be used instead of ASTStringify
switch (root.type) {
case miniscript_core_1.ASTType.CallStatement:
return (0, exports.lookupIdentifier)(root.expression);
case miniscript_core_1.ASTType.CallExpression:
return (0, exports.lookupIdentifier)(root.base);
case miniscript_core_1.ASTType.Identifier:
return root;
case miniscript_core_1.ASTType.MemberExpression:
return (0, exports.lookupIdentifier)(root.identifier);
case miniscript_core_1.ASTType.IndexExpression:
return (0, exports.lookupIdentifier)(root.index);
default:
return null;
}
};
exports.lookupIdentifier = lookupIdentifier;
const lookupBase = (node = null) => {
switch (node?.type) {
case miniscript_core_1.ASTType.MemberExpression:
return node.base;
case miniscript_core_1.ASTType.IndexExpression:
return node.base;
case miniscript_core_1.ASTType.CallExpression:
return node.base;
case miniscript_core_1.ASTType.SliceExpression:
return node.base;
default:
return null;
}
};
exports.lookupBase = lookupBase;
//# sourceMappingURL=ast-utils.js.map