Skip to content

Commit cf5fe4d

Browse files
authored
Merge pull request microsoft#186009 from microsoft/tyriar/185998
Respect @ symbol search when there is no line/colon pattern after
2 parents 2bd04a1 + 94a5f19 commit cf5fe4d

File tree

2 files changed

+56
-6
lines changed

2 files changed

+56
-6
lines changed

src/vs/workbench/contrib/search/common/search.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,11 @@ export interface IFilterAndRange {
157157
}
158158

159159
export function extractRangeFromFilter(filter: string, unless?: string[]): IFilterAndRange | undefined {
160-
if (!filter || unless?.some(value => filter.indexOf(value) === 0)) {
160+
// Ignore when the unless character not the first character or is before the line colon pattern
161+
if (!filter || unless?.some(value => {
162+
const unlessCharPos = filter.indexOf(value);
163+
return unlessCharPos === 0 || unlessCharPos > 0 && !LINE_COLON_PATTERN.test(filter.substring(unlessCharPos + 1));
164+
})) {
161165
return undefined;
162166
}
163167

src/vs/workbench/contrib/search/test/common/extractRange.test.ts

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ suite('extractRangeFromFilter', () => {
1212
assert.ok(!extractRangeFromFilter(''));
1313
assert.ok(!extractRangeFromFilter('/some/path'));
1414
assert.ok(!extractRangeFromFilter('/some/path/file.txt'));
15-
assert.ok(!extractRangeFromFilter('/some/@path'), 'paths like as /node_modules/@types/ should be supported');
1615

1716
for (const lineSep of [':', '#', '(', ':line ']) {
1817
for (const colSep of [':', '#', ',']) {
@@ -44,9 +43,56 @@ suite('extractRangeFromFilter', () => {
4443
assert.strictEqual(res?.range.startColumn, 20);
4544
});
4645

47-
test('unless', async function () {
48-
const res = extractRangeFromFilter('@/some/path/file.txt (19,20)', ['@']);
49-
50-
assert.ok(!res);
46+
suite('unless', async function () {
47+
const testSpecs = [
48+
// alpha-only symbol after unless
49+
{ filter: '/some/path/file.txt@alphasymbol', unless: ['@'], result: undefined },
50+
// unless as first char
51+
{ filter: '@/some/path/file.txt (19,20)', unless: ['@'], result: undefined },
52+
// unless as last char
53+
{ filter: '/some/path/file.txt (19,20)@', unless: ['@'], result: undefined },
54+
// unless before ,
55+
{
56+
filter: '/some/@path/file.txt (19,20)', unless: ['@'], result: {
57+
filter: '/some/@path/file.txt',
58+
range: {
59+
endColumn: 20,
60+
endLineNumber: 19,
61+
startColumn: 20,
62+
startLineNumber: 19
63+
}
64+
}
65+
},
66+
// unless before :
67+
{
68+
filter: '/some/@path/file.txt:19:20', unless: ['@'], result: {
69+
filter: '/some/@path/file.txt',
70+
range: {
71+
endColumn: 20,
72+
endLineNumber: 19,
73+
startColumn: 20,
74+
startLineNumber: 19
75+
}
76+
}
77+
},
78+
// unless before #
79+
{
80+
filter: '/some/@path/file.txt#19', unless: ['@'], result: {
81+
filter: '/some/@path/file.txt',
82+
range: {
83+
endColumn: 1,
84+
endLineNumber: 19,
85+
startColumn: 1,
86+
startLineNumber: 19
87+
}
88+
}
89+
},
90+
];
91+
for (const { filter, unless, result } of testSpecs) {
92+
test(`${filter} - ${JSON.stringify(unless)}`, () => {
93+
assert.deepStrictEqual(extractRangeFromFilter(filter, unless), result);
94+
});
95+
}
5196
});
5297
});
98+

0 commit comments

Comments
 (0)