@@ -31,13 +31,20 @@ import { Style, StyleType, parse } from "./parser";
3131
3232const start = new Position ( 0 , 0 ) ;
3333const cache = new Map < string , Style [ ] > ( ) ;
34- const isRemote = / ^ h t t p s ? : \/ \/ / i;
35- const wordRange = / [ _ a - z A - Z 0 - 9 - ] + / ;
36- const findSelector = / ( [ ^ ( \[ { } \] ) \s ] + ) (? ! [ ^ ( \[ { ] * [ } \] ) ] ) / gi;
37- const findAttribute = / ( c l a s s | c l a s s N a m e ) \s * [ = : ] \s * ( [ " ' ] ) ( .* ?) \2/ gis;
38- const canComplete = / ( i d | c l a s s | c l a s s N a m e ) \s * [ = : ] \s * ( [ " ' ] ) (?: .(? ! \2) ) * $ / is;
3934
4035export class Provider implements CompletionItemProvider , DefinitionProvider {
36+ private get isRemote ( ) {
37+ return / ^ h t t p s ? : \/ \/ / i;
38+ }
39+
40+ private get wordRange ( ) {
41+ return / [ _ a - z A - Z 0 - 9 - ] + / ;
42+ }
43+
44+ private get canComplete ( ) {
45+ return / ( i d | c l a s s | c l a s s N a m e ) \s * [ = : ] \s * ( [ " ' ] ) (?: .(? ! \2) ) * $ / is;
46+ }
47+
4148 private async fetch ( url : string ) {
4249 try {
4350 const res = await fetch ( url ) ;
@@ -82,7 +89,7 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
8289 const globs = getStyleSheets ( document . uri ) ;
8390
8491 for ( const glob of globs ) {
85- if ( isRemote . test ( glob ) ) {
92+ if ( this . isRemote . test ( glob ) ) {
8693 styles . set ( glob , await this . getRemote ( glob ) ) ;
8794 } else if ( folder ) {
8895 const files = await workspace . findFiles (
@@ -123,7 +130,7 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
123130 type : StyleType
124131 ) {
125132 const map = await this . getCompletionMap ( document , type ) ;
126- const range = document . getWordRangeAtPosition ( position , wordRange ) ;
133+ const range = document . getWordRangeAtPosition ( position , this . wordRange ) ;
127134 const items = [ ] ;
128135
129136 for ( const item of map . values ( ) ) {
@@ -141,7 +148,7 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
141148 ) : ProviderResult < CompletionItem [ ] | CompletionList < CompletionItem > > {
142149 const range = new Range ( start , position ) ;
143150 const text = document . getText ( range ) ;
144- const match = canComplete . exec ( text ) ;
151+ const match = this . canComplete . exec ( text ) ;
145152
146153 return new Promise ( ( resolve , reject ) =>
147154 match && ! token . isCancellationRequested
@@ -158,12 +165,12 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
158165
159166 private async getDefinitions ( document : TextDocument , position : Position ) {
160167 const styles = await this . getStyles ( document ) ;
161- const range = document . getWordRangeAtPosition ( position , wordRange ) ;
168+ const range = document . getWordRangeAtPosition ( position , this . wordRange ) ;
162169 const selector = document . getText ( range ) ;
163170 const locations : Location [ ] = [ ] ;
164171
165172 for ( const entry of styles ) {
166- if ( ! isRemote . test ( entry [ 0 ] ) ) {
173+ if ( ! this . isRemote . test ( entry [ 0 ] ) ) {
167174 entry [ 1 ]
168175 . filter ( ( style ) => style . selector === selector )
169176 . forEach ( ( style ) =>
@@ -186,7 +193,7 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
186193 ) : ProviderResult < Definition | LocationLink [ ] > {
187194 const range = new Range ( start , position ) ;
188195 const text = document . getText ( range ) ;
189- const match = canComplete . exec ( text ) ;
196+ const match = this . canComplete . exec ( text ) ;
190197
191198 return new Promise ( ( resolve , reject ) =>
192199 match && ! token . isCancellationRequested
@@ -196,6 +203,8 @@ export class Provider implements CompletionItemProvider, DefinitionProvider {
196203 }
197204
198205 async validate ( document : TextDocument ) {
206+ const findSelector = / ( [ ^ ( \[ { } \] ) \s ] + ) (? ! [ ^ ( \[ { ] * [ } \] ) ] ) / gi;
207+ const findAttribute = / ( c l a s s | c l a s s N a m e ) \s * [ = : ] \s * ( [ " ' ] ) ( .* ?) \2/ gis;
199208 const diagnostics : Diagnostic [ ] = [ ] ;
200209 const map = await this . getCompletionMap ( document , StyleType . CLASS ) ;
201210 const text = document . getText ( ) ;
0 commit comments