Skip to content

Commit e968d4b

Browse files
committed
Fixed multi-root
1 parent 9ee7860 commit e968d4b

File tree

3 files changed

+24
-46
lines changed

3 files changed

+24
-46
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "vscode-html-css",
33
"displayName": "HTML CSS Support",
44
"description": "CSS support for HTML documents",
5-
"version": "1.0.0",
5+
"version": "1.0.1",
66
"publisher": "ecmel",
77
"license": "MIT",
88
"homepage": "https://github.com/ecmel/vscode-html-css",
@@ -35,7 +35,8 @@
3535
"css.remoteStyleSheets": {
3636
"type": "array",
3737
"default": [],
38-
"description": "A list of remote style sheets."
38+
"description": "A list of remote style sheets.",
39+
"scope": "resource"
3940
}
4041
}
4142
}

src/extension.ts

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ import {
1313
ProviderResult,
1414
CompletionItem,
1515
CompletionList,
16-
CompletionItemKind
16+
CompletionItemKind,
17+
Uri
1718
} from "vscode";
1819

19-
const NONE = "__!NONE!__";
20+
export const NONE = "__!NONE!__";
2021

2122
export class ClassCompletionItemProvider implements CompletionItemProvider {
2223

@@ -27,8 +28,6 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
2728
readonly findLinkRel = /rel\s*=\s*(["'])((?:(?!\1).)+)\1/si;
2829
readonly findLinkHref = /href\s*=\s*(["'])((?:(?!\1).)+)\1/si;
2930

30-
remoteStyleSheets: string[] = [];
31-
3231
parseTextToItems(text: string, items: Map<string, CompletionItem>) {
3332
walk(parse(text), node => {
3433
if (node.type === "ClassSelector") {
@@ -96,16 +95,23 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
9695
});
9796
}
9897

99-
findRemoteStyles(): Thenable<Set<string>> {
98+
findRemoteStyles(uri: Uri): Thenable<Set<string>> {
10099
return new Promise(resolve => {
101100
const keys = new Set<string>();
102-
const promises = [];
101+
const config = workspace.getConfiguration("css", uri);
102+
const remoteStyleSheets = config.get<string[]>("remoteStyleSheets", []);
103103

104-
for (const href of this.remoteStyleSheets) {
105-
promises.push(this.fetchStyleSheet(href).then(k => keys.add(k)));
106-
}
104+
if (remoteStyleSheets.length === 0) {
105+
resolve(keys);
106+
} else {
107+
const promises = [];
107108

108-
Promise.all(promises).then(() => resolve(keys));
109+
for (const href of remoteStyleSheets) {
110+
promises.push(this.fetchStyleSheet(href).then(k => keys.add(k)));
111+
}
112+
113+
Promise.all(promises).then(() => resolve(keys));
114+
}
109115
});
110116
}
111117

@@ -148,7 +154,7 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
148154
if (canComplete) {
149155
const items = this.findDocumentStyles(text);
150156

151-
this.findRemoteStyles().then(styles =>
157+
this.findRemoteStyles(document.uri).then(styles =>
152158
this.findDocumentLinks(text).then(links =>
153159
resolve(this.buildItems(items, styles, links))));
154160
} else {
@@ -159,22 +165,10 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
159165
}
160166
}
161167

162-
function parseConfig(provider: ClassCompletionItemProvider) {
163-
const config = workspace.getConfiguration("css");
164-
const remoteStyleSheets = config.get<string[]>("remoteStyleSheets");
165-
166-
if (remoteStyleSheets) {
167-
provider.remoteStyleSheets = remoteStyleSheets;
168-
}
169-
}
170-
171168
export function activate(context: ExtensionContext) {
172-
const provider = new ClassCompletionItemProvider();
173-
174-
parseConfig(provider);
175-
176-
context.subscriptions.push(workspace.onDidChangeConfiguration(e => parseConfig(provider)));
177-
context.subscriptions.push(languages.registerCompletionItemProvider("html", provider, "\"", "'"));
169+
context.subscriptions.push(languages
170+
.registerCompletionItemProvider("html",
171+
new ClassCompletionItemProvider(), "\"", "'"));
178172
}
179173

180174
export function deactivate() { }

src/test/suite/extension.test.ts

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as assert from 'assert';
22
import { ClassCompletionItemProvider } from '../../extension';
33
import {
4+
workspace,
45
TextDocument,
56
Position,
67
CancellationToken,
@@ -181,22 +182,4 @@ suite('Extension Test Suite', () => {
181182
}
182183
}, done);
183184
});
184-
185-
test('Completes from remote config', done => {
186-
const provider = new ClassCompletionItemProvider();
187-
const document = new MockTextDocument(`<a class="`);
188-
189-
provider.remoteStyleSheets = ["https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"];
190-
191-
const result = provider.provideCompletionItems(document, position, token, context) as Thenable<CompletionItem[]>;
192-
193-
result.then(items => {
194-
try {
195-
assert.notStrictEqual(items.length, 0);
196-
done();
197-
} catch (e) {
198-
done(e);
199-
}
200-
}, done);
201-
});
202185
});

0 commit comments

Comments
 (0)