提交 fb9cfb1a 编写于 作者: J Johannes Rieken

command: executeCodeActionProvider

上级 1d7819f0
......@@ -90,7 +90,7 @@ export class Range implements EditorCommon.IEditorRange {
return new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);
}
public static isIRange(obj: any): boolean {
public static isIRange(obj: any): obj is EditorCommon.IRange {
return (
obj
&& (typeof obj.startLineNumber === 'number')
......
......@@ -5,10 +5,14 @@
'use strict';
import URI from 'vs/base/common/uri';
import {Range} from 'vs/editor/common/core/range';
import {IModel, IRange} from 'vs/editor/common/editorCommon';
import {TPromise} from 'vs/base/common/winjs.base';
import {onUnexpectedError} from 'vs/base/common/errors';
import {onUnexpectedError, illegalArgument} from 'vs/base/common/errors';
import {IQuickFixSupport, IQuickFix} from 'vs/editor/common/modes';
import {IModelService} from 'vs/editor/common/services/modelService';
import {CommonEditorRegistry} from 'vs/editor/common/editorCommonExtensions';
import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
export const QuickFixRegistry = new LanguageFeatureRegistry<IQuickFixSupport>('quickFixSupport');
......@@ -40,4 +44,19 @@ export function getQuickFixes(model: IModel, range: IRange): TPromise<IQuickFix2
});
return TPromise.join(promises).then(() => quickFixes);
}
\ No newline at end of file
}
CommonEditorRegistry.registerLanguageCommand('_executeCodeActionProvider', function(accessor, args) {
const {resource, range} = args;
if (!URI.isURI(resource) || !Range.isIRange(range)) {
throw illegalArgument();
}
const model = accessor.get(IModelService).getModel(resource);
if (!model) {
throw illegalArgument();
}
return getQuickFixes(model, range);
});
\ No newline at end of file
......@@ -28,7 +28,7 @@ import {DeclarationRegistry} from 'vs/editor/contrib/goToDeclaration/common/goTo
import {ExtraInfoRegistry} from 'vs/editor/contrib/hover/common/hover';
import {OccurrencesRegistry} from 'vs/editor/contrib/wordHighlighter/common/wordHighlighter';
import {ReferenceRegistry} from 'vs/editor/contrib/referenceSearch/common/referenceSearch';
import {QuickFixRegistry} from 'vs/editor/contrib/quickFix/common/quickFix';
import {IQuickFix2, QuickFixRegistry, getQuickFixes} from 'vs/editor/contrib/quickFix/common/quickFix';
import {IOutline} from 'vs/editor/contrib/quickOpen/common/quickOpen';
import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
import {NavigateTypesSupportRegistry, INavigateTypesSupport, ITypeBearing} from 'vs/workbench/parts/search/common/search'
......@@ -47,8 +47,8 @@ import {SuggestRegistry} from 'vs/editor/contrib/suggest/common/suggest';
// vscode.executeSignatureHelpProvider
// vscode.executeDocumentSymbolProvider
// vscode.executeCompletionItemProvider
// vscode.executeCodeActionProvider
// vscode.executeCodeLensProvider
// vscode.executeFormatDocumentProvider
// vscode.executeFormatRangeProvider
......@@ -71,6 +71,7 @@ export class ExtHostLanguageFeatureCommands {
this._register('vscode.executeSignatureHelpProvider', this._executeSignatureHelpProvider);
this._register('vscode.executeDocumentSymbolProvider', this._executeDocumentSymbolProvider);
this._register('vscode.executeCompletionItemProvider', this._executeCompletionItemProvider);
this._register('vscode.executeCodeActionProvider', this._executeCodeActionProvider);
}
private _register(id: string, callback: (...args: any[]) => any): void {
......@@ -201,4 +202,17 @@ export class ExtHostLanguageFeatureCommands {
}
});
}
private _executeCodeActionProvider(resource: URI, range: types.Range): Thenable<vscode.Command[]> {
const args = {
resource,
range: typeConverters.fromRange(range)
};
return this._commands.executeCommand<IQuickFix2[]>('_executeCodeActionProvider', args).then(value => {
if (Array.isArray(value)) {
// TODO@joh this isn't proper!
return value.map(quickFix => ({ title: quickFix.label }));
}
});
}
}
\ No newline at end of file
......@@ -255,4 +255,25 @@ suite('ExtHostLanguageFeatureCommands', function() {
});
});
});
// --- quickfix
test('QuickFix, back and forth', function(done) {
disposables.push(extHost.registerCodeActionProvider(defaultSelector, <vscode.CodeActionProvider>{
provideCodeActions(): any {
return [{ command: 'testing', title: 'Title', arguments: [1, 2, true] }];
}
}));
threadService.sync().then(() => {
commands.executeCommand<vscode.Command[]>('vscode.executeCodeActionProvider', model.getAssociatedResource(), new types.Range(0, 0, 1, 1)).then(value => {
assert.equal(value.length, 1);
let [first] = value;
assert.equal(first.title, 'Title');
// assert.equal(first.command, 'testing');
// assert.deepEqual(first.arguments, [1, 2, true]);
done();
});
});
});
});
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册