From 38f0dea2b63aa34556e4aba7ff10eb1175e38e11 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 11 Jul 2017 17:54:21 +0200 Subject: [PATCH] fix #29469, remove unsued code --- src/vs/editor/common/modes.ts | 9 +------ .../contrib/quickFix/browser/quickFix.ts | 12 ++++++--- .../quickFix/browser/quickFixCommands.ts | 25 +---------------- .../contrib/quickFix/browser/quickFixModel.ts | 4 +-- .../quickFix/browser/quickFixWidget.ts | 6 ++--- .../test/browser/quickFixModel.test.ts | 2 +- .../standalone/browser/standaloneLanguages.ts | 4 +-- src/vs/monaco.d.ts | 10 +------ .../mainThreadLanguageFeatures.ts | 2 +- src/vs/workbench/api/node/extHost.protocol.ts | 2 +- .../workbench/api/node/extHostApiCommands.ts | 4 +-- .../api/node/extHostLanguageFeatures.ts | 11 +++----- .../api/extHostLanguageFeatures.test.ts | 27 ++++++++++++++++--- 13 files changed, 49 insertions(+), 69 deletions(-) diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 4d85cdfa5ac..4dfb8d54832 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -258,13 +258,6 @@ export interface ISuggestSupport { resolveCompletionItem?(model: editorCommon.IModel, position: Position, item: ISuggestion, token: CancellationToken): ISuggestion | Thenable; } -/** - * Interface used to quick fix typing errors while accesing member fields. - */ -export interface CodeAction { - command: Command; - score: number; -} /** * The code action interface defines the contract between extensions and * the [light bulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) feature. @@ -274,7 +267,7 @@ export interface CodeActionProvider { /** * Provide commands for the given document and range. */ - provideCodeActions(model: editorCommon.IReadOnlyModel, range: Range, token: CancellationToken): CodeAction[] | Thenable; + provideCodeActions(model: editorCommon.IReadOnlyModel, range: Range, token: CancellationToken): Command[] | Thenable; } /** diff --git a/src/vs/editor/contrib/quickFix/browser/quickFix.ts b/src/vs/editor/contrib/quickFix/browser/quickFix.ts index 9d50f40a6a8..6f13bbbc48c 100644 --- a/src/vs/editor/contrib/quickFix/browser/quickFix.ts +++ b/src/vs/editor/contrib/quickFix/browser/quickFix.ts @@ -7,20 +7,24 @@ import URI from 'vs/base/common/uri'; import { IReadOnlyModel } from 'vs/editor/common/editorCommon'; import { Range } from 'vs/editor/common/core/range'; -import { CodeAction, CodeActionProviderRegistry } from 'vs/editor/common/modes'; +import { Command, CodeActionProviderRegistry } from 'vs/editor/common/modes'; import { asWinJsPromise } from 'vs/base/common/async'; import { TPromise } from 'vs/base/common/winjs.base'; import { onUnexpectedExternalError, illegalArgument } from 'vs/base/common/errors'; import { IModelService } from 'vs/editor/common/services/modelService'; import { CommonEditorRegistry } from 'vs/editor/common/editorCommonExtensions'; -export function getCodeActions(model: IReadOnlyModel, range: Range): TPromise { +export function getCodeActions(model: IReadOnlyModel, range: Range): TPromise { - const allResults: CodeAction[] = []; + const allResults: Command[] = []; const promises = CodeActionProviderRegistry.all(model).map(support => { return asWinJsPromise(token => support.provideCodeActions(model, range, token)).then(result => { if (Array.isArray(result)) { - allResults.push(...result); + for (const quickFix of result) { + if (quickFix) { + allResults.push(quickFix); + } + } } }, err => { onUnexpectedExternalError(err); diff --git a/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts b/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts index 1d210678405..605591babeb 100644 --- a/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts +++ b/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts @@ -12,16 +12,11 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IMarkerService } from 'vs/platform/markers/common/markers'; -import { ICommonCodeEditor, IEditorContribution, IReadOnlyModel } from 'vs/editor/common/editorCommon'; +import { ICommonCodeEditor, IEditorContribution } from 'vs/editor/common/editorCommon'; import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; -import { Range } from 'vs/editor/common/core/range'; import { editorAction, ServicesAccessor, EditorAction } from 'vs/editor/common/editorCommonExtensions'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { editorContribution } from 'vs/editor/browser/editorBrowserExtensions'; -import { CodeAction, CodeActionProviderRegistry } from 'vs/editor/common/modes'; -import { asWinJsPromise } from 'vs/base/common/async'; -import { TPromise } from 'vs/base/common/winjs.base'; -import { onUnexpectedExternalError } from 'vs/base/common/errors'; import { QuickFixContextMenu } from './quickFixWidget'; import { LightBulbWidget } from './lightBulbWidget'; import { QuickFixModel, QuickFixComputeEvent } from './quickFixModel'; @@ -135,21 +130,3 @@ export class QuickFixAction extends EditorAction { } } } - - -export function getCodeActions(model: IReadOnlyModel, range: Range): TPromise { - - const allResults: CodeAction[] = []; - const promises = CodeActionProviderRegistry.all(model).map(support => { - return asWinJsPromise(token => support.provideCodeActions(model, range, token)).then(result => { - if (Array.isArray(result)) { - allResults.push(...result); - } - }, err => { - onUnexpectedExternalError(err); - }); - }); - - return TPromise.join(promises).then(() => allResults); -} - diff --git a/src/vs/editor/contrib/quickFix/browser/quickFixModel.ts b/src/vs/editor/contrib/quickFix/browser/quickFixModel.ts index 4688f618cfd..702bd002dab 100644 --- a/src/vs/editor/contrib/quickFix/browser/quickFixModel.ts +++ b/src/vs/editor/contrib/quickFix/browser/quickFixModel.ts @@ -12,7 +12,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { IMarker, IMarkerService } from 'vs/platform/markers/common/markers'; import { Range } from 'vs/editor/common/core/range'; import { ICommonCodeEditor } from 'vs/editor/common/editorCommon'; -import { CodeActionProviderRegistry, CodeAction } from 'vs/editor/common/modes'; +import { CodeActionProviderRegistry, Command } from 'vs/editor/common/modes'; import { getCodeActions } from './quickFix'; import { Position } from 'vs/editor/common/core/position'; @@ -126,7 +126,7 @@ export interface QuickFixComputeEvent { type: 'auto' | 'manual'; range: Range; position: Position; - fixes: TPromise; + fixes: TPromise; } export class QuickFixModel { diff --git a/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts b/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts index 8c3b5cff522..6cd9f41c1b7 100644 --- a/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts +++ b/src/vs/editor/contrib/quickFix/browser/quickFixWidget.ts @@ -10,7 +10,7 @@ import { always } from 'vs/base/common/async'; import { getDomNodePagePosition } from 'vs/base/browser/dom'; import { Position } from 'vs/editor/common/core/position'; import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; -import { CodeAction } from 'vs/editor/common/modes'; +import { Command } 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'; @@ -32,10 +32,10 @@ export class QuickFixContextMenu { this._commandService = commandService; } - show(fixes: TPromise, at: { x: number; y: number } | Position) { + show(fixes: TPromise, at: { x: number; y: number } | Position) { const actions = fixes.then(value => { - return value.map(({ command }) => { + return value.map(command => { return new Action(command.id, command.title, undefined, true, () => { return always( this._commandService.executeCommand(command.id, ...command.arguments), diff --git a/src/vs/editor/contrib/quickFix/test/browser/quickFixModel.test.ts b/src/vs/editor/contrib/quickFix/test/browser/quickFixModel.test.ts index fd3484ef05f..d6d70dbc2c0 100644 --- a/src/vs/editor/contrib/quickFix/test/browser/quickFixModel.test.ts +++ b/src/vs/editor/contrib/quickFix/test/browser/quickFixModel.test.ts @@ -38,7 +38,7 @@ suite('QuickFix', () => { setup(() => { reg = CodeActionProviderRegistry.register(languageIdentifier.language, { provideCodeActions() { - return [{ command: { id: 'test-command', title: 'test', arguments: [] }, score: 1 }]; + return [{ id: 'test-command', title: 'test', arguments: [] }]; } }); markerService = new MarkerService(); diff --git a/src/vs/editor/standalone/browser/standaloneLanguages.ts b/src/vs/editor/standalone/browser/standaloneLanguages.ts index 17648894450..833bcf2d4d7 100644 --- a/src/vs/editor/standalone/browser/standaloneLanguages.ts +++ b/src/vs/editor/standalone/browser/standaloneLanguages.ts @@ -329,7 +329,7 @@ export function registerCodeLensProvider(languageId: string, provider: modes.Cod */ export function registerCodeActionProvider(languageId: string, provider: CodeActionProvider): IDisposable { return modes.CodeActionProviderRegistry.register(languageId, { - provideCodeActions: (model: editorCommon.IReadOnlyModel, range: Range, token: CancellationToken): modes.CodeAction[] | Thenable => { + provideCodeActions: (model: editorCommon.IReadOnlyModel, range: Range, token: CancellationToken): modes.Command[] | Thenable => { let markers = StaticServices.markerService.get().read({ resource: model.uri }).filter(m => { return Range.areIntersectingOrTouching(m, range); }); @@ -404,7 +404,7 @@ export interface CodeActionProvider { /** * Provide commands for the given document and range. */ - provideCodeActions(model: editorCommon.IReadOnlyModel, range: Range, context: CodeActionContext, token: CancellationToken): modes.CodeAction[] | Thenable; + provideCodeActions(model: editorCommon.IReadOnlyModel, range: Range, context: CodeActionContext, token: CancellationToken): modes.Command[] | Thenable; } /** diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 7e3864f54b5..0fc13a41c86 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4050,7 +4050,7 @@ declare module monaco.languages { /** * Provide commands for the given document and range. */ - provideCodeActions(model: editor.IReadOnlyModel, range: Range, context: CodeActionContext, token: CancellationToken): CodeAction[] | Thenable; + provideCodeActions(model: editor.IReadOnlyModel, range: Range, context: CodeActionContext, token: CancellationToken): Command[] | Thenable; } /** @@ -4425,14 +4425,6 @@ declare module monaco.languages { provideHover(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): Hover | Thenable; } - /** - * Interface used to quick fix typing errors while accesing member fields. - */ - export interface CodeAction { - command: Command; - score: number; - } - /** * Represents a parameter of a callable-signature. A parameter can * have a label and a doc-comment. diff --git a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts index 03934ca9335..57e178733b3 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts @@ -157,7 +157,7 @@ export class MainThreadLanguageFeatures extends MainThreadLanguageFeaturesShape $registerQuickFixSupport(handle: number, selector: vscode.DocumentSelector): TPromise { this._registrations[handle] = modes.CodeActionProviderRegistry.register(selector, { - provideCodeActions: (model: IReadOnlyModel, range: EditorRange, token: CancellationToken): Thenable => { + provideCodeActions: (model: IReadOnlyModel, range: EditorRange, token: CancellationToken): Thenable => { return this._heapService.trackRecursive(wireCancellationToken(token, this._proxy.$provideCodeActions(handle, model.uri, range))); } }); diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 9b626f9c5c2..61e383fedc1 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -464,7 +464,7 @@ export abstract class ExtHostLanguageFeaturesShape { $provideHover(handle: number, resource: URI, position: IPosition): TPromise { throw ni(); } $provideDocumentHighlights(handle: number, resource: URI, position: IPosition): TPromise { throw ni(); } $provideReferences(handle: number, resource: URI, position: IPosition, context: modes.ReferenceContext): TPromise { throw ni(); } - $provideCodeActions(handle: number, resource: URI, range: IRange): TPromise { throw ni(); } + $provideCodeActions(handle: number, resource: URI, range: IRange): TPromise { throw ni(); } $provideDocumentFormattingEdits(handle: number, resource: URI, options: modes.FormattingOptions): TPromise { throw ni(); } $provideDocumentRangeFormattingEdits(handle: number, resource: URI, range: IRange, options: modes.FormattingOptions): TPromise { throw ni(); } $provideOnTypeFormattingEdits(handle: number, resource: URI, position: IPosition, ch: string, options: modes.FormattingOptions): TPromise { throw ni(); } diff --git a/src/vs/workbench/api/node/extHostApiCommands.ts b/src/vs/workbench/api/node/extHostApiCommands.ts index 9f3e5af1cbc..c34a32838b7 100644 --- a/src/vs/workbench/api/node/extHostApiCommands.ts +++ b/src/vs/workbench/api/node/extHostApiCommands.ts @@ -399,11 +399,11 @@ export class ExtHostApiCommands { resource, range: typeConverters.fromRange(range) }; - return this._commands.executeCommand('_executeCodeActionProvider', args).then(value => { + return this._commands.executeCommand('_executeCodeActionProvider', args).then(value => { if (!Array.isArray(value)) { return undefined; } - return value.map(quickFix => this._commands.converter.fromInternal(quickFix.command)); + return value.map(quickFix => this._commands.converter.fromInternal(quickFix)); }); } diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 2bf60e23f7a..cb5ef37adbb 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -271,7 +271,7 @@ class QuickFixAdapter { this._provider = provider; } - provideCodeActions(resource: URI, range: IRange): TPromise { + provideCodeActions(resource: URI, range: IRange): TPromise { const doc = this._documents.getDocumentData(resource).document; const ran = TypeConverters.toRange(range); @@ -291,12 +291,7 @@ class QuickFixAdapter { if (!Array.isArray(commands)) { return undefined; } - return commands.map((command, i) => { - return { - command: this._commands.toInternal(command), - score: i - }; - }); + return commands.map(command => this._commands.toInternal(command)); }); } } @@ -843,7 +838,7 @@ export class ExtHostLanguageFeatures extends ExtHostLanguageFeaturesShape { return this._createDisposable(handle); } - $provideCodeActions(handle: number, resource: URI, range: IRange): TPromise { + $provideCodeActions(handle: number, resource: URI, range: IRange): TPromise { return this._withAdapter(handle, QuickFixAdapter, adapter => adapter.provideCodeActions(resource, range)); } diff --git a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts index 3cfcedbac4b..bdfb54052d7 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostLanguageFeatures.test.ts @@ -650,10 +650,29 @@ suite('ExtHostLanguageFeatures', function () { assert.equal(value.length, 2); let [first, second] = value; - assert.equal(first.command.title, 'Testing1'); - assert.equal(first.command.id, 'test1'); - assert.equal(second.command.title, 'Testing2'); - assert.equal(second.command.id, 'test2'); + assert.equal(first.title, 'Testing1'); + assert.equal(first.id, 'test1'); + assert.equal(second.title, 'Testing2'); + assert.equal(second.id, 'test2'); + }); + }); + }); + + test('Cannot read property \'id\' of undefined, #29469', function () { + + disposables.push(extHost.registerCodeActionProvider(defaultSelector, { + provideCodeActions(): any { + return [ + undefined, + null, + { command: 'test', title: 'Testing' } + ]; + } + })); + + return threadService.sync().then(() => { + return getCodeActions(model, model.getFullModelRange()).then(value => { + assert.equal(value.length, 1); }); }); }); -- GitLab