|
4 | 4 | *--------------------------------------------------------------------------------------------*/
|
5 | 5 |
|
6 | 6 | import * as assert from 'assert';
|
7 |
| -import { compareItemsByFuzzyScore, FuzzyScore, FuzzyScore2, IItemAccessor, IItemScore, pieceToQuery, prepareQuery, scoreFuzzy, scoreFuzzy2, scoreItemFuzzy } from 'vs/base/common/fuzzyScorer'; |
| 7 | +import { compareItemsByFuzzyScore, FuzzyScore, FuzzyScore2, FuzzyScorerCache, IItemAccessor, IItemScore, pieceToQuery, prepareQuery, scoreFuzzy, scoreFuzzy2, scoreItemFuzzy } from 'vs/base/common/fuzzyScorer'; |
8 | 8 | import { Schemas } from 'vs/base/common/network';
|
9 | 9 | import { basename, dirname, posix, sep, win32 } from 'vs/base/common/path';
|
10 | 10 | import { isWindows } from 'vs/base/common/platform';
|
@@ -88,8 +88,8 @@ function _doScore2(target: string, query: string, matchOffset: number = 0): Fuzz
|
88 | 88 | return scoreFuzzy2(target, preparedQuery, 0, matchOffset);
|
89 | 89 | }
|
90 | 90 |
|
91 |
| -function scoreItem<T>(item: T, query: string, allowNonContiguousMatches: boolean, accessor: IItemAccessor<T>): IItemScore { |
92 |
| - return scoreItemFuzzy(item, prepareQuery(query), allowNonContiguousMatches, accessor, Object.create(null)); |
| 91 | +function scoreItem<T>(item: T, query: string, allowNonContiguousMatches: boolean, accessor: IItemAccessor<T>, cache: FuzzyScorerCache = Object.create(null)): IItemScore { |
| 92 | + return scoreItemFuzzy(item, prepareQuery(query), allowNonContiguousMatches, accessor, cache); |
93 | 93 | }
|
94 | 94 |
|
95 | 95 | function compareItemsByScore<T>(itemA: T, itemB: T, query: string, allowNonContiguousMatches: boolean, accessor: IItemAccessor<T>): number {
|
@@ -268,6 +268,17 @@ suite('Fuzzy Scorer', () => {
|
268 | 268 | assert.strictEqual(res4.descriptionMatch![1].end, 14);
|
269 | 269 | });
|
270 | 270 |
|
| 271 | + test('scoreItem - multiple with cache yields different results', function () { |
| 272 | + const resource = URI.file('/xyz/some/path/someFile123.txt'); |
| 273 | + const cache = {}; |
| 274 | + let res1 = scoreItem(resource, 'xyz sm', true, ResourceAccessor, cache); |
| 275 | + assert.ok(res1.score); |
| 276 | + |
| 277 | + // from the cache's perspective this should be a totally different query |
| 278 | + let res2 = scoreItem(resource, 'xyz "sm"', true, ResourceAccessor, cache); |
| 279 | + assert.ok(!res2.score); |
| 280 | + }); |
| 281 | + |
271 | 282 | test('scoreItem - invalid input', function () {
|
272 | 283 |
|
273 | 284 | let res = scoreItem(null, null!, true, ResourceAccessor);
|
|
0 commit comments