@shopify/theme-language-server-common
Version:
<h1 align="center" style="position: relative;" > <br> <img src="https://github.com/Shopify/theme-check-vscode/blob/main/images/shopify_glyph.png?raw=true" alt="logo" width="141" height="160"> <br> Theme Language Server </h1>
54 lines • 2.06 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.LiquidObjectHoverProvider = void 0;
const liquid_html_parser_1 = require("@shopify/liquid-html-parser");
const TypeSystem_1 = require("../../TypeSystem");
const docset_1 = require("../../docset");
class LiquidObjectHoverProvider {
constructor(typeSystem) {
this.typeSystem = typeSystem;
}
async hover(currentNode, ancestors, params) {
var _a;
if (currentNode.type !== liquid_html_parser_1.NodeTypes.VariableLookup &&
currentNode.type !== liquid_html_parser_1.NodeTypes.AssignMarkup) {
return null;
}
if (!currentNode.name) {
return null;
}
let node = currentNode;
if (node.type === liquid_html_parser_1.NodeTypes.VariableLookup) {
node = {
...currentNode,
lookups: [],
};
}
const type = await this.typeSystem.inferType(node, ancestors[0], params.textDocument.uri);
const objectMap = await this.typeSystem.objectMap(params.textDocument.uri, ancestors[0]);
const entry = objectMap[(0, TypeSystem_1.isArrayType)(type) ? type.valueType : type];
if (type === TypeSystem_1.Unknown) {
return null;
}
if (!entry) {
const entryByName = (_a = objectMap[currentNode.name]) !== null && _a !== void 0 ? _a : {};
return {
contents: {
kind: 'markdown',
value: (0, docset_1.render)({
...entryByName,
name: currentNode.name,
}, type, 'object'),
},
};
}
return {
contents: {
kind: 'markdown',
value: (0, docset_1.render)({ ...entry, name: currentNode.name }, type, 'object'),
},
};
}
}
exports.LiquidObjectHoverProvider = LiquidObjectHoverProvider;
//# sourceMappingURL=LiquidObjectHoverProvider.js.map
;