11import fetch from "node-fetch" ;
2-
32import { parse , walk } from "css-tree" ;
4-
53import {
64 languages ,
75 Range ,
@@ -24,8 +22,8 @@ class ClassCompletionItemProvider implements CompletionItemProvider {
2422 readonly start = new Position ( 0 , 0 ) ;
2523 readonly cache = new Map < string , Map < string , CompletionItem > > ( ) ;
2624 readonly canComplete = / c l a s s \s * = \s * ( [ " ' ] ) (?: (? ! \1) .) * $ / si;
27- readonly findLinkRel = / r e l \s * = \s * ( [ " ' ] ) ( (?: (? ! \1) .) + ) \1/ si;
28- readonly findLinkHref = / h r e f \s * = \s * ( [ " ' ] ) ( (?: (? ! \1) .) + ) \1/ si;
25+ readonly findLinkRel = / r e l \s * = \s * ( [ " ' ] ) ( (?: (? ! \1) .) ) + \1/ si;
26+ readonly findLinkHref = / h r e f \s * = \s * ( [ " ' ] ) ( (?: (? ! \1) .) ) + \1/ si;
2927
3028 remoteStyles : string [ ] = [ ] ;
3129
@@ -45,6 +43,14 @@ class ClassCompletionItemProvider implements CompletionItemProvider {
4543 }
4644 }
4745
46+ parseTextToItems ( text : string , items : Map < string , CompletionItem > ) {
47+ walk ( parse ( text ) , ( node ) => {
48+ if ( node . type === "ClassSelector" ) {
49+ items . set ( node . name , new CompletionItem ( node . name ) ) ;
50+ }
51+ } ) ;
52+ }
53+
4854 fetchRemoteStyleSheet ( key : string ) : Thenable < string > {
4955 return new Promise ( resolve => {
5056
@@ -63,16 +69,10 @@ class ClassCompletionItemProvider implements CompletionItemProvider {
6369 fetch ( key ) . then ( res => {
6470 if ( res . status < 400 ) {
6571 res . text ( ) . then ( text => {
66- walk ( parse ( text ) , ( node ) => {
67- if ( node . type === "ClassSelector" ) {
68- items . set ( node . name , new CompletionItem ( node . name ) ) ;
69- } ;
70- } ) ;
72+ this . parseTextToItems ( text , items ) ;
7173 this . cache . set ( key , items ) ;
7274 resolve ( key ) ;
73- } , ( ) => {
74- resolve ( NONE ) ;
75- } ) ;
75+ } , ( ) => resolve ( NONE ) ) ;
7676 } else {
7777 resolve ( NONE ) ;
7878 }
@@ -83,6 +83,7 @@ class ClassCompletionItemProvider implements CompletionItemProvider {
8383
8484 findDocumentLinks ( text : string ) : Thenable < Set < string > > {
8585 return new Promise ( resolve => {
86+
8687 const findLinks = / < l i n k ( [ ^ > ] + ) > / gi;
8788 const keys = new Set < string > ( ) ;
8889 const promises = [ ] ;
@@ -108,6 +109,7 @@ class ClassCompletionItemProvider implements CompletionItemProvider {
108109
109110 findRemoteStyles ( ) : Thenable < Set < string > > {
110111 return new Promise ( resolve => {
112+
111113 const keys = new Set < string > ( ) ;
112114 const promises = [ ] ;
113115
@@ -127,11 +129,7 @@ class ClassCompletionItemProvider implements CompletionItemProvider {
127129 let style ;
128130
129131 while ( ( style = findStyles . exec ( text ) ) !== null ) {
130- walk ( parse ( style [ 1 ] ) , ( node ) => {
131- if ( node . type === "ClassSelector" ) {
132- items . set ( node . name , new CompletionItem ( node . name ) ) ;
133- }
134- } ) ;
132+ this . parseTextToItems ( text , items ) ;
135133 }
136134
137135 return items ;
0 commit comments