提交 55be1d8d 编写于 作者: M Matt Bierner

Trying to use less state in lightbulb api

上级 e2fed923
......@@ -117,7 +117,7 @@ export class QuickFixController implements IEditorContribution {
if (this._codeActionContextMenu.isVisible) {
this._codeActionContextMenu.show(newState.actions, newState.position);
} else {
this._lightBulbWidget.state = newState;
this._lightBulbWidget.tryShow(newState);
}
}
} else {
......@@ -129,10 +129,8 @@ export class QuickFixController implements IEditorContribution {
return QuickFixController.ID;
}
private _handleLightBulbSelect(coords: { x: number, y: number }): void {
if (this._lightBulbWidget.state.type === CodeActionsState.Type.Triggered) {
this._codeActionContextMenu.show(this._lightBulbWidget.state.actions, coords);
}
private _handleLightBulbSelect(e: { x: number, y: number, state: CodeActionsState.Triggered }): void {
this._codeActionContextMenu.show(e.state.actions, e);
}
public triggerFromEditorSelection(filter?: CodeActionFilter, autoApply?: CodeActionAutoApply): Promise<CodeAction[] | undefined> {
......
......@@ -20,7 +20,7 @@ export class LightBulbWidget implements IDisposable, IContentWidget {
private readonly _domNode: HTMLDivElement;
private readonly _editor: ICodeEditor;
private readonly _disposables: IDisposable[] = [];
private readonly _onClick = new Emitter<{ x: number, y: number }>();
private readonly _onClick = new Emitter<{ x: number; y: number; state: CodeActionsState.Triggered }>();
readonly onClick: Event<{ x: number, y: number }> = this._onClick.event;
......@@ -40,11 +40,15 @@ export class LightBulbWidget implements IDisposable, IContentWidget {
this._disposables.push(this._editor.onDidChangeModelContent(_ => {
// cancel when the line in question has been removed
const editorModel = this._editor.getModel();
if (this.state.type !== CodeActionsState.Type.Triggered || !editorModel || this.state.position.lineNumber >= editorModel.getLineCount()) {
if (this._state.type !== CodeActionsState.Type.Triggered || !editorModel || this._state.position.lineNumber >= editorModel.getLineCount()) {
this._futureFixes.cancel();
}
}));
this._disposables.push(dom.addStandardDisposableListener(this._domNode, 'click', e => {
if (this._state.type !== CodeActionsState.Type.Triggered) {
return;
}
// Make sure that focus / cursor location is not lost when clicking widget icon
this._editor.focus();
// a bit of extra work to make sure the menu
......@@ -53,13 +57,14 @@ export class LightBulbWidget implements IDisposable, IContentWidget {
const { lineHeight } = this._editor.getConfiguration();
let pad = Math.floor(lineHeight / 3);
if (this._position && this._state.type === CodeActionsState.Type.Triggered && this._position.position !== null && this._position.position.lineNumber < this._state.position.lineNumber) {
if (this._position && this._position.position !== null && this._position.position.lineNumber < this._state.position.lineNumber) {
pad += lineHeight;
}
this._onClick.fire({
x: e.posx,
y: top + height + pad
y: top + height + pad,
state: this._state
});
}));
this._disposables.push(dom.addDisposableListener(this._domNode, 'mouseenter', (e: MouseEvent) => {
......@@ -100,7 +105,7 @@ export class LightBulbWidget implements IDisposable, IContentWidget {
return this._position;
}
set state(newState: CodeActionsState.State) {
tryShow(newState: CodeActionsState.State) {
if (newState.type !== CodeActionsState.Type.Triggered || this._position && (!newState.position || this._position.position && this._position.position.lineNumber !== newState.position.lineNumber)) {
// hide when getting a 'hide'-request or when currently
......@@ -131,10 +136,6 @@ export class LightBulbWidget implements IDisposable, IContentWidget {
});
}
get state(): CodeActionsState.State {
return this._state;
}
set title(value: string) {
this._domNode.title = value;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册