Skip to content

Commit cf0f713

Browse files
committed
Fixes
1 parent d189bb7 commit cf0f713

File tree

4 files changed

+23
-20
lines changed

4 files changed

+23
-20
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Visual Studio Code CSS Intellisense for HTML
22

3-
HTML `id` and `class` attributes completion and validation for VS Code.
3+
HTML `id` and `class` attributes completion and validation for Visual Studio Code.
44

55
## Features
66

@@ -78,7 +78,7 @@ Template inheritance is supported for the following tags:
7878
7979
@extends('base')
8080
81-
{{< base }}
81+
{{< base }}
8282
```
8383

8484
Only one level of inheritance is supported:

src/completion.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,22 @@ export class ClassCompletionItemProvider implements CompletionItemProvider, Disp
2727
readonly cache = new Map<string, Map<string, CompletionItem>>();
2828
readonly extends = new Map<string, Set<string>>();
2929
readonly watchers = new Map<string, Disposable>();
30-
readonly collection = languages.createDiagnosticCollection("vscode-html-css");
30+
readonly collection = languages.createDiagnosticCollection();
3131
readonly isRemote = /^https?:\/\//i;
3232
readonly canComplete = /(id|class|className)\s*=\s*("|')(?:(?!\2).)*$/si;
3333
readonly findLinkRel = /rel\s*=\s*("|')((?:(?!\1).)+)\1/si;
3434
readonly findLinkHref = /href\s*=\s*("|')((?:(?!\1).)+)\1/si;
3535
readonly findExtended = /(?:{{<|{%\s*extends|@extends\s*\()\s*("|')?([./A-Za-z_0-9\\\-]+)\1\s*(?:\)|%}|}})/i;
3636

37-
constructor() {
37+
constructor(enabledLanguages: string[]) {
3838
let debounce: NodeJS.Timeout;
3939

40-
this.watchers.set("changed", workspace.onDidChangeTextDocument(e => {
41-
clearTimeout(debounce);
42-
debounce = setTimeout(() => this.validate(e.document), 1000);
43-
}));
40+
workspace.onDidChangeTextDocument(e => {
41+
if (enabledLanguages.includes(e.document.languageId)) {
42+
clearTimeout(debounce);
43+
debounce = setTimeout(() => this.validate(e.document), 1000);
44+
}
45+
});
4446
}
4547

4648
dispose() {

src/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { ExtensionContext, languages, workspace, commands } from "vscode";
44
export function activate(context: ExtensionContext) {
55
const config = workspace.getConfiguration("css");
66
const enabledLanguages = config.get<string[]>("enabledLanguages", ["html"]);
7-
const provider = new ClassCompletionItemProvider();
7+
const provider = new ClassCompletionItemProvider(enabledLanguages);
88

99
context.subscriptions.push(
1010
languages.registerCompletionItemProvider(

src/test/suite/completion.test.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@ import { CompletionItem, Position, Uri } from "vscode";
55

66
suite("ClassCompletionItemProvider Test Suite", () => {
77

8+
const langs = ["html"];
89
const position = new Position(0, 0);
910
const token = new MockCancellationToken(false);
1011
const context = new MockCompletionContext();
1112

1213
test("RegEx: isRemote", () => {
13-
const provider = new ClassCompletionItemProvider();
14+
const provider = new ClassCompletionItemProvider(langs);
1415

1516
assert.strictEqual(provider.isRemote.test("http://example.com/example.css"), true);
1617
assert.strictEqual(provider.isRemote.test("https://example.com/example.css"), true);
1718
});
1819

1920
test("RegEx: canComplete", () => {
20-
const provider = new ClassCompletionItemProvider();
21+
const provider = new ClassCompletionItemProvider(langs);
2122

2223
assert.strictEqual(provider.canComplete.test(""), false);
2324
assert.strictEqual(provider.canComplete.test("class=\""), true);
@@ -52,47 +53,47 @@ suite("ClassCompletionItemProvider Test Suite", () => {
5253
});
5354

5455
test("RegEx: findLinkRel", () => {
55-
const provider = new ClassCompletionItemProvider();
56+
const provider = new ClassCompletionItemProvider(langs);
5657

5758
assert.strictEqual(provider.findLinkRel.exec(`
5859
<link rel="stylesheet" href="http://example.com/example.css">
5960
"`)?.[2], "stylesheet");
6061
});
6162

6263
test("RegEx: findLinkHref", () => {
63-
const provider = new ClassCompletionItemProvider();
64+
const provider = new ClassCompletionItemProvider(langs);
6465

6566
assert.strictEqual(provider.findLinkHref.exec(`
6667
<link rel="stylesheet" href="http://example.com/example.css">
6768
"`)?.[2], "http://example.com/example.css");
6869
});
6970

7071
test("RegEx: findExtended (Twig)", () => {
71-
const provider = new ClassCompletionItemProvider();
72+
const provider = new ClassCompletionItemProvider(langs);
7273

7374
assert.strictEqual(provider.findExtended.exec(`
7475
{% extends "base" %}
7576
`)?.[2], "base");
7677
});
7778

7879
test("RegEx: findExtended (Mustache)", () => {
79-
const provider = new ClassCompletionItemProvider();
80+
const provider = new ClassCompletionItemProvider(langs);
8081

8182
assert.strictEqual(provider.findExtended.exec(`
8283
{{< base }}
8384
`)?.[2], "base");
8485
});
8586

8687
test("RegEx: findExtended (Blade)", () => {
87-
const provider = new ClassCompletionItemProvider();
88+
const provider = new ClassCompletionItemProvider(langs);
8889

8990
assert.strictEqual(provider.findExtended.exec(`
9091
@extends('base')
9192
`)?.[2], "base");
9293
});
9394

9495
test("Rejects outside class attribute", (done) => {
95-
const provider = new ClassCompletionItemProvider();
96+
const provider = new ClassCompletionItemProvider(langs);
9697
const document = new MockDocument("<a class=\"\"></a>");
9798

9899
const result = provider.provideCompletionItems(
@@ -105,7 +106,7 @@ suite("ClassCompletionItemProvider Test Suite", () => {
105106
});
106107

107108
test("Completes from style tag", async () => {
108-
const provider = new ClassCompletionItemProvider();
109+
const provider = new ClassCompletionItemProvider(langs);
109110
const document = new MockDocument("<style>.test{}</style><a class=\"");
110111

111112
const items = await (provider.provideCompletionItems(
@@ -118,7 +119,7 @@ suite("ClassCompletionItemProvider Test Suite", () => {
118119
});
119120

120121
test("Completes from link tag", async () => {
121-
const provider = new ClassCompletionItemProvider();
122+
const provider = new ClassCompletionItemProvider(langs);
122123
const document = new MockDocument(`
123124
<link
124125
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
@@ -142,7 +143,7 @@ suite("ClassCompletionItemProvider Test Suite", () => {
142143
"https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
143144
];
144145
}
145-
}();
146+
}(langs);
146147

147148
const document = new MockDocument("<a class=\"");
148149

0 commit comments

Comments
 (0)