@@ -18,6 +18,11 @@ export class FileSearchProvider implements vscode.FileSearchProvider {
1818 ) : Promise < vscode . Uri [ ] > {
1919 let counter = 0 ;
2020 let pattern = query . pattern . charAt ( 0 ) == "/" ? query . pattern . slice ( 1 ) : query . pattern ;
21+
22+ // Drop a leading **/ from the glob pattern if it exists (added by Find widget of Explorer tree, which since 1.94 uses FileSearchProvider)
23+ if ( pattern . startsWith ( "**/" ) ) {
24+ pattern = pattern . slice ( 3 ) ;
25+ }
2126 const params = new URLSearchParams ( options . folder . query ) ;
2227 const csp = params . has ( "csp" ) && [ "" , "1" ] . includes ( params . get ( "csp" ) ) ;
2328 if ( params . has ( "project" ) && params . get ( "project" ) . length ) {
@@ -44,13 +49,13 @@ export class FileSearchProvider implements vscode.FileSearchProvider {
4449 // When this is called without a query.pattern, every file is supposed to be returned, so do not provide a filter
4550 let filter = "" ;
4651 if ( pattern . length ) {
47- pattern = ! csp ? query . pattern . replace ( / \/ / g, "." ) : query . pattern ;
48- if ( pattern . includes ( "_" ) || pattern . includes ( "%" ) ) {
49- // Need to escape any % or _ characters
50- filter = `Name LIKE '% ${ pattern . replace ( / ( _ | % | \\ ) / g, "\\$1" ) } %' ESCAPE '\\'` ;
51- } else {
52- filter = `Name LIKE '% ${ pattern } %'` ;
53- }
52+ pattern = ! csp ? pattern . replace ( / \/ / g, "." ) : pattern ;
53+ filter = `Name LIKE '% ${ pattern
54+ // Escape % or _ characters
55+ . replace ( / ( _ | % | \\ ) / g, "\\$1" )
56+ // Change glob syntax to SQL LIKE syntax
57+ . replace ( / \* / g , "%" )
58+ . replace ( / \? / g , "_" ) } %' ESCAPE '\\'` ;
5459 }
5560 if ( token . isCancellationRequested ) {
5661 return ;
0 commit comments