提交 77ba628a 编写于 作者: C Christof Marti

Anchor patterns (fixes #36438)

上级 9c62fff9
......@@ -8,7 +8,7 @@ import { rgPath } from 'vscode-ripgrep';
import { isMacintosh as isMac } from 'vs/base/common/platform';
import * as glob from 'vs/base/common/glob';
import { normalizeNFD } from 'vs/base/common/strings';
import { normalizeNFD, startsWith } from 'vs/base/common/strings';
import { IFolderSearch, IRawSearch } from './search';
import { foldersToIncludeGlobs, foldersToRgExcludeGlobs } from './ripgrepTextSearch';
......@@ -26,14 +26,14 @@ function getRgArgs(config: IRawSearch, folderQuery: IFolderSearch, includePatter
// includePattern can't have siblingClauses
foldersToIncludeGlobs([folderQuery], includePattern, false).forEach(globArg => {
args.push('-g', isMac ? normalizeNFD(globArg) : globArg);
args.push('-g', anchor(isMac ? normalizeNFD(globArg) : globArg));
});
let siblingClauses: glob.IExpression;
const rgGlobs = foldersToRgExcludeGlobs([folderQuery], excludePattern, undefined, false);
rgGlobs.globArgs
.forEach(rgGlob => args.push('-g', `!${isMac ? normalizeNFD(rgGlob) : rgGlob}`));
.forEach(rgGlob => args.push('-g', `!${anchor(isMac ? normalizeNFD(rgGlob) : rgGlob)}`));
siblingClauses = rgGlobs.siblingClauses;
if (config.disregardIgnoreFiles) {
......@@ -57,3 +57,7 @@ function getRgArgs(config: IRawSearch, folderQuery: IFolderSearch, includePatter
return { globArgs: args, siblingClauses };
}
function anchor(glob: string) {
return startsWith(glob, '**') || startsWith(glob, '/') ? glob : `/${glob}`;
}
\ No newline at end of file
......@@ -22,6 +22,10 @@ const ROOT_FOLDER_QUERY: IFolderSearch[] = [
TEST_ROOT_FOLDER
];
const ROOT_FOLDER_QUERY_36438: IFolderSearch[] = [
{ folder: path.normalize(require.toUrl('./fixtures2/36438')) }
];
const MULTIROOT_QUERIES: IFolderSearch[] = [
{ folder: EXAMPLES_FIXTURES },
{ folder: MORE_FIXTURES }
......@@ -381,6 +385,44 @@ suite('FileSearchEngine', () => {
});
});
test('Files: exclude folder without wildcard #36438', function (done: () => void) {
this.timeout(testTimeout);
let engine = new FileSearchEngine({
folderQueries: ROOT_FOLDER_QUERY_36438,
excludePattern: { 'modules': true }
});
let count = 0;
engine.search((result) => {
if (result) {
count++;
}
}, () => { }, (error) => {
assert.ok(!error);
assert.equal(count, 1);
done();
});
});
test('Files: include folder without wildcard #36438', function (done: () => void) {
this.timeout(testTimeout);
let engine = new FileSearchEngine({
folderQueries: ROOT_FOLDER_QUERY_36438,
includePattern: { 'modules/**': true }
});
let count = 0;
engine.search((result) => {
if (result) {
count++;
}
}, () => { }, (error) => {
assert.ok(!error);
assert.equal(count, 1);
done();
});
});
test('Files: *.* exclude folder with leading wildcard', function (done: () => void) {
this.timeout(testTimeout);
let engine = new FileSearchEngine({
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册