mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-21 12:20:29 -04:00
Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 (#7880)
* Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 * fix pipelines * fix strict-null-checks * add missing files
This commit is contained in:
@@ -55,6 +55,7 @@ export class ParameterHintsModel extends Disposable {
|
||||
private readonly editor: ICodeEditor;
|
||||
private triggerOnType = false;
|
||||
private _state: ParameterHintState.State = ParameterHintState.Default;
|
||||
private _pendingTriggers: TriggerContext[] = [];
|
||||
private readonly _lastSignatureHelpResult = this._register(new MutableDisposable<modes.SignatureHelpResult>());
|
||||
private triggerChars = new CharacterSet();
|
||||
private retriggerChars = new CharacterSet();
|
||||
@@ -109,13 +110,12 @@ export class ParameterHintsModel extends Disposable {
|
||||
}
|
||||
|
||||
const triggerId = ++this.triggerId;
|
||||
this.throttledDelayer.trigger(
|
||||
() => this.doTrigger({
|
||||
triggerKind: context.triggerKind,
|
||||
triggerCharacter: context.triggerCharacter,
|
||||
isRetrigger: this.state.type === ParameterHintState.Type.Active || this.state.type === ParameterHintState.Type.Pending,
|
||||
activeSignatureHelp: this.state.type === ParameterHintState.Type.Active ? this.state.hints : undefined
|
||||
}, triggerId), delay).then(undefined, onUnexpectedError);
|
||||
|
||||
this._pendingTriggers.push(context);
|
||||
this.throttledDelayer.trigger(() => {
|
||||
return this.doTrigger(triggerId);
|
||||
}, delay)
|
||||
.catch(onUnexpectedError);
|
||||
}
|
||||
|
||||
public next(): void {
|
||||
@@ -165,11 +165,28 @@ export class ParameterHintsModel extends Disposable {
|
||||
this._onChangedHints.fire(this.state.hints);
|
||||
}
|
||||
|
||||
private doTrigger(triggerContext: modes.SignatureHelpContext, triggerId: number): Promise<boolean> {
|
||||
private async doTrigger(triggerId: number): Promise<boolean> {
|
||||
const isRetrigger = this.state.type === ParameterHintState.Type.Active || this.state.type === ParameterHintState.Type.Pending;
|
||||
const activeSignatureHelp = this.state.type === ParameterHintState.Type.Active ? this.state.hints : undefined;
|
||||
|
||||
this.cancel(true);
|
||||
|
||||
if (this._pendingTriggers.length === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const context: TriggerContext = this._pendingTriggers.reduce(mergeTriggerContexts);
|
||||
this._pendingTriggers = [];
|
||||
|
||||
const triggerContext = {
|
||||
triggerKind: context.triggerKind,
|
||||
triggerCharacter: context.triggerCharacter,
|
||||
isRetrigger: isRetrigger,
|
||||
activeSignatureHelp: activeSignatureHelp
|
||||
};
|
||||
|
||||
if (!this.editor.hasModel()) {
|
||||
return Promise.resolve(false);
|
||||
return false;
|
||||
}
|
||||
|
||||
const model = this.editor.getModel();
|
||||
@@ -178,19 +195,18 @@ export class ParameterHintsModel extends Disposable {
|
||||
this.state = new ParameterHintState.Pending(createCancelablePromise(token =>
|
||||
provideSignatureHelp(model, position, triggerContext, token)));
|
||||
|
||||
return this.state.request.then(result => {
|
||||
try {
|
||||
const result = await this.state.request;
|
||||
|
||||
// Check that we are still resolving the correct signature help
|
||||
if (triggerId !== this.triggerId) {
|
||||
if (result) {
|
||||
result.dispose();
|
||||
}
|
||||
result?.dispose();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!result || !result.value.signatures || result.value.signatures.length === 0) {
|
||||
if (result) {
|
||||
result.dispose();
|
||||
}
|
||||
result?.dispose();
|
||||
this._lastSignatureHelpResult.clear();
|
||||
this.cancel();
|
||||
return false;
|
||||
@@ -200,13 +216,13 @@ export class ParameterHintsModel extends Disposable {
|
||||
this._onChangedHints.fire(this.state.hints);
|
||||
return true;
|
||||
}
|
||||
}).catch(error => {
|
||||
} catch (error) {
|
||||
if (triggerId === this.triggerId) {
|
||||
this.state = ParameterHintState.Default;
|
||||
}
|
||||
onUnexpectedError(error);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private get isTriggered(): boolean {
|
||||
@@ -284,3 +300,19 @@ export class ParameterHintsModel extends Disposable {
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
function mergeTriggerContexts(previous: TriggerContext, current: TriggerContext) {
|
||||
switch (current.triggerKind) {
|
||||
case modes.SignatureHelpTriggerKind.Invoke:
|
||||
// Invoke overrides previous triggers.
|
||||
return current;
|
||||
|
||||
case modes.SignatureHelpTriggerKind.ContentChange:
|
||||
// Ignore content changes triggers
|
||||
return previous;
|
||||
|
||||
case modes.SignatureHelpTriggerKind.TriggerCharacter:
|
||||
default:
|
||||
return current;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user