Skip to content

Commit 2ebd334

Browse files
authored
Clear characterSet instead of recreating it on every parameter hints update (microsoft#164195)
1 parent 30c0860 commit 2ebd334

File tree

2 files changed

+29
-16
lines changed

2 files changed

+29
-16
lines changed

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

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ export class CharacterClassifier<T extends number> {
1212
/**
1313
* Maintain a compact (fully initialized ASCII map for quickly classifying ASCII characters - used more often in code).
1414
*/
15-
protected _asciiMap: Uint8Array;
15+
protected readonly _asciiMap: Uint8Array;
1616

1717
/**
1818
* The entire map (sparse array).
1919
*/
20-
protected _map: Map<number, number>;
20+
protected readonly _map: Map<number, number>;
2121

22-
protected _defaultValue: number;
22+
protected readonly _defaultValue: number;
2323

2424
constructor(_defaultValue: T) {
2525
const defaultValue = toUint8(_defaultValue);
@@ -30,10 +30,8 @@ export class CharacterClassifier<T extends number> {
3030
}
3131

3232
private static _createAsciiMap(defaultValue: number): Uint8Array {
33-
const asciiMap: Uint8Array = new Uint8Array(256);
34-
for (let i = 0; i < 256; i++) {
35-
asciiMap[i] = defaultValue;
36-
}
33+
const asciiMap = new Uint8Array(256);
34+
asciiMap.fill(defaultValue);
3735
return asciiMap;
3836
}
3937

@@ -54,6 +52,11 @@ export class CharacterClassifier<T extends number> {
5452
return <T>(this._map.get(charCode) || this._defaultValue);
5553
}
5654
}
55+
56+
public clear() {
57+
this._asciiMap.fill(this._defaultValue);
58+
this._map.clear();
59+
}
5760
}
5861

5962
const enum Boolean {
@@ -76,4 +79,8 @@ export class CharacterSet {
7679
public has(charCode: number): boolean {
7780
return (this._actual.get(charCode) === Boolean.True);
7881
}
82+
83+
public clear(): void {
84+
return this._actual.clear();
85+
}
7986
}

src/vs/editor/contrib/parameterHints/browser/parameterHintsModel.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ export class ParameterHintsModel extends Disposable {
5656

5757
private readonly editor: ICodeEditor;
5858
private readonly providers: LanguageFeatureRegistry<languages.SignatureHelpProvider>;
59+
5960
private triggerOnType = false;
6061
private _state: ParameterHintState.State = ParameterHintState.Default;
6162
private _pendingTriggers: TriggerContext[] = [];
63+
6264
private readonly _lastSignatureHelpResult = this._register(new MutableDisposable<languages.SignatureHelpResult>());
63-
private triggerChars = new CharacterSet();
64-
private retriggerChars = new CharacterSet();
65+
private readonly triggerChars = new CharacterSet();
66+
private readonly retriggerChars = new CharacterSet();
6567

6668
private readonly throttledDelayer: Delayer<boolean>;
6769
private triggerId = 0;
@@ -248,9 +250,8 @@ export class ParameterHintsModel extends Disposable {
248250
private onModelChanged(): void {
249251
this.cancel();
250252

251-
// Update trigger characters
252-
this.triggerChars = new CharacterSet();
253-
this.retriggerChars = new CharacterSet();
253+
this.triggerChars.clear();
254+
this.retriggerChars.clear();
254255

255256
const model = this.editor.getModel();
256257
if (!model) {
@@ -259,14 +260,19 @@ export class ParameterHintsModel extends Disposable {
259260

260261
for (const support of this.providers.ordered(model)) {
261262
for (const ch of support.signatureHelpTriggerCharacters || []) {
262-
this.triggerChars.add(ch.charCodeAt(0));
263+
if (ch.length) {
264+
const charCode = ch.charCodeAt(0);
265+
this.triggerChars.add(charCode);
263266

264-
// All trigger characters are also considered retrigger characters
265-
this.retriggerChars.add(ch.charCodeAt(0));
267+
// All trigger characters are also considered retrigger characters
268+
this.retriggerChars.add(charCode);
269+
}
266270
}
267271

268272
for (const ch of support.signatureHelpRetriggerCharacters || []) {
269-
this.retriggerChars.add(ch.charCodeAt(0));
273+
if (ch.length) {
274+
this.retriggerChars.add(ch.charCodeAt(0));
275+
}
270276
}
271277
}
272278
}

0 commit comments

Comments
 (0)