UNPKG

@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>

90 lines (75 loc) 2.84 kB
import { memo } from '@shopify/theme-check-common'; import { Connection, DidChangeConfigurationNotification, DidChangeWatchedFilesNotification, DidChangeWatchedFilesRegistrationOptions, } from 'vscode-languageserver'; import { ClientCapabilities } from '../ClientCapabilities'; export const CHECK_ON_OPEN = 'themeCheck.checkOnOpen' as const; export const CHECK_ON_SAVE = 'themeCheck.checkOnSave' as const; export const CHECK_ON_CHANGE = 'themeCheck.checkOnChange' as const; export const PRELOAD_ON_BOOT = 'themeCheck.preloadOnBoot' as const; export const ConfigurationKeys = [ CHECK_ON_OPEN, CHECK_ON_SAVE, CHECK_ON_CHANGE, PRELOAD_ON_BOOT, ] as const; export class Configuration { [CHECK_ON_OPEN]: boolean = true; [CHECK_ON_SAVE]: boolean = true; [CHECK_ON_CHANGE]: boolean = true; [PRELOAD_ON_BOOT]: boolean = true; constructor(private connection: Connection, private capabilities: ClientCapabilities) { this.connection = connection; this.capabilities = capabilities; } setup() { this[CHECK_ON_OPEN] = this.capabilities.initializationOption(CHECK_ON_OPEN, true); this[CHECK_ON_SAVE] = this.capabilities.initializationOption(CHECK_ON_SAVE, true); this[CHECK_ON_CHANGE] = this.capabilities.initializationOption(CHECK_ON_CHANGE, true); this[PRELOAD_ON_BOOT] = this.capabilities.initializationOption(PRELOAD_ON_BOOT, true); } async shouldCheckOnOpen() { await this.fetchConfiguration(); return this[CHECK_ON_OPEN]; } async shouldCheckOnSave() { await this.fetchConfiguration(); return this[CHECK_ON_SAVE]; } async shouldCheckOnChange() { await this.fetchConfiguration(); return this[CHECK_ON_CHANGE]; } async shouldPreloadOnBoot() { await this.fetchConfiguration(); return this[PRELOAD_ON_BOOT]; } clearCache() { this.fetchConfiguration.clearCache(); } fetchConfiguration = memo(async () => { if (!this.capabilities.hasWorkspaceConfigurationSupport) return; const configs = await this.connection.workspace.getConfiguration( ConfigurationKeys.map((key) => ({ section: key })), ); for (let i = 0; i < ConfigurationKeys.length; i++) { const key = ConfigurationKeys[i]; if (configs[i] !== null) { this[key] = configs[i]; } } }); registerDidChangeCapability = memo(async () => { if (!this.capabilities.hasDidChangeConfigurationDynamicRegistrationSupport) return; return this.connection.client.register(DidChangeConfigurationNotification.type); }); registerDidChangeWatchedFilesNotification = async ( options?: DidChangeWatchedFilesRegistrationOptions, ) => { if (!this.capabilities.hasDidChangeWatchedFilesDynamicRegistrationSupport) return; return this.connection.client.register(DidChangeWatchedFilesNotification.type, options); }; }