Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998 (#7880)

* Merge from vscode c58aaab8a1cc22a7139b761166a0d4f37d41e998

* fix pipelines

* fix strict-null-checks

* add missing files
This commit is contained in:
Anthony Dresser
2019-10-21 22:12:22 -07:00
committed by GitHub
parent 7c9be74970
commit 1e22f47304
913 changed files with 18898 additions and 16536 deletions

View File

@@ -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;
}
}