From 0c046c8e96829c103cf3af995f6da0c42c655cdf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carlos=20Lo=CC=81pez=20de=20Pablo?= <carlos@filmin.es>
Date: Sat, 26 Dec 2020 16:43:01 +0100
Subject: [PATCH 1/4] fixes escaped characters in css selectors

---
 src/parse-engines/common/css-class-extractor.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/parse-engines/common/css-class-extractor.ts b/src/parse-engines/common/css-class-extractor.ts
index 4b56a63..d5ef863 100644
--- a/src/parse-engines/common/css-class-extractor.ts
+++ b/src/parse-engines/common/css-class-extractor.ts
@@ -6,7 +6,7 @@ export default class CssClassExtractor {
      * @description Extracts class names from CSS AST
      */
     public static extract(ast: css.Stylesheet): CssClassDefinition[] {
-        const classNameRegex = /[.]([\w-]+)/g;
+        const classNameRegex = /[.]([\w-\\@\\:\\/]+)/g;
 
         const definitions: CssClassDefinition[] = [];
 
@@ -15,7 +15,7 @@ export default class CssClassExtractor {
             rule.selectors?.forEach((selector: string) => {
                 let item: RegExpExecArray | null = classNameRegex.exec(selector);
                 while (item) {
-                    definitions.push(new CssClassDefinition(item[1]));
+                    definitions.push(new CssClassDefinition(item[1].replace("\\", "")));
                     item = classNameRegex.exec(selector);
                 }
             });

From ed0e8ea167ca5e193d5d847b3795cde48932030e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carlos=20Lo=CC=81pez=20de=20Pablo?= <carlos@filmin.es>
Date: Sun, 27 Dec 2020 13:45:13 +0100
Subject: [PATCH 2/4] Add @, :, and / for completion providers regexs

---
 src/extension.ts | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/extension.ts b/src/extension.ts
index 5028ee5..296a2c3 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -141,25 +141,25 @@ const registerHTMLProviders = (disposables: Disposable[]) =>
     workspace.getConfiguration()
         ?.get<string[]>(Configuration.HTMLLanguages)
         ?.forEach((extension) => {
-            disposables.push(registerCompletionProvider(extension, /class=["|']([\w- ]*$)/));
+            disposables.push(registerCompletionProvider(extension, /class=["|']([\w-@:\/ ]*$)/));
         });
 
-const registerCSSProviders = (disposables: Disposable[]) =>
+const registerCSSProviders = (disposables: Disposable[]) => 
     workspace.getConfiguration()
         .get<string[]>(Configuration.CSSLanguages)
         ?.forEach((extension) => {
             // The @apply rule was a CSS proposal which has since been abandoned,
             // check the proposal for more info: http://tabatkins.github.io/specs/css-apply-rule/
             // Its support should probably be removed
-            disposables.push(registerCompletionProvider(extension, /@apply ([.\w- ]*$)/, "."));
+            disposables.push(registerCompletionProvider(extension, /@apply ([.\w-@:\/ ]*$)/, "."));
         });
 
 const registerJavaScriptProviders = (disposables: Disposable[]) =>
     workspace.getConfiguration()
         .get<string[]>(Configuration.JavaScriptLanguages)
         ?.forEach((extension) => {
-            disposables.push(registerCompletionProvider(extension, /className=["|']([\w- ]*$)/));
-            disposables.push(registerCompletionProvider(extension, /class=["|']([\w- ]*$)/));
+            disposables.push(registerCompletionProvider(extension, /className=["|']([\w-@:\/ ]*$)/));
+            disposables.push(registerCompletionProvider(extension, /class=["|']([\w-@:\/ ]*$)/));
         });
 
 function registerEmmetProviders(disposables: Disposable[]) {

From 66db0b00d66d923b324b6c9e7a4e7c36da39506a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carlos=20Lo=CC=81pez=20de=20Pablo?= <carlos@filmin.es>
Date: Sun, 27 Dec 2020 13:50:24 +0100
Subject: [PATCH 3/4] Add escaped characters support  for emmet provider

---
 src/extension.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/extension.ts b/src/extension.ts
index 296a2c3..91cd723 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -163,7 +163,7 @@ const registerJavaScriptProviders = (disposables: Disposable[]) =>
         });
 
 function registerEmmetProviders(disposables: Disposable[]) {
-    const emmetRegex = /(?=\.)([\w-. ]*$)/;
+    const emmetRegex = /(?=\.)([\w-@:\/. ]*$)/;
 
     const registerProviders = (modes: string[]) => {
         modes.forEach((language) => {

From 247b72f331b37bd0f5d9395a39b2d864855c6783 Mon Sep 17 00:00:00 2001
From: canvasplay <canvasplay@users.noreply.github.com>
Date: Tue, 17 Aug 2021 12:07:56 +0200
Subject: [PATCH 4/4] Fix capturing unwanted pseudo selectors like `:hover`,
 `:focus`, etc

---
 src/parse-engines/common/css-class-extractor.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/parse-engines/common/css-class-extractor.ts b/src/parse-engines/common/css-class-extractor.ts
index d5ef863..85cdd8c 100644
--- a/src/parse-engines/common/css-class-extractor.ts
+++ b/src/parse-engines/common/css-class-extractor.ts
@@ -6,7 +6,7 @@ export default class CssClassExtractor {
      * @description Extracts class names from CSS AST
      */
     public static extract(ast: css.Stylesheet): CssClassDefinition[] {
-        const classNameRegex = /[.]([\w-\\@\\:\\/]+)/g;
+        const classNameRegex = /[.](([\w-]|\\[@:/])+)/g;
 
         const definitions: CssClassDefinition[] = [];
 
@@ -35,4 +35,4 @@ export default class CssClassExtractor {
         });
         return definitions;
     }
-}
\ No newline at end of file
+}