@@ -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
2122export class ClassCompletionItemProvider implements CompletionItemProvider {
2223
@@ -27,8 +28,6 @@ export class ClassCompletionItemProvider implements CompletionItemProvider {
2728 readonly findLinkRel = / r e l \s * = \s * ( [ " ' ] ) ( (?: (? ! \1) .) + ) \1/ si;
2829 readonly findLinkHref = / h r e f \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-
171168export 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
180174export function deactivate ( ) { }
0 commit comments