提交 3cdcfa85 编写于 作者: M Matt Bierner

Prevent currentSignature and activeSignature from getting out of state

Use modes.SignatureHelp as source of truth for activeSignature
上级 6b39891d
......@@ -20,13 +20,12 @@ export interface TriggerContext {
export interface IHintEvent {
readonly hints: modes.SignatureHelp;
readonly currentSignature: number;
}
type ParameterHintState =
{ readonly state: 'default' }
| { readonly state: 'pending' }
| { readonly state: 'active', readonly hints: modes.SignatureHelp; readonly currentSignature: number; };
| { readonly state: 'active', readonly hints: modes.SignatureHelp; };
export class ParameterHintsModel extends Disposable {
......@@ -106,9 +105,8 @@ export class ParameterHintsModel extends Disposable {
}
const length = this.state.hints.signatures.length;
let currentSignature = this.state.currentSignature;
const last = (currentSignature % length) === (length - 1);
const activeSignature = this.state.hints.activeSignature;
const last = (activeSignature % length) === (length - 1);
const cycle = this.editor.getConfiguration().contribInfo.parameterHints.cycle;
// If there is only one signature, or we're on last signature of list
......@@ -117,14 +115,7 @@ export class ParameterHintsModel extends Disposable {
return;
}
if (last && cycle) {
currentSignature = 0;
} else {
currentSignature++;
}
this.state = { ...this.state, currentSignature };
this._onHint.fire(this.state);
this.updateActiveSignature(last && cycle ? 0 : activeSignature + 1);
}
public previous(): void {
......@@ -133,9 +124,8 @@ export class ParameterHintsModel extends Disposable {
}
const length = this.state.hints.signatures.length;
let currentSignature = this.state.currentSignature;
const first = currentSignature === 0;
const activeSignature = this.state.hints.activeSignature;
const first = activeSignature === 0;
const cycle = this.editor.getConfiguration().contribInfo.parameterHints.cycle;
// If there is only one signature, or we're on first signature of list
......@@ -144,13 +134,18 @@ export class ParameterHintsModel extends Disposable {
return;
}
if (first && cycle) {
currentSignature = length - 1;
} else {
currentSignature--;
this.updateActiveSignature(first && cycle ? length - 1 : activeSignature - 1);
}
private updateActiveSignature(activeSignature: number) {
if (this.state.state !== 'active') {
return;
}
this.state = { ...this.state, currentSignature };
this.state = {
state: 'active',
hints: { ...this.state.hints, activeSignature }
};
this._onHint.fire(this.state);
}
......@@ -176,7 +171,7 @@ export class ParameterHintsModel extends Disposable {
this._onCancel.fire(void 0);
return false;
} else {
this.state = { state: 'active', hints: result, currentSignature: result.activeSignature };
this.state = { state: 'active', hints: result };
this._onHint.fire(this.state);
return true;
}
......
......@@ -61,7 +61,7 @@ export class ParameterHintsWidget implements IContentWidget, IDisposable {
this.disposables.push(this.model.onHint(e => {
this.show();
this.render(e.hints, e.currentSignature);
this.render(e.hints);
}));
this.disposables.push(this.model.onCancel(() => {
......@@ -160,7 +160,7 @@ export class ParameterHintsWidget implements IContentWidget, IDisposable {
return null;
}
private render(hints: modes.SignatureHelp, currentSignature: number): void {
private render(hints: modes.SignatureHelp): void {
const multiple = hints.signatures.length > 1;
dom.toggleClass(this.element, 'multiple', multiple);
this.keyMultipleSignatures.set(multiple);
......@@ -168,7 +168,7 @@ export class ParameterHintsWidget implements IContentWidget, IDisposable {
this.signature.innerHTML = '';
this.docs.innerHTML = '';
const signature = hints.signatures[currentSignature];
const signature = hints.signatures[hints.activeSignature];
if (!signature) {
return;
......@@ -219,7 +219,7 @@ export class ParameterHintsWidget implements IContentWidget, IDisposable {
dom.append(this.docs, renderedContents.element);
}
let currentOverload = String(currentSignature + 1);
let currentOverload = String(hints.activeSignature + 1);
if (hints.signatures.length < 10) {
currentOverload += `/${hints.signatures.length}`;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册