@@ -327,8 +327,10 @@ export class TextSearchProvider implements vscode.TextSearchProvider {
327
327
. map ( ( match : SearchMatch ) => searchMatchToLine ( content , match , file . doc , api . configName ) )
328
328
. filter ( notNull ) ;
329
329
// Filter out duplicates and compute all matches for each one
330
- [ ...new Set ( lines ) ] . forEach ( ( line ) => {
330
+ [ ...new Set ( lines ) ] . forEach ( ( line , _index , matchedLines ) => {
331
331
const text = content [ line ] ;
332
+ const previewFrom = Math . max ( line - options . beforeContext || 0 , 0 ) ;
333
+ const previewTo = Math . min ( line + options . afterContext || 0 , content . length - 1 ) ;
332
334
const regex = new RegExp (
333
335
query . isRegExp ? query . pattern : query . pattern . replace ( / [ - [ \] { } ( ) * + ? . , \\ ^ $ | # \s ] / g, "\\$&" ) ,
334
336
query . isCaseSensitive ? "g" : "gi"
@@ -344,6 +346,16 @@ export class TextSearchProvider implements vscode.TextSearchProvider {
344
346
counter ++ ;
345
347
}
346
348
if ( matchRanges . length && previewRanges . length ) {
349
+ // Add preceding context lines that aren't result lines
350
+ for ( let i = previewFrom ; i < line ; i ++ ) {
351
+ if ( ! matchedLines . includes ( i ) ) {
352
+ progress . report ( {
353
+ uri,
354
+ text : content [ i ] ,
355
+ lineNumber : i + 1 ,
356
+ } ) ;
357
+ }
358
+ }
347
359
progress . report ( {
348
360
uri,
349
361
ranges : matchRanges ,
@@ -352,6 +364,16 @@ export class TextSearchProvider implements vscode.TextSearchProvider {
352
364
matches : previewRanges ,
353
365
} ,
354
366
} ) ;
367
+ // Add following context lines that aren't result lines
368
+ for ( let i = line + 1 ; i <= previewTo ; i ++ ) {
369
+ if ( ! matchedLines . includes ( i ) ) {
370
+ progress . report ( {
371
+ uri,
372
+ text : content [ i ] ,
373
+ lineNumber : i + 1 ,
374
+ } ) ;
375
+ }
376
+ }
355
377
}
356
378
} ) ;
357
379
} ;
0 commit comments