提交 0242f78a 编写于 作者: M Matt Bierner

Try canceling previous code action requests on re-trigger

Fixes #49884
上级 b228ffc4
......@@ -5,7 +5,7 @@
import { isFalsyOrEmpty, mergeSort, flatten } from 'vs/base/common/arrays';
import { asWinJsPromise } from 'vs/base/common/async';
import { illegalArgument, onUnexpectedExternalError } from 'vs/base/common/errors';
import { illegalArgument, onUnexpectedExternalError, isPromiseCanceledError } from 'vs/base/common/errors';
import URI from 'vs/base/common/uri';
import { TPromise } from 'vs/base/common/winjs.base';
import { registerLanguageCommand } from 'vs/editor/browser/editorExtensions';
......@@ -28,6 +28,10 @@ export function getCodeActions(model: ITextModel, rangeOrSelection: Range | Sele
}
return providedCodeActions.filter(action => isValidAction(filter, action));
}, (err): CodeAction[] => {
if (isPromiseCanceledError(err)) {
throw err;
}
onUnexpectedExternalError(err);
return [];
});
......
......@@ -46,6 +46,8 @@ export class QuickFixController implements IEditorContribution {
private _lightBulbWidget: LightBulbWidget;
private _disposables: IDisposable[] = [];
private _activeRequest: TPromise<CodeAction[]> | undefined;
constructor(editor: ICodeEditor,
@IMarkerService markerService: IMarkerService,
@IContextKeyService contextKeyService: IContextKeyService,
......@@ -76,6 +78,15 @@ export class QuickFixController implements IEditorContribution {
}
private _onCodeActionsEvent(e: CodeActionsComputeEvent): void {
if (this._activeRequest) {
this._activeRequest.cancel();
this._activeRequest = undefined;
}
if (e && e.actions) {
this._activeRequest = e.actions;
}
if (e && e.trigger.filter && e.trigger.filter.kind) {
// Triggered for specific scope
// Apply if we only have one action or requested autoApply, otherwise show menu
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册