@@ -18,6 +18,11 @@ export class FileSearchProvider implements vscode.FileSearchProvider {
18
18
) : Promise < vscode . Uri [ ] > {
19
19
let counter = 0 ;
20
20
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
+ }
21
26
const params = new URLSearchParams ( options . folder . query ) ;
22
27
const csp = params . has ( "csp" ) && [ "" , "1" ] . includes ( params . get ( "csp" ) ) ;
23
28
if ( params . has ( "project" ) && params . get ( "project" ) . length ) {
@@ -44,13 +49,13 @@ export class FileSearchProvider implements vscode.FileSearchProvider {
44
49
// When this is called without a query.pattern, every file is supposed to be returned, so do not provide a filter
45
50
let filter = "" ;
46
51
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 '\\'` ;
54
59
}
55
60
if ( token . isCancellationRequested ) {
56
61
return ;
0 commit comments