@@ -205,56 +205,65 @@ async function provideCustomClassNameCompletions(
205
205
const regexes = dlv ( settings , 'experimental.classRegex' , [ ] )
206
206
if ( regexes . length === 0 ) return null
207
207
208
- const searchRange = {
209
- start : { line : Math . max ( position . line - 10 , 0 ) , character : 0 } ,
210
- end : { line : position . line + 10 , character : 0 } ,
208
+ const positionOffset = document . offsetAt ( position )
209
+
210
+ const searchRange : Range = {
211
+ start : document . positionAt ( Math . max ( 0 , positionOffset - 500 ) ) ,
212
+ end : document . positionAt ( positionOffset + 500 ) ,
211
213
}
212
214
213
215
let str = document . getText ( searchRange )
214
216
215
217
for ( let i = 0 ; i < regexes . length ; i ++ ) {
216
- let [ containerRegex , classRegex ] = Array . isArray ( regexes [ i ] )
217
- ? regexes [ i ]
218
- : [ regexes [ i ] ]
219
- containerRegex = new MultiRegexp ( new RegExp ( containerRegex ) )
220
218
try {
221
- const match = containerRegex . execForGroup ( str , 1 )
222
- if ( match === null ) {
223
- throw Error ( )
224
- }
225
- const searchStart = document . offsetAt ( searchRange . start )
226
- const matchStart = searchStart + match . start
227
- const matchEnd = searchStart + match . end
228
- const cursor = document . offsetAt ( position )
229
- if ( cursor >= matchStart && cursor <= matchEnd ) {
230
- let classList
231
-
232
- if ( classRegex ) {
233
- classRegex = new MultiRegexp ( new RegExp ( classRegex , 'g' ) )
234
- let classMatch
235
- while (
236
- ( classMatch = classRegex . execForGroup ( match . match , 1 ) ) !== null
237
- ) {
238
- const classMatchStart = matchStart + classMatch . start
239
- const classMatchEnd = matchStart + classMatch . end
240
- if ( cursor >= classMatchStart && cursor <= classMatchEnd ) {
241
- classList = classMatch . match . substr ( 0 , cursor - classMatchStart )
219
+ let [ containerRegex , classRegex ] = Array . isArray ( regexes [ i ] )
220
+ ? regexes [ i ]
221
+ : [ regexes [ i ] ]
222
+
223
+ containerRegex = new MultiRegexp ( new RegExp ( containerRegex , 'g' ) )
224
+ let containerMatch
225
+
226
+ while ( ( containerMatch = containerRegex . execForGroup ( str , 1 ) ) !== null ) {
227
+ console . log ( containerMatch )
228
+ const searchStart = document . offsetAt ( searchRange . start )
229
+ const matchStart = searchStart + containerMatch . start
230
+ const matchEnd = searchStart + containerMatch . end
231
+ const cursor = document . offsetAt ( position )
232
+ if ( cursor >= matchStart && cursor <= matchEnd ) {
233
+ let classList
234
+
235
+ if ( classRegex ) {
236
+ classRegex = new MultiRegexp ( new RegExp ( classRegex , 'g' ) )
237
+ let classMatch
238
+
239
+ while (
240
+ ( classMatch = classRegex . execForGroup (
241
+ containerMatch . match ,
242
+ 1
243
+ ) ) !== null
244
+ ) {
245
+ const classMatchStart = matchStart + classMatch . start
246
+ const classMatchEnd = matchStart + classMatch . end
247
+ if ( cursor >= classMatchStart && cursor <= classMatchEnd ) {
248
+ classList = classMatch . match . substr ( 0 , cursor - classMatchStart )
249
+ }
242
250
}
251
+
252
+ if ( typeof classList === 'undefined' ) {
253
+ throw Error ( )
254
+ }
255
+ } else {
256
+ classList = containerMatch . match . substr ( 0 , cursor - matchStart )
243
257
}
244
- if ( typeof classList === 'undefined' ) {
245
- throw Error ( )
246
- }
247
- } else {
248
- classList = match . match . substr ( 0 , cursor - matchStart )
249
- }
250
258
251
- return completionsFromClassList ( state , classList , {
252
- start : {
253
- line : position . line ,
254
- character : position . character - classList . length ,
255
- } ,
256
- end : position ,
257
- } )
259
+ return completionsFromClassList ( state , classList , {
260
+ start : {
261
+ line : position . line ,
262
+ character : position . character - classList . length ,
263
+ } ,
264
+ end : position ,
265
+ } )
266
+ }
258
267
}
259
268
} catch ( _ ) { }
260
269
}
0 commit comments