Skip to content

Commit 912c32e

Browse files
committed
Added id support
1 parent dc2f67f commit 912c32e

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/extension.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
2525
readonly cache = new Map<string, Map<string, CompletionItem>>();
2626
readonly none = "__!NONE!__";
2727
readonly isRemote = /^https?:\/\//i;
28-
readonly canComplete = /class\s*=\s*(["'])(?:(?!\1).)*$/si;
28+
readonly canComplete = /(id|class|className)\s*=\s*(["'])(?:(?!\2).)*$/si;
2929
readonly findLinkRel = /rel\s*=\s*(["'])((?:(?!\1).)+)\1/si;
3030
readonly findLinkHref = /href\s*=\s*(["'])((?:(?!\1).)+)\1/si;
3131

@@ -36,7 +36,9 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
3636
parseTextToItems(text: string, items: Map<string, CompletionItem>) {
3737
walk(parse(text), node => {
3838
if (node.type === "ClassSelector") {
39-
items.set(node.name, new CompletionItem(node.name, CompletionItemKind.EnumMember));
39+
items.set(node.name, new CompletionItem(node.name, CompletionItemKind.Enum));
40+
} else if (node.type === "IdSelector") {
41+
items.set(node.name, new CompletionItem(node.name, CompletionItemKind.Value));
4042
}
4143
});
4244
}
@@ -157,11 +159,16 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
157159
return items;
158160
}
159161

160-
buildItems(items: Map<string, CompletionItem>, sets: Set<string>[]): CompletionItem[] {
162+
buildItems(items: Map<string, CompletionItem>, sets: Set<string>[], type: CompletionItemKind): CompletionItem[] {
161163
const keys = new Set<string>();
162164

163165
sets.forEach(v => v.forEach(v => keys.add(v)));
164-
keys.forEach(k => this.cache.get(k)?.forEach((v, k) => items.set(k, v)));
166+
167+
keys.forEach(k => this.cache.get(k)?.forEach((v, k) => {
168+
if (type === v.kind) {
169+
items.set(k, v);
170+
}
171+
}));
165172

166173
return [...items.values()];
167174
}
@@ -178,16 +185,20 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
178185
} else {
179186
const range = new Range(this.start, position);
180187
const text = document.getText(range);
181-
const canComplete = this.canComplete.test(text);
188+
const canComplete = this.canComplete.exec(text);
182189

183190
if (canComplete) {
191+
const type = canComplete[1] === "id"
192+
? CompletionItemKind.Value
193+
: CompletionItemKind.Enum;
194+
184195
const items = this.findDocumentStyles(text);
185196

186197
Promise.all([
187198
this.findLocalStyles(),
188199
this.findDocumentLinks(text),
189200
this.findRemoteStyles(document.uri),
190-
]).then(keys => resolve(this.buildItems(items, keys)));
201+
]).then(keys => resolve(this.buildItems(items, keys, type)));
191202
} else {
192203
reject();
193204
}

0 commit comments

Comments
 (0)