diff options
author | Matt Bierner <matb@microsoft.com> | 2022-11-11 01:50:55 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-11 01:50:55 +0300 |
commit | 615fd708e344a4d07d8fab57d004920932d6b4b6 (patch) | |
tree | dea4ab320f23a6996bf1a5ec7d16b4c7afd16b1f | |
parent | eccee071eb1a36c76fb5b7aa882640ce2b0da59a (diff) |
Make ParameterHintsModel an idle value (#166052)
For #164171
Parameter hints are not an essential feature on editor init. Instead we can create the model on idle. This should not have an impact on UX unless a user somehow splits an editor and then types `(` within <50ms and expects parameter hints to show up
-rw-r--r-- | src/vs/editor/contrib/parameterHints/browser/parameterHints.ts | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts index 1363544105a..07b285e6121 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHints.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { IdleValue } from 'vs/base/common/async'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { Lazy } from 'vs/base/common/lazy'; import { Disposable } from 'vs/base/common/lifecycle'; @@ -29,7 +30,7 @@ class ParameterHintsController extends Disposable implements IEditorContribution } private readonly editor: ICodeEditor; - private readonly model: ParameterHintsModel; + private readonly model: IdleValue<ParameterHintsModel>; private readonly widget: Lazy<ParameterHintsWidget>; constructor( @@ -41,22 +42,26 @@ class ParameterHintsController extends Disposable implements IEditorContribution this.editor = editor; - this.model = this._register(new ParameterHintsModel(editor, languageFeaturesService.signatureHelpProvider)); + this.model = this._register(new IdleValue(() => { + const model = this._register(new ParameterHintsModel(editor, languageFeaturesService.signatureHelpProvider)); - this._register(this.model.onChangedHints(newParameterHints => { - if (newParameterHints) { - this.widget.getValue().show(); - this.widget.getValue().render(newParameterHints); - } else { - this.widget.rawValue?.hide(); - } + this._register(model.onChangedHints(newParameterHints => { + if (newParameterHints) { + this.widget.getValue().show(); + this.widget.getValue().render(newParameterHints); + } else { + this.widget.rawValue?.hide(); + } + })); + + return model; })); - this.widget = new Lazy(() => this._register(instantiationService.createInstance(ParameterHintsWidget, this.editor, this.model))); + this.widget = new Lazy(() => this._register(instantiationService.createInstance(ParameterHintsWidget, this.editor, this.model.value))); } cancel(): void { - this.model.cancel(); + this.model.value.cancel(); } previous(): void { @@ -68,7 +73,7 @@ class ParameterHintsController extends Disposable implements IEditorContribution } trigger(context: TriggerContext): void { - this.model.trigger(context, 0); + this.model.value.trigger(context, 0); } } |