diff --git a/package.json b/package.json index d7f191e..e5ea245 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,26 @@ "markdown", "erb", "ejs", - "svelte" + "svelte", + "haml", + "slim" + ] + }, + "html-css-class-completion.HAMLLanguages": { + "type": "array", + "description": "A list of HAML based languages where suggestions are enabled.", + "default": [ + "haml", + "slim" + ] + }, + "html-css-class-completion.ERBLanguages": { + "type": "array", + "description": "A list of ERB based languages where suggestions are enabled.", + "default": [ + "erb", + "haml", + "slim" ] }, "html-css-class-completion.CSSLanguages": { diff --git a/src/extension.ts b/src/extension.ts index 5028ee5..645b8e7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -21,6 +21,8 @@ enum Configuration { ExcludeGlobPattern = "html-css-class-completion.excludeGlobPattern", EnableEmmetSupport = "html-css-class-completion.enableEmmetSupport", HTMLLanguages = "html-css-class-completion.HTMLLanguages", + HAMLLanguages = "html-css-class-completion.HAMLLanguages", + ERBLanguages = "html-css-class-completion.ERBLanguages", CSSLanguages = "html-css-class-completion.CSSLanguages", JavaScriptLanguages = "html-css-class-completion.JavaScriptLanguages", } @@ -33,6 +35,8 @@ const completionTriggerChars = ['"', "'", " ", "."]; let caching = false; const htmlDisposables: Disposable[] = []; +const hamlDisposables: Disposable[] = []; +const erbDisposables: Disposable[] = []; const cssDisposables: Disposable[] = []; const javaScriptDisposables: Disposable[] = []; const emmetDisposables: Disposable[] = []; @@ -144,6 +148,20 @@ const registerHTMLProviders = (disposables: Disposable[]) => disposables.push(registerCompletionProvider(extension, /class=["|']([\w- ]*$)/)); }); +const registerHAMLProviders = (disposables: Disposable[]) => + workspace.getConfiguration() + ?.get(Configuration.HAMLLanguages) + ?.forEach((extension) => { + disposables.push(registerCompletionProvider(extension, /(?=\.)([\w-. ]*$)/, "", ".")); + }); + +const registerERBProviders = (disposables: Disposable[]) => + workspace.getConfiguration() + ?.get(Configuration.HAMLLanguages) + ?.forEach((extension) => { + disposables.push(registerCompletionProvider(extension, /class:\s+["|']([\w- ]*$)/)); + }); + const registerCSSProviders = (disposables: Disposable[]) => workspace.getConfiguration() .get(Configuration.CSSLanguages) @@ -207,6 +225,16 @@ export async function activate(context: ExtensionContext): Promise { registerHTMLProviders(htmlDisposables); } + if (e.affectsConfiguration(Configuration.HAMLLanguages)) { + unregisterProviders(hamlDisposables); + registerHAMLProviders(hamlDisposables); + } + + if (e.affectsConfiguration(Configuration.ERBLanguages)) { + unregisterProviders(erbDisposables); + registerERBProviders(erbDisposables); + } + if (e.affectsConfiguration(Configuration.CSSLanguages)) { unregisterProviders(cssDisposables); registerCSSProviders(cssDisposables); @@ -246,6 +274,8 @@ export async function activate(context: ExtensionContext): Promise { } registerHTMLProviders(htmlDisposables); + registerHAMLProviders(hamlDisposables); + registerERBProviders(erbDisposables); registerCSSProviders(cssDisposables); registerJavaScriptProviders(javaScriptDisposables); @@ -263,6 +293,8 @@ export async function activate(context: ExtensionContext): Promise { export function deactivate(): void { unregisterProviders(htmlDisposables); + unregisterProviders(hamlDisposables); + unregisterProviders(erbDisposables); unregisterProviders(cssDisposables); unregisterProviders(javaScriptDisposables); unregisterProviders(emmetDisposables);