From e9d92ca9a75d52f48063f6315f946542c6df7aa3 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 13 Mar 2018 11:59:17 +0100 Subject: [PATCH] align names, add RenameContext-type #7340 --- src/vs/editor/common/modes.ts | 4 +-- src/vs/editor/contrib/rename/rename.ts | 10 +++--- src/vs/monaco.d.ts | 4 +-- src/vs/vscode.proposed.d.ts | 18 +++++++---- .../mainThreadLanguageFeatures.ts | 4 +-- src/vs/workbench/api/node/extHost.api.impl.ts | 1 + src/vs/workbench/api/node/extHost.protocol.ts | 2 +- .../api/node/extHostLanguageFeatures.ts | 32 ++++++++----------- src/vs/workbench/api/node/extHostTypes.ts | 12 ++++++- 9 files changed, 50 insertions(+), 37 deletions(-) diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index a2d82efbc34..da0dd75dee8 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -917,14 +917,14 @@ export interface WorkspaceEdit { rejectReason?: string; // TODO@joh, move to rename } -export interface RenameInformation { +export interface RenameContext { range: IRange; text: string; } export interface RenameProvider { provideRenameEdits(model: model.ITextModel, position: Position, newName: string, token: CancellationToken): WorkspaceEdit | Thenable; - resolveInitialRenameValue?(model: model.ITextModel, position: Position, token: CancellationToken): RenameInformation | Thenable; + resolveRenameContext?(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 1c4d070e66c..b0ec04924f4 100644 --- a/src/vs/editor/contrib/rename/rename.ts +++ b/src/vs/editor/contrib/rename/rename.ts @@ -23,7 +23,7 @@ import { ITextModelService } from 'vs/editor/common/services/resolverService'; import { optional } from 'vs/platform/instantiation/common/instantiation'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { asWinJsPromise } from 'vs/base/common/async'; -import { WorkspaceEdit, RenameProviderRegistry, RenameInformation, RenameProvider } from 'vs/editor/common/modes'; +import { WorkspaceEdit, RenameProviderRegistry, RenameContext, RenameProvider } from 'vs/editor/common/modes'; import { Position } from 'vs/editor/common/core/position'; import { alert } from 'vs/base/browser/ui/aria/aria'; import { Range } from 'vs/editor/common/core/range'; @@ -47,13 +47,13 @@ class RenameSkeleton { return this._provider.length > 0; } - async resolveRenameInformation(): TPromise { + async resolveRenameInformation(): TPromise { let [provider] = this._provider; - let information: RenameInformation; + let information: RenameContext; - if (provider.resolveInitialRenameValue) { - information = await asWinJsPromise(token => provider.resolveInitialRenameValue(this.model, this.position, token)); + if (provider.resolveRenameContext) { + information = await asWinJsPromise(token => provider.resolveRenameContext(this.model, this.position, token)); } if (!information) { diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 838a258058d..18bb21305c8 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -4964,14 +4964,14 @@ declare module monaco.languages { rejectReason?: string; } - export interface RenameInformation { + export interface RenameContext { range: IRange; text: string; } export interface RenameProvider { provideRenameEdits(model: editor.ITextModel, position: Position, newName: string, token: CancellationToken): WorkspaceEdit | Thenable; - resolveInitialRenameValue?(model: editor.ITextModel, position: Position, token: CancellationToken): RenameInformation | Thenable; + resolveRenameContext?(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 2962ace2b5b..d7022ba4788 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -348,9 +348,18 @@ declare module 'vscode' { logger: Logger; } - export interface RenameInitialValue { + export class RenameContext { range: Range; - text?: string; + newName?: string; + constructor(range: Range, newName?: string); + } + + export interface RenameProvider2 extends RenameProvider { + + /** + * Optional function to resolve and validate a rename location. + */ + resolveRenameContext?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; } export namespace languages { @@ -367,11 +376,8 @@ declare module 'vscode' { * @return A [disposable](#Disposable) that unregisters this provider when being disposed. */ export function registerFoldingProvider(selector: DocumentSelector, provider: FoldingProvider): Disposable; - - export interface RenameProvider2 extends RenameProvider { - resolveInitialRenameValue?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult; - } } + export interface FoldingProvider { /** * Returns a list of folding ranges or null if the provider does not want to participate or was cancelled. diff --git a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts index 28358d3f9ad..92337a5279e 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadLanguageFeatures.ts @@ -256,8 +256,8 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha provideRenameEdits: (model: ITextModel, position: EditorPosition, newName: string, token: CancellationToken): Thenable => { return wireCancellationToken(token, this._proxy.$provideRenameEdits(handle, model.uri, position, newName)).then(reviveWorkspaceEditDto); }, - resolveInitialRenameValue: supportsResolveInitialValues - ? (model: ITextModel, position: EditorPosition, token: CancellationToken): Thenable => wireCancellationToken(token, this._proxy.$resolveInitialRenameValue(handle, model.uri, position)) + resolveRenameContext: supportsResolveInitialValues + ? (model: ITextModel, position: EditorPosition, token: CancellationToken): Thenable => wireCancellationToken(token, this._proxy.$resolveRenameContext(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 e2d24ea802e..756aeb49e46 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -608,6 +608,7 @@ 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 0fedae0458f..7886fa45d2d 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -692,7 +692,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; + $resolveRenameContext(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 135dfdcc0b4..03a79218c7a 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -468,20 +468,16 @@ class NavigateTypeAdapter { } } -interface RenameProvider2 extends vscode.RenameProvider { - resolveInitialRenameValue?(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult; -} - class RenameAdapter { - static supportsResolving(provider: RenameProvider2): boolean { - return typeof provider.resolveInitialRenameValue === 'function'; + static supportsResolving(provider: vscode.RenameProvider2): boolean { + return typeof provider.resolveRenameContext === 'function'; } private _documents: ExtHostDocuments; - private _provider: RenameProvider2; + private _provider: vscode.RenameProvider2; - constructor(documents: ExtHostDocuments, provider: RenameProvider2) { + constructor(documents: ExtHostDocuments, provider: vscode.RenameProvider2) { this._documents = documents; this._provider = provider; } @@ -514,25 +510,25 @@ class RenameAdapter { }); } - resolveInitialRenameValue(resource: URI, position: IPosition): TPromise { - if (typeof this._provider.resolveInitialRenameValue !== 'function') { + resolveRenameContext(resource: URI, position: IPosition): TPromise { + if (typeof this._provider.resolveRenameContext !== '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 => { - if (!value) { + return asWinJsPromise(token => this._provider.resolveRenameContext(doc, pos, token)).then(context => { + if (!context) { return undefined; } - if (!value.range.contains(pos)) { + if (!context.range.contains(pos)) { console.warn('INVALID rename information, must contain the request-position'); return undefined; } - return { - range: TypeConverters.fromRange(value.range), - text: value.text || doc.getText(value.range) + return { + range: TypeConverters.fromRange(context.range), + text: context.newName || doc.getText(context.range) }; }); } @@ -1068,8 +1064,8 @@ 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)); + $resolveRenameContext(handle: number, resource: URI, position: IPosition): TPromise { + return this._withAdapter(handle, RenameAdapter, adapter => adapter.resolveRenameContext(resource, position)); } // --- suggestion diff --git a/src/vs/workbench/api/node/extHostTypes.ts b/src/vs/workbench/api/node/extHostTypes.ts index 58f3c80cb73..1f37fd92e25 100644 --- a/src/vs/workbench/api/node/extHostTypes.ts +++ b/src/vs/workbench/api/node/extHostTypes.ts @@ -591,6 +591,16 @@ 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 { @@ -1754,4 +1764,4 @@ export enum FoldingRangeType { Region = 'region' } -//#endregion \ No newline at end of file +//#endregion -- GitLab