diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index b1ca5266c4f..60976131c02 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -2664,11 +2664,6 @@ declare module 'vscode' { appendVariable(name: string, defaultValue: string | ((snippet: SnippetString) => any)): SnippetString; } - export interface RenameInitialValue { - range: Range - text?: string - } - /** * The rename provider interface defines the contract between extensions and * the [rename](https://code.visualstudio.com/docs/editor/editingevolved#_rename-symbol)-feature. @@ -2687,8 +2682,6 @@ declare module 'vscode' { * signaled by returning `undefined` or `null`. */ provideRenameEdits(document: TextDocument, position: Position, newName: string, token: CancellationToken): ProviderResult; - - resolveInitialRenameValue?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; } /** diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index ef2c05f37c6..802c06809ff 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -394,4 +394,16 @@ declare module 'vscode' { */ logger: Logger; } + + export interface RenameInitialValue { + range: Range; + text?: string; + } + + export namespace languages { + + export interface RenameProvider2 extends RenameProvider { + resolveInitialRenameValue?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; + } + } } diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 2336cf37321..7f82fdd7579 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -261,7 +261,7 @@ export function createApiFactory( return extHostLanguageFeatures.registerReferenceProvider(selector, provider); }, registerRenameProvider(selector: vscode.DocumentSelector, provider: vscode.RenameProvider): vscode.Disposable { - return extHostLanguageFeatures.registerRenameProvider(selector, provider); + return extHostLanguageFeatures.registerRenameProvider(selector, provider, extension.enableProposedApi); }, registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider): vscode.Disposable { return extHostLanguageFeatures.registerDocumentSymbolProvider(selector, provider); diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 7bf9029a45e..c67a55d01b0 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -468,16 +468,20 @@ class NavigateTypeAdapter { } } +interface RenameProvider2 extends vscode.RenameProvider { + resolveInitialRenameValue?(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult; +} + class RenameAdapter { - static supportsResolving(provider: vscode.RenameProvider): boolean { + static supportsResolving(provider: RenameProvider2): boolean { return typeof provider.resolveInitialRenameValue === 'function'; } private _documents: ExtHostDocuments; - private _provider: vscode.RenameProvider; + private _provider: RenameProvider2; - constructor(documents: ExtHostDocuments, provider: vscode.RenameProvider) { + constructor(documents: ExtHostDocuments, provider: RenameProvider2) { this._documents = documents; this._provider = provider; } @@ -510,7 +514,7 @@ class RenameAdapter { }); } - resolveInitialRenameValue(resource: URI, position: IPosition) : TPromise { + resolveInitialRenameValue(resource: URI, position: IPosition): TPromise { if (typeof this._provider.resolveInitialRenameValue !== 'function') { return TPromise.as(undefined); } @@ -519,7 +523,7 @@ class RenameAdapter { let pos = TypeConverters.toPosition(position); return asWinJsPromise(token => this._provider.resolveInitialRenameValue(doc, pos, token)).then((value) => { - return { + return { range: TypeConverters.fromRange(value.range), text: value.text }; @@ -1028,9 +1032,9 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { // --- rename - registerRenameProvider(selector: vscode.DocumentSelector, provider: vscode.RenameProvider): vscode.Disposable { + registerRenameProvider(selector: vscode.DocumentSelector, provider: vscode.RenameProvider, canUseProposedApi = false): vscode.Disposable { const handle = this._addNewAdapter(new RenameAdapter(this._documents, provider)); - this._proxy.$registerRenameSupport(handle, selector, RenameAdapter.supportsResolving(provider)); + this._proxy.$registerRenameSupport(handle, selector, canUseProposedApi && RenameAdapter.supportsResolving(provider)); return this._createDisposable(handle); }