diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 60ecb3ee816..b9cda69f28b 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -931,7 +931,7 @@ export interface RenameContext { export interface RenameProvider { provideRenameEdits(model: model.ITextModel, position: Position, newName: string, token: CancellationToken): WorkspaceEdit | Thenable; - resolveRenameContext?(model: model.ITextModel, position: Position, token: CancellationToken): RenameContext | Thenable; + resolveRenameLocation?(model: model.ITextModel, position: Position, token: CancellationToken): RenameContext | Thenable; } diff --git a/src/vs/editor/contrib/rename/rename.ts b/src/vs/editor/contrib/rename/rename.ts index 487be5c5492..70276c0113e 100644 --- a/src/vs/editor/contrib/rename/rename.ts +++ b/src/vs/editor/contrib/rename/rename.ts @@ -52,8 +52,8 @@ class RenameSkeleton { let [provider] = this._provider; let information: RenameContext; - if (provider.resolveRenameContext) { - information = await asWinJsPromise(token => provider.resolveRenameContext(this.model, this.position, token)); + if (provider.resolveRenameLocation) { + information = await asWinJsPromise(token => provider.resolveRenameLocation(this.model, this.position, token)); } if (!information) { diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index e3c8e83df93..59bd653eb66 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4993,7 +4993,7 @@ declare namespace monaco.languages { export interface RenameProvider { provideRenameEdits(model: editor.ITextModel, position: Position, newName: string, token: CancellationToken): WorkspaceEdit | Thenable; - resolveRenameContext?(model: editor.ITextModel, position: Position, token: CancellationToken): RenameContext | Thenable; + resolveRenameLocation?(model: editor.ITextModel, position: Position, token: CancellationToken): RenameContext | Thenable; } export interface Command { diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 52bda5f91bc..371ccf3eeb6 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -435,18 +435,25 @@ declare module 'vscode' { //#region Joh: rename context - export class RenameContext { - range: Range; + export interface RenameContext { + range?: Range; newName?: string; - constructor(range: Range, newName?: string); + message?: string; } export interface RenameProvider2 extends RenameProvider { /** - * Optional function to resolve and validate a rename location. + * Optional function for resolving and validating a position at which rename is + * being carried out. + * + * @param document The document in which rename will be invoked. + * @param position The position at which rename will be invoked. + * @param token A cancellation token. + * @return A `RenameContext` with more information. The lack of a result can signaled by returning `undefined` or `null`. */ - resolveRenameContext?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; + resolveRenameLocation?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; + } //#endregion diff --git a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts index abb4db5246d..c4c01b90d41 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts @@ -250,13 +250,14 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha // --- rename - $registerRenameSupport(handle: number, selector: ISerializedDocumentFilter[], supportsResolveInitialValues: boolean): void { + $registerRenameSupport(handle: number, selector: ISerializedDocumentFilter[], supportResolveLocation: boolean): void { + this._registrations[handle] = modes.RenameProviderRegistry.register(toLanguageSelector(selector), { provideRenameEdits: (model: ITextModel, position: EditorPosition, newName: string, token: CancellationToken): Thenable => { return wireCancellationToken(token, this._proxy.$provideRenameEdits(handle, model.uri, position, newName)).then(reviveWorkspaceEditDto); }, - resolveRenameContext: supportsResolveInitialValues - ? (model: ITextModel, position: EditorPosition, token: CancellationToken): Thenable => wireCancellationToken(token, this._proxy.$resolveRenameContext(handle, model.uri, position)) + resolveRenameLocation: supportResolveLocation + ? (model: ITextModel, position: EditorPosition, token: CancellationToken): Thenable => wireCancellationToken(token, this._proxy.$resolveRenameLocation(handle, model.uri, position)) : undefined }); } diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 4d1319843ec..e72140753bc 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -616,7 +616,6 @@ export function createApiFactory( ParameterInformation: extHostTypes.ParameterInformation, Position: extHostTypes.Position, Range: extHostTypes.Range, - RenameContext: extHostTypes.RenameContext, Selection: extHostTypes.Selection, SignatureHelp: extHostTypes.SignatureHelp, SignatureInformation: extHostTypes.SignatureInformation, diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index c843f1f02b0..1c38172c023 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -699,7 +699,7 @@ export interface ExtHostLanguageFeaturesShape { $resolveWorkspaceSymbol(handle: number, symbol: SymbolInformationDto): TPromise; $releaseWorkspaceSymbols(handle: number, id: number): void; $provideRenameEdits(handle: number, resource: UriComponents, position: IPosition, newName: string): TPromise; - $resolveRenameContext(handle: number, resource: UriComponents, position: IPosition): TPromise; + $resolveRenameLocation(handle: number, resource: UriComponents, position: IPosition): TPromise; $provideCompletionItems(handle: number, resource: UriComponents, position: IPosition, context: modes.SuggestContext): TPromise; $resolveCompletionItem(handle: number, resource: UriComponents, position: IPosition, suggestion: modes.ISuggestion): TPromise; $releaseCompletionItems(handle: number, id: number): void; diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index 25d94916d2c..25ae4ba089a 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -467,7 +467,7 @@ class NavigateTypeAdapter { class RenameAdapter { static supportsResolving(provider: vscode.RenameProvider2): boolean { - return typeof provider.resolveRenameContext === 'function'; + return typeof provider.resolveRenameLocation === 'function'; } private _documents: ExtHostDocuments; @@ -506,20 +506,20 @@ class RenameAdapter { }); } - resolveRenameContext(resource: URI, position: IPosition): TPromise { - if (typeof this._provider.resolveRenameContext !== 'function') { + resolveRenameLocation(resource: URI, position: IPosition): TPromise { + if (typeof this._provider.resolveRenameLocation !== 'function') { return TPromise.as(undefined); } let doc = this._documents.getDocumentData(resource).document; let pos = TypeConverters.toPosition(position); - return asWinJsPromise(token => this._provider.resolveRenameContext(doc, pos, token)).then(context => { + return asWinJsPromise(token => this._provider.resolveRenameLocation(doc, pos, token)).then(context => { if (!context) { return undefined; } - if (!context.range.contains(pos)) { - console.warn('INVALID rename information, must contain the request-position'); + if (context.range && (!context.range.isSingleLine || context.range.start.line !== pos.line)) { + console.warn('INVALID rename context, range must be single line and on the same line'); return undefined; } return { @@ -1092,8 +1092,8 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { return this._withAdapter(handle, RenameAdapter, adapter => adapter.provideRenameEdits(URI.revive(resource), position, newName)); } - $resolveRenameContext(handle: number, resource: URI, position: IPosition): TPromise { - return this._withAdapter(handle, RenameAdapter, adapter => adapter.resolveRenameContext(resource, position)); + $resolveRenameLocation(handle: number, resource: URI, position: IPosition): TPromise { + return this._withAdapter(handle, RenameAdapter, adapter => adapter.resolveRenameLocation(resource, position)); } // --- suggestion diff --git a/src/vs/workbench/api/node/extHostTypes.ts b/src/vs/workbench/api/node/extHostTypes.ts index 668c6aa9a4c..cb0319e4855 100644 --- a/src/vs/workbench/api/node/extHostTypes.ts +++ b/src/vs/workbench/api/node/extHostTypes.ts @@ -591,16 +591,6 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit { } } -export class RenameContext { - range: Range; - newName?: string; - - constructor(range: Range, newName?: string) { - this.range = range; - this.newName = newName; - } -} - export class SnippetString { static isSnippetString(thing: any): thing is SnippetString {