From a3d44c1fd3a1efd9976ec242e8ed1d8ab1c7de89 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Fri, 24 Feb 2017 11:46:02 +0100 Subject: [PATCH] re-request code action after applying them, fixes #21060 --- src/vs/editor/contrib/quickFix/browser/quickFix.ts | 3 ++- .../contrib/quickFix/browser/quickFixWidget.ts | 12 ++++++++++-- .../editor/contrib/quickFix/common/quickFixModel.ts | 10 +++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/vs/editor/contrib/quickFix/browser/quickFix.ts b/src/vs/editor/contrib/quickFix/browser/quickFix.ts index f963b16ee90..6a56a21e643 100644 --- a/src/vs/editor/contrib/quickFix/browser/quickFix.ts +++ b/src/vs/editor/contrib/quickFix/browser/quickFix.ts @@ -50,6 +50,7 @@ export class QuickFixController implements IEditorContribution { this._updateLightBulbTitle(); this._disposables.push( + this._quickFixContextMenu.onDidExecuteCodeAction(_ => this._model.trigger('auto')), this._lightBulbWidget.onClick(this._handleLightBulbSelect, this), this._model.onDidChangeFixes(e => this._onQuickFixEvent(e)), this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitle, this) @@ -88,7 +89,7 @@ export class QuickFixController implements IEditorContribution { } public triggerFromEditorSelection(): void { - this._model.triggerManual(); + this._model.trigger('manual'); } private _updateLightBulbTitle(): void { diff --git a/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts b/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts index 239bcbe11ef..749fdea7319 100644 --- a/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts +++ b/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts @@ -6,6 +6,7 @@ 'use strict'; import { TPromise } from 'vs/base/common/winjs.base'; +import { always } from 'vs/base/common/async'; import { getDomNodePagePosition } from 'vs/base/browser/dom'; import { Position } from 'vs/editor/common/core/position'; import { IPosition } from 'vs/editor/common/editorCommon'; @@ -14,6 +15,7 @@ import { CodeAction } from 'vs/editor/common/modes'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { Action } from 'vs/base/common/actions'; +import Event, { Emitter } from 'vs/base/common/event'; export class QuickFixContextMenu { @@ -21,6 +23,9 @@ export class QuickFixContextMenu { private _contextMenuService: IContextMenuService; private _commandService: ICommandService; private _visible: boolean; + private _onDidExecuteCodeAction = new Emitter(); + + readonly onDidExecuteCodeAction: Event = this._onDidExecuteCodeAction.event; constructor(editor: ICodeEditor, contextMenuService: IContextMenuService, commandService: ICommandService) { this._editor = editor; @@ -31,9 +36,12 @@ export class QuickFixContextMenu { show(fixes: TPromise, at: { x: number; y: number } | IPosition) { const actions = fixes.then(value => { - return value.map(({command}) => { + return value.map(({ command }) => { return new Action(command.id, command.title, undefined, true, () => { - return this._commandService.executeCommand(command.id, ...command.arguments); + return always( + this._commandService.executeCommand(command.id, ...command.arguments), + () => this._onDidExecuteCodeAction.fire(undefined) + ); }); }); }); diff --git a/src/vs/editor/contrib/quickFix/common/quickFixModel.ts b/src/vs/editor/contrib/quickFix/common/quickFixModel.ts index 8e78d6919ac..009ad2c26b3 100644 --- a/src/vs/editor/contrib/quickFix/common/quickFixModel.ts +++ b/src/vs/editor/contrib/quickFix/common/quickFixModel.ts @@ -32,7 +32,7 @@ export class QuickFixOracle { this._disposables = dispose(this._disposables); } - trigger(type: 'manual' | 'auto' = 'manual'): void { + trigger(type: 'manual' | 'auto'): void { let range = this._rangeAtPosition(); if (!range) { range = this._editor.getSelection(); @@ -47,7 +47,7 @@ export class QuickFixOracle { } private _onMarkerChanges(resources: URI[]): void { - const {uri} = this._editor.getModel(); + const { uri } = this._editor.getModel(); for (const resource of resources) { if (resource.toString() === uri.toString()) { this._onCursorChange(); @@ -90,7 +90,7 @@ export class QuickFixOracle { private _markerAtPosition(): IMarker { const position = this._editor.getPosition(); - const {uri} = this._editor.getModel(); + const { uri } = this._editor.getModel(); const markers = this._markerService.read({ resource: uri }).sort(Range.compareRangesUsingStarts); let idx = arrays.findFirst(markers, marker => marker.endLineNumber >= position.lineNumber); @@ -172,9 +172,9 @@ export class QuickFixModel { } } - triggerManual(): void { + trigger(type: 'auto' | 'manual'): void { if (this._quickFixOracle) { - this._quickFixOracle.trigger(); + this._quickFixOracle.trigger(type); } } } -- GitLab