Skip to content

Commit 5653038

Browse files
authored
Merge pull request #149722 from microsoft/joh/relaxed-gazelle
make `getWordAtText`-config configurable and use lower budget for speedy tests
2 parents 226d9ee + 30f5b29 commit 5653038

File tree

2 files changed

+42
-11
lines changed

2 files changed

+42
-11
lines changed

src/vs/editor/common/core/wordHelper.ts

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import { Iterable } from 'vs/base/common/iterator';
7+
import { toDisposable } from 'vs/base/common/lifecycle';
8+
import { LinkedList } from 'vs/base/common/linkedList';
9+
610
export const USUAL_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\|;:\'",.<>/?';
711

812
/**
@@ -71,13 +75,31 @@ export function ensureValidWordDefinition(wordDefinition?: RegExp | null): RegEx
7175
return result;
7276
}
7377

74-
const _defaultConfig = {
78+
79+
export interface IGetWordAtTextConfig {
80+
maxLen: number;
81+
windowSize: number;
82+
timeBudget: number;
83+
}
84+
85+
86+
const _defaultConfig = new LinkedList<IGetWordAtTextConfig>();
87+
_defaultConfig.unshift({
7588
maxLen: 1000,
7689
windowSize: 15,
7790
timeBudget: 150
78-
};
91+
});
7992

80-
export function getWordAtText(column: number, wordDefinition: RegExp, text: string, textOffset: number, config = _defaultConfig): IWordAtPosition | null {
93+
export function setDefaultGetWordAtTextConfig(value: IGetWordAtTextConfig) {
94+
const rm = _defaultConfig.unshift(value);
95+
return toDisposable(rm);
96+
}
97+
98+
export function getWordAtText(column: number, wordDefinition: RegExp, text: string, textOffset: number, config?: IGetWordAtTextConfig): IWordAtPosition | null {
99+
100+
if (!config) {
101+
config = Iterable.first(_defaultConfig)!;
102+
}
81103

82104
if (text.length > config.maxLen) {
83105
// don't throw strings that long at the regexp

src/vs/workbench/api/test/browser/extHostDocumentData.test.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { MainThreadDocumentsShape } from 'vs/workbench/api/common/extHost.protoc
1212
import { IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel';
1313
import { mock } from 'vs/base/test/common/mock';
1414
import * as perfData from './extHostDocumentData.test.perf-data';
15+
import { setDefaultGetWordAtTextConfig } from 'vs/editor/common/core/wordHelper';
1516

1617
suite('ExtHostDocumentData', () => {
1718

@@ -316,14 +317,22 @@ suite('ExtHostDocumentData', () => {
316317
perfData._$_$_expensive
317318
], '\n', 1, 'text', false);
318319

319-
let range = data.document.getWordRangeAtPosition(new Position(0, 1_177_170), regex)!;
320-
assert.strictEqual(range, undefined);
321-
322-
const pos = new Position(0, 1177170);
323-
range = data.document.getWordRangeAtPosition(pos)!;
324-
assert.ok(range);
325-
assert.ok(range.contains(pos));
326-
assert.strictEqual(data.document.getText(range), 'TaskDefinition');
320+
// this test only ensures that we eventually give and timeout (when searching "funny" words and long lines)
321+
// for the sake of speedy tests we lower the timeBudget here
322+
const config = setDefaultGetWordAtTextConfig({ maxLen: 1000, windowSize: 15, timeBudget: 30 });
323+
try {
324+
let range = data.document.getWordRangeAtPosition(new Position(0, 1_177_170), regex)!;
325+
assert.strictEqual(range, undefined);
326+
327+
const pos = new Position(0, 1177170);
328+
range = data.document.getWordRangeAtPosition(pos)!;
329+
assert.ok(range);
330+
assert.ok(range.contains(pos));
331+
assert.strictEqual(data.document.getText(range), 'TaskDefinition');
332+
333+
} finally {
334+
config.dispose();
335+
}
327336
});
328337

329338
test('Rename popup sometimes populates with text on the left side omitted #96013', function () {

0 commit comments

Comments
 (0)