diff --git a/src/vs/editor/contrib/codelens/common/codelens.ts b/src/vs/editor/contrib/codelens/common/codelens.ts index cd2da75541981d9da6f68e5ebbbc0d03bfaf056c..09dda5ea9c4497999696284f2d0e8ce5e5438ae9 100644 --- a/src/vs/editor/contrib/codelens/common/codelens.ts +++ b/src/vs/editor/contrib/codelens/common/codelens.ts @@ -5,13 +5,15 @@ 'use strict'; -import {onUnexpectedError} from 'vs/base/common/errors'; +import {onUnexpectedError, illegalArgument} from 'vs/base/common/errors'; import URI from 'vs/base/common/uri'; import {IAction, Action} from 'vs/base/common/actions'; +import {IModelService} from 'vs/editor/common/services/modelService'; import {TPromise} from 'vs/base/common/winjs.base'; import {IModel, IRange, IPosition} from 'vs/editor/common/editorCommon'; import {Range} from 'vs/editor/common/core/range'; import {ICodeLensSupport, ICodeLensSymbol, ICommand} from 'vs/editor/common/modes'; +import {CommonEditorRegistry} from 'vs/editor/common/editorCommonExtensions'; import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry'; export const CodeLensRegistry = new LanguageFeatureRegistry('codeLensSupport'); @@ -21,7 +23,7 @@ export interface ICodeLensData { support: ICodeLensSupport; } -export function getCodeLensData(model: IModel) { +export function getCodeLensData(model: IModel):TPromise { const symbols: ICodeLensData[] = []; const promises = CodeLensRegistry.all(model).map(support => { @@ -38,4 +40,19 @@ export function getCodeLensData(model: IModel) { }); return TPromise.join(promises).then(() => symbols); -} \ No newline at end of file +} + +CommonEditorRegistry.registerLanguageCommand('_executeCodeLensProvider', function(accessor, args) { + + const {resource} = args; + if (!URI.isURI(resource)) { + throw illegalArgument(); + } + + const model = accessor.get(IModelService).getModel(resource); + if (!model) { + throw illegalArgument(); + } + + return getCodeLensData(model); +}); \ No newline at end of file diff --git a/src/vs/workbench/api/common/extHostLanguageFeatureCommands.ts b/src/vs/workbench/api/common/extHostLanguageFeatureCommands.ts index b0c82ee65c384bb4350a086294d57ff5540e2eb6..68452f1d16c2661ceefd7b9a5704dd0e0ac3b3b1 100644 --- a/src/vs/workbench/api/common/extHostLanguageFeatureCommands.ts +++ b/src/vs/workbench/api/common/extHostLanguageFeatureCommands.ts @@ -34,9 +34,8 @@ import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegis import {NavigateTypesSupportRegistry, INavigateTypesSupport, ITypeBearing} from 'vs/workbench/parts/search/common/search' import {RenameRegistry} from 'vs/editor/contrib/rename/common/rename'; import {FormatRegistry, FormatOnTypeRegistry} from 'vs/editor/contrib/format/common/format'; -import {CodeLensRegistry} from 'vs/editor/contrib/codelens/common/codelens'; -import {ParameterHintsRegistry} from 'vs/editor/contrib/parameterHints/common/parameterHints'; -import {SuggestRegistry} from 'vs/editor/contrib/suggest/common/suggest'; +import {ICodeLensData} from 'vs/editor/contrib/codelens/common/codelens'; + // vscode.executeWorkspaceSymbolProvider // vscode.executeDefinitionProvider @@ -48,8 +47,8 @@ import {SuggestRegistry} from 'vs/editor/contrib/suggest/common/suggest'; // vscode.executeDocumentSymbolProvider // vscode.executeCompletionItemProvider // vscode.executeCodeActionProvider - // vscode.executeCodeLensProvider + // vscode.executeFormatDocumentProvider // vscode.executeFormatRangeProvider // vscode.executeFormatOnTypeProvider @@ -72,6 +71,7 @@ export class ExtHostLanguageFeatureCommands { this._register('vscode.executeDocumentSymbolProvider', this._executeDocumentSymbolProvider); this._register('vscode.executeCompletionItemProvider', this._executeCompletionItemProvider); this._register('vscode.executeCodeActionProvider', this._executeCodeActionProvider); + this._register('vscode.executeCodeLensProvider', this._executeCodeLensProvider); } private _register(id: string, callback: (...args: any[]) => any): void { @@ -215,4 +215,15 @@ export class ExtHostLanguageFeatureCommands { } }); } + + private _executeCodeLensProvider(resource: URI): Thenable{ + const args = { + resource + }; + return this._commands._executeContributedCommand('_executeCodeLensProvider', args).then(value => { + if (Array.isArray(value)) { + return value.map(item => new types.CodeLens(typeConverters.toRange(item.symbol.range))); + } + }); + } } \ No newline at end of file