Skip to content

Commit 544af86

Browse files
committed
Make Explorer Find widget work in 1.94 as long as proposed APIs are enabled (fix #1443)
1 parent 0b00c74 commit 544af86

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/providers/FileSystemProvider/FileSearchProvider.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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,17 @@ 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;
52+
let escapeClause = "";
53+
pattern = !csp ? pattern.replace(/\//g, ".") : pattern;
4854
if (pattern.includes("_") || pattern.includes("%")) {
4955
// Need to escape any % or _ characters
50-
filter = `Name LIKE '%${pattern.replace(/(_|%|\\)/g, "\\$1")}%' ESCAPE '\\'`;
51-
} else {
52-
filter = `Name LIKE '%${pattern}%'`;
56+
pattern = pattern.replace(/(_|%|\\)/g, "\\$1");
57+
escapeClause = " ESCAPE '\\'";
5358
}
59+
// Change glob syntax to SQL LIKE syntax
60+
pattern = pattern.replace(/\*/g, "%");
61+
pattern = pattern.replace(/\?/g, "_");
62+
filter = `Name LIKE '%${pattern}%'${escapeClause}`;
5463
}
5564
if (token.isCancellationRequested) {
5665
return;

0 commit comments

Comments
 (0)