@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>
47 lines • 2.38 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.CompletionsProvider = void 0;
const theme_check_common_1 = require("@shopify/theme-check-common");
const TypeSystem_1 = require("../TypeSystem");
const params_1 = require("./params");
const providers_1 = require("./providers");
class CompletionsProvider {
constructor({ documentManager, themeDocset, getTranslationsForURI = async () => ({}), getSnippetNamesForURI = async () => [], getThemeSettingsSchemaForURI = async () => [], log = () => { }, }) {
this.providers = [];
this.documentManager = documentManager;
this.themeDocset = themeDocset;
this.log = log;
const typeSystem = new TypeSystem_1.TypeSystem(themeDocset, getThemeSettingsSchemaForURI);
this.providers = [
new providers_1.HtmlTagCompletionProvider(),
new providers_1.HtmlAttributeCompletionProvider(documentManager),
new providers_1.HtmlAttributeValueCompletionProvider(),
new providers_1.LiquidTagsCompletionProvider(themeDocset),
new providers_1.ObjectCompletionProvider(typeSystem),
new providers_1.ObjectAttributeCompletionProvider(typeSystem, getThemeSettingsSchemaForURI),
new providers_1.FilterCompletionProvider(typeSystem),
new providers_1.TranslationCompletionProvider(documentManager, getTranslationsForURI),
new providers_1.RenderSnippetCompletionProvider(getSnippetNamesForURI),
];
}
async completions(params) {
const uri = params.textDocument.uri;
const document = this.documentManager.get(uri);
// Supports only Liquid resources
if ((document === null || document === void 0 ? void 0 : document.type) !== theme_check_common_1.SourceCodeType.LiquidHtml) {
return [];
}
try {
const liquidParams = (0, params_1.createLiquidCompletionParams)(document, params);
const promises = this.providers.map((p) => p.completions(liquidParams));
const results = await Promise.all(promises);
return results.flat();
}
catch (err) {
this.log(`[SERVER] CompletionsProvider error: ${err}`);
return [];
}
}
}
exports.CompletionsProvider = CompletionsProvider;
//# sourceMappingURL=CompletionsProvider.js.map
;