Skip to content

Commit e56d9ad

Browse files
committed
Fixes
1 parent 805ad17 commit e56d9ad

File tree

3 files changed

+50
-49
lines changed

3 files changed

+50
-49
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,4 @@
7373
"webpack": "^5.9.0",
7474
"webpack-cli": "^4.2.0"
7575
}
76-
}
76+
}

src/extension.ts

Lines changed: 48 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
2929
remoteStyleSheets: string[] = [];
3030

3131
parseTextToItems(text: string, items: Map<string, CompletionItem>) {
32-
walk(parse(text), (node) => {
33-
if (node.type === "ClassSelector") {
34-
items.set(node.name, new CompletionItem(node.name, CompletionItemKind.EnumMember));
32+
walk(parse(text), v => {
33+
if (v.type === "ClassSelector") {
34+
items.set(v.name, new CompletionItem(v.name, CompletionItemKind.EnumMember));
3535
}
3636
});
3737
}
@@ -41,28 +41,27 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
4141

4242
if (key === NONE) {
4343
resolve(NONE);
44-
return;
45-
}
46-
47-
const items = this.cache.get(key);
48-
49-
if (items) {
50-
resolve(key);
5144
} else {
52-
const items = new Map<string, CompletionItem>();
53-
54-
fetch(key).then(res => {
55-
if (res.ok) {
56-
res.text().then(text => {
57-
this.parseTextToItems(text, items);
45+
const items = this.cache.get(key);
46+
47+
if (items) {
48+
resolve(key);
49+
} else {
50+
const items = new Map<string, CompletionItem>();
51+
52+
fetch(key).then(res => {
53+
if (res.ok) {
54+
res.text().then(text => {
55+
this.parseTextToItems(text, items);
56+
this.cache.set(key, items);
57+
resolve(key);
58+
}, () => resolve(NONE));
59+
} else {
5860
this.cache.set(key, items);
5961
resolve(key);
60-
}, () => resolve(NONE));
61-
} else {
62-
this.cache.set(key, items);
63-
resolve(key);
64-
}
65-
}, () => resolve(NONE));
62+
}
63+
}, () => resolve(NONE));
64+
}
6665
}
6766
});
6867
}
@@ -82,8 +81,7 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
8281
const href = this.findLinkHref.exec(link[1]);
8382

8483
if (href && href[2].startsWith("http")) {
85-
promises.push(this.fetchRemoteStyleSheet(href[2])
86-
.then(key => keys.add(key)));
84+
promises.push(this.fetchRemoteStyleSheet(href[2]).then(k => keys.add(k)));
8785
}
8886
}
8987
}
@@ -97,9 +95,8 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
9795
const keys = new Set<string>();
9896
const promises = [];
9997

100-
for (let i = 0; i < this.remoteStyleSheets.length; i++) {
101-
promises.push(this.fetchRemoteStyleSheet(this.remoteStyleSheets[i])
102-
.then(key => keys.add(key)));
98+
for (const sheet of this.remoteStyleSheets) {
99+
promises.push(this.fetchRemoteStyleSheet(sheet).then(k => keys.add(k)));
103100
}
104101

105102
Promise.all(promises).then(() => resolve(keys));
@@ -119,33 +116,37 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
119116
return items;
120117
}
121118

119+
buildItems(items: Map<string, CompletionItem>, ...sets: Set<string>[]): CompletionItem[] {
120+
const keys = new Set<string>();
121+
sets.forEach(v => v.forEach(v => keys.add(v)));
122+
keys.forEach(k => this.cache.get(k)?.forEach((v, k) => items.set(k, v)));
123+
124+
return [...items.values()];
125+
}
126+
122127
provideCompletionItems(
123128
document: TextDocument,
124129
position: Position,
125130
token: CancellationToken,
126-
context: CompletionContext)
127-
: ProviderResult<CompletionItem[] | CompletionList<CompletionItem>> {
131+
context: CompletionContext): ProviderResult<CompletionItem[] | CompletionList<CompletionItem>> {
128132

129133
return new Promise((resolve, reject) => {
130-
const range = new Range(this.start, position);
131-
const text = document.getText(range);
132-
const canComplete = this.canComplete.test(text);
133-
134-
if (canComplete) {
135-
const items = this.findDocumentStyles(text);
136-
137-
this.findRemoteStyles().then(styles => {
138-
this.findDocumentLinks(text).then(links => {
139-
links.forEach(key => styles.add(key));
140-
141-
styles.forEach(key => this.cache.get(key)
142-
?.forEach((value, name) => items.set(name, value)));
143-
144-
resolve([...items.values()]);
145-
});
146-
});
147-
} else {
134+
if (token.isCancellationRequested) {
148135
reject();
136+
} else {
137+
const range = new Range(this.start, position);
138+
const text = document.getText(range);
139+
const canComplete = this.canComplete.test(text);
140+
141+
if (canComplete) {
142+
const items = this.findDocumentStyles(text);
143+
144+
this.findRemoteStyles().then(styles =>
145+
this.findDocumentLinks(text).then(links =>
146+
resolve(this.buildItems(items, styles, links))));
147+
} else {
148+
reject();
149+
}
149150
}
150151
});
151152
}

0 commit comments

Comments
 (0)