Explorar o código

Extract a common `RenameAdapter`

Alex Dima %!s(int64=3) %!d(string=hai) anos
pai
achega
6e986e8f96

+ 57 - 0
src/common/lspLanguageFeatures.ts

@@ -589,3 +589,60 @@ export class ReferenceAdapter<T extends ILanguageWorkerWithReferences>
 }
 }
 
 
 //#endregion
 //#endregion
+
+//#region RenameAdapter
+
+export interface ILanguageWorkerWithRename {
+	doRename(
+		uri: string,
+		position: lsTypes.Position,
+		newName: string
+	): Promise<lsTypes.WorkspaceEdit>;
+}
+
+export class RenameAdapter<T extends ILanguageWorkerWithRename>
+	implements languages.RenameProvider
+{
+	constructor(private readonly _worker: WorkerAccessor<T>) {}
+
+	provideRenameEdits(
+		model: editor.IReadOnlyModel,
+		position: Position,
+		newName: string,
+		token: CancellationToken
+	): Promise<languages.WorkspaceEdit> {
+		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

+ 1 - 1
src/css/cssMode.ts

@@ -72,7 +72,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 		}
 		}
 		if (modeConfiguration.rename) {
 		if (modeConfiguration.rename) {
 			providers.push(
 			providers.push(
-				languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
+				languages.registerRenameProvider(languageId, new languageFeatures.CSSRenameAdapter(worker))
 			);
 			);
 		}
 		}
 		if (modeConfiguration.colors) {
 		if (modeConfiguration.colors) {

+ 3 - 45
src/css/languageFeatures.ts

@@ -17,7 +17,8 @@ import {
 	HoverAdapter,
 	HoverAdapter,
 	DocumentHighlightAdapter,
 	DocumentHighlightAdapter,
 	DefinitionAdapter,
 	DefinitionAdapter,
-	ReferenceAdapter
+	ReferenceAdapter,
+	RenameAdapter
 } from '../common/lspLanguageFeatures';
 } from '../common/lspLanguageFeatures';
 
 
 export interface WorkerAccessor {
 export interface WorkerAccessor {
@@ -44,50 +45,7 @@ export class CSSDefinitionAdapter extends DefinitionAdapter<CSSWorker> {}
 
 
 export class CSSReferenceAdapter extends ReferenceAdapter<CSSWorker> {}
 export class CSSReferenceAdapter extends ReferenceAdapter<CSSWorker> {}
 
 
-// --- 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<languages.WorkspaceEdit> {
-		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<CSSWorker> {}
 
 
 // --- document symbols ------
 // --- document symbols ------
 
 

+ 2 - 2
src/html/htmlMode.ts

@@ -42,7 +42,7 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
 		languageId,
 		languageId,
 		new languageFeatures.SelectionRangeAdapter(worker)
 		new languageFeatures.SelectionRangeAdapter(worker)
 	);
 	);
-	languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker));
+	languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker));
 
 
 	// only html
 	// only html
 	if (languageId === 'html') {
 	if (languageId === 'html') {
@@ -109,7 +109,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 		}
 		}
 		if (modeConfiguration.rename) {
 		if (modeConfiguration.rename) {
 			providers.push(
 			providers.push(
-				languages.registerRenameProvider(languageId, new languageFeatures.RenameAdapter(worker))
+				languages.registerRenameProvider(languageId, new languageFeatures.HTMLRenameAdapter(worker))
 			);
 			);
 		}
 		}
 		if (modeConfiguration.foldingRanges) {
 		if (modeConfiguration.foldingRanges) {

+ 3 - 45
src/html/languageFeatures.ts

@@ -20,7 +20,8 @@ import {
 	fromRange,
 	fromRange,
 	CompletionAdapter,
 	CompletionAdapter,
 	HoverAdapter,
 	HoverAdapter,
-	DocumentHighlightAdapter
+	DocumentHighlightAdapter,
+	RenameAdapter
 } from '../common/lspLanguageFeatures';
 } from '../common/lspLanguageFeatures';
 
 
 export interface WorkerAccessor {
 export interface WorkerAccessor {
@@ -35,52 +36,9 @@ export class HTMLCompletionAdapter extends CompletionAdapter<HTMLWorker> {
 
 
 export class HTMLHoverAdapter extends HoverAdapter<HTMLWorker> {}
 export class HTMLHoverAdapter extends HoverAdapter<HTMLWorker> {}
 
 
-// --- document highlights ------
-
 export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter<HTMLWorker> {}
 export class HTMLDocumentHighlightAdapter extends DocumentHighlightAdapter<HTMLWorker> {}
 
 
-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<languages.WorkspaceEdit> {
-		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<HTMLWorker> {}
 
 
 // --- document symbols ------
 // --- document symbols ------