diff --git a/src/common/lspLanguageFeatures.ts b/src/common/lspLanguageFeatures.ts index dce43cc4..fcaf8f62 100644 --- a/src/common/lspLanguageFeatures.ts +++ b/src/common/lspLanguageFeatures.ts @@ -589,3 +589,60 @@ export class ReferenceAdapter } //#endregion + +//#region RenameAdapter + +export interface ILanguageWorkerWithRename { + doRename( + uri: string, + position: lsTypes.Position, + newName: string + ): Promise; +} + +export class RenameAdapter + implements languages.RenameProvider +{ + constructor(private readonly _worker: WorkerAccessor) {} + + provideRenameEdits( + model: editor.IReadOnlyModel, + position: Position, + newName: string, + token: CancellationToken + ): Promise { + const resource = model.uri; + + return this._worker(resource) + .then((worker) => { + return worker.doRename(resource.toString(), fromPosition(position), newName); + }) + .then((edit) => { + return toWorkspaceEdit(edit); + }); + } +} + +function toWorkspaceEdit(edit: lsTypes.WorkspaceEdit): languages.WorkspaceEdit { + if (!edit || !edit.changes) { + return void 0; + } + let resourceEdits: languages.WorkspaceTextEdit[] = []; + for (let uri in edit.changes) { + const _uri = Uri.parse(uri); + for (let e of edit.changes[uri]) { + resourceEdits.push({ + resource: _uri, + edit: { + range: toRange(e.range), + text: e.newText + } + }); + } + } + return { + edits: resourceEdits + }; +} + +//#endregion diff --git a/src/css/cssMode.ts b/src/css/cssMode.ts index 5a70ec17..018ee8b2 100644 --- a/src/css/cssMode.ts +++ b/src/css/cssMode.ts @@ -72,7 +72,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { } if (modeConfiguration.rename) { providers.push( - languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker)) + languages.registerRenameProvider(languageId, new languageFeatures.CSSRenameAdapter(worker)) ); } if (modeConfiguration.colors) { diff --git a/src/css/languageFeatures.ts b/src/css/languageFeatures.ts index 8a185583..d3fe9c26 100644 --- a/src/css/languageFeatures.ts +++ b/src/css/languageFeatures.ts @@ -17,7 +17,8 @@ import { HoverAdapter, DocumentHighlightAdapter, DefinitionAdapter, - ReferenceAdapter + ReferenceAdapter, + RenameAdapter } from '../common/lspLanguageFeatures'; export interface WorkerAccessor { @@ -44,50 +45,7 @@ export class CSSDefinitionAdapter extends DefinitionAdapter {} export class CSSReferenceAdapter extends ReferenceAdapter {} -// --- rename ------ - -function toWorkspaceEdit(edit: lsTypes.WorkspaceEdit): languages.WorkspaceEdit { - if (!edit || !edit.changes) { - return void 0; - } - let resourceEdits: languages.WorkspaceTextEdit[] = []; - for (let uri in edit.changes) { - const _uri = Uri.parse(uri); - for (let e of edit.changes[uri]) { - resourceEdits.push({ - resource: _uri, - edit: { - range: toRange(e.range), - text: e.newText - } - }); - } - } - return { - edits: resourceEdits - }; -} - -export class RenameAdapter implements languages.RenameProvider { - constructor(private _worker: WorkerAccessor) {} - - provideRenameEdits( - model: editor.IReadOnlyModel, - position: Position, - newName: string, - token: CancellationToken - ): Promise { - const resource = model.uri; - - return this._worker(resource) - .then((worker) => { - return worker.doRename(resource.toString(), fromPosition(position), newName); - }) - .then((edit) => { - return toWorkspaceEdit(edit); - }); - } -} +export class CSSRenameAdapter extends RenameAdapter {} // --- document symbols ------ diff --git a/src/html/htmlMode.ts b/src/html/htmlMode.ts index 47c33ae1..b3998b69 100644 --- a/src/html/htmlMode.ts +++ b/src/html/htmlMode.ts @@ -42,7 +42,7 @@ export function setupMode1(defaults: LanguageServiceDefaults): void { languageId, new languageFeatures.SelectionRangeAdapter(worker) ); - languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker)); + languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker)); // only html if (languageId === 'html') { @@ -109,7 +109,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable { } if (modeConfiguration.rename) { providers.push( - languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker)) + languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker)) ); } if (modeConfiguration.foldingRanges) { diff --git a/src/html/languageFeatures.ts b/src/html/languageFeatures.ts index b08f6f65..ce13d3ab 100644 --- a/src/html/languageFeatures.ts +++ b/src/html/languageFeatures.ts @@ -20,7 +20,8 @@ import { fromRange, CompletionAdapter, HoverAdapter, - DocumentHighlightAdapter + DocumentHighlightAdapter, + RenameAdapter } from '../common/lspLanguageFeatures'; export interface WorkerAccessor { @@ -35,52 +36,9 @@ export class HTMLCompletionAdapter extends CompletionAdapter { export class HTMLHoverAdapter extends HoverAdapter {} -// --- document highlights ------ - export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter {} -function toWorkspaceEdit(edit: lsTypes.WorkspaceEdit): languages.WorkspaceEdit { - if (!edit || !edit.changes) { - return void 0; - } - let resourceEdits: languages.WorkspaceTextEdit[] = []; - for (let uri in edit.changes) { - const _uri = Uri.parse(uri); - for (let e of edit.changes[uri]) { - resourceEdits.push({ - resource: _uri, - edit: { - range: toRange(e.range), - text: e.newText - } - }); - } - } - return { - edits: resourceEdits - }; -} - -export class RenameAdapter implements languages.RenameProvider { - constructor(private _worker: WorkerAccessor) {} - - provideRenameEdits( - model: editor.IReadOnlyModel, - position: Position, - newName: string, - token: CancellationToken - ): Promise { - const resource = model.uri; - - return this._worker(resource) - .then((worker) => { - return worker.doRename(resource.toString(), fromPosition(position), newName); - }) - .then((edit) => { - return toWorkspaceEdit(edit); - }); - } -} +export class HTMLRenameAdapter extends RenameAdapter {} // --- document symbols ------