diff --git a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts index d60034d69a21947b5d1e9b02fc22c0b663acf8a3..3fbe9db82992bf79646e94d571debe41e64957c9 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts @@ -263,11 +263,14 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha // --- rename - $registerRenameSupport(handle: number, selector: vscode.DocumentSelector): void { + $registerRenameSupport(handle: number, selector: vscode.DocumentSelector, supportsResolveInitialValues: 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(MainThreadLanguageFeatures._reviveWorkspaceEditDto); - } + }, + resolveInitialRenameValue: supportsResolveInitialValues + ? (model: ITextModel, position: EditorPosition, token: CancellationToken): Thenable => wireCancellationToken(token, this._proxy.$resolveInitialRenameValue(handle, model.uri, position)) + : undefined }); } diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index a08706a7e6bb276238386dfa863d5c35d793f30a..5c85df1a88cd795c44e20223c5a9386d48fcf41f 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -292,7 +292,7 @@ export interface MainThreadLanguageFeaturesShape extends IDisposable { $registerRangeFormattingSupport(handle: number, selector: vscode.DocumentSelector): void; $registerOnTypeFormattingSupport(handle: number, selector: vscode.DocumentSelector, autoFormatTriggerCharacters: string[]): void; $registerNavigateTypeSupport(handle: number): void; - $registerRenameSupport(handle: number, selector: vscode.DocumentSelector): void; + $registerRenameSupport(handle: number, selector: vscode.DocumentSelector, supportsResolveInitialValues: boolean): void; $registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[], supportsResolveDetails: boolean): void; $registerSignatureHelpProvider(handle: number, selector: vscode.DocumentSelector, triggerCharacter: string[]): void; $registerDocumentLinkProvider(handle: number, selector: vscode.DocumentSelector): void; @@ -659,6 +659,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; + $resolveInitialRenameValue(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 37ac8015683b0b3d163a2504bbe6afee63625a14..17584f1cb687bc31a022d363b32e36898519f9af 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -464,6 +464,10 @@ class NavigateTypeAdapter { class RenameAdapter { + static supportsResolving(provider: vscode.RenameProvider): boolean { + return typeof provider.resolveInitialRenameValue === 'function'; + } + private _documents: ExtHostDocuments; private _provider: vscode.RenameProvider; @@ -499,6 +503,22 @@ class RenameAdapter { } }); } + + resolveInitialRenameValue(resource: URI, position: IPosition) : TPromise { + if (typeof this._provider.resolveInitialRenameValue !== 'function') { + return TPromise.as(undefined); + } + + let doc = this._documents.getDocumentData(resource).document; + let pos = TypeConverters.toPosition(position); + + return asWinJsPromise(token => this._provider.resolveInitialRenameValue(doc, pos, token)).then((value) => { + return { + range: TypeConverters.fromRange(value.range), + text: value.text + }; + }); + } } @@ -1003,7 +1023,7 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { registerRenameProvider(selector: vscode.DocumentSelector, provider: vscode.RenameProvider): vscode.Disposable { const handle = this._addNewAdapter(new RenameAdapter(this._documents, provider)); - this._proxy.$registerRenameSupport(handle, selector); + this._proxy.$registerRenameSupport(handle, selector, RenameAdapter.supportsResolving(provider)); return this._createDisposable(handle); } @@ -1011,6 +1031,10 @@ export class ExtHostLanguageFeatures implements ExtHostLanguageFeaturesShape { return this._withAdapter(handle, RenameAdapter, adapter => adapter.provideRenameEdits(URI.revive(resource), position, newName)); } + $resolveInitialRenameValue(handle: number, resource: URI, position: IPosition): TPromise { + return this._withAdapter(handle, RenameAdapter, adapter => adapter.resolveInitialRenameValue(resource, position)); + } + // --- suggestion registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, triggerCharacters: string[]): vscode.Disposable {