Selaa lähdekoodia

Extract a common `DocumentColorAdapter`

Alex Dima 3 vuotta sitten
vanhempi
commit
8d7bf2ad76

+ 69 - 0
src/common/lspLanguageFeatures.ts

@@ -833,3 +833,72 @@ function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.Fo
 }
 
 //#endregion
+
+//#region DocumentColorAdapter
+
+export interface ILanguageWorkerWithDocumentColors {
+	findDocumentColors(uri: string): Promise<lsTypes.ColorInformation[]>;
+	getColorPresentations(
+		uri: string,
+		color: lsTypes.Color,
+		range: lsTypes.Range
+	): Promise<lsTypes.ColorPresentation[]>;
+}
+
+export class DocumentColorAdapter<T extends ILanguageWorkerWithDocumentColors>
+	implements languages.DocumentColorProvider
+{
+	constructor(private readonly _worker: WorkerAccessor<T>) {}
+
+	public provideDocumentColors(
+		model: editor.IReadOnlyModel,
+		token: CancellationToken
+	): Promise<languages.IColorInformation[] | undefined> {
+		const resource = model.uri;
+
+		return this._worker(resource)
+			.then((worker) => worker.findDocumentColors(resource.toString()))
+			.then((infos) => {
+				if (!infos) {
+					return;
+				}
+				return infos.map((item) => ({
+					color: item.color,
+					range: toRange(item.range)
+				}));
+			});
+	}
+
+	public provideColorPresentations(
+		model: editor.IReadOnlyModel,
+		info: languages.IColorInformation,
+		token: CancellationToken
+	): Promise<languages.IColorPresentation[] | undefined> {
+		const resource = model.uri;
+
+		return this._worker(resource)
+			.then((worker) =>
+				worker.getColorPresentations(resource.toString(), info.color, fromRange(info.range))
+			)
+			.then((presentations) => {
+				if (!presentations) {
+					return;
+				}
+				return presentations.map((presentation) => {
+					let item: languages.IColorPresentation = {
+						label: presentation.label
+					};
+					if (presentation.textEdit) {
+						item.textEdit = toTextEdit(presentation.textEdit);
+					}
+					if (presentation.additionalTextEdits) {
+						item.additionalTextEdits =
+							presentation.additionalTextEdits.map<languages.TextEdit>(toTextEdit);
+					}
+					return item;
+				});
+			});
+	}
+}
+
+//#endregion

+ 1 - 1
src/css/cssMode.ts

@@ -79,7 +79,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 			providers.push(
 				languages.registerColorProvider(
 					languageId,
-					new languageFeatures.DocumentColorAdapter(worker)
+					new languageFeatures.CSSDocumentColorAdapter(worker)
 				)
 			);
 		}

+ 3 - 56
src/css/languageFeatures.ts

@@ -11,15 +11,14 @@ import {
 	DiagnosticsAdapter,
 	fromPosition,
 	toRange,
-	toTextEdit,
-	fromRange,
 	CompletionAdapter,
 	HoverAdapter,
 	DocumentHighlightAdapter,
 	DefinitionAdapter,
 	ReferenceAdapter,
 	RenameAdapter,
-	DocumentSymbolAdapter
+	DocumentSymbolAdapter,
+	DocumentColorAdapter
 } from '../common/lspLanguageFeatures';
 
 export interface WorkerAccessor {
@@ -50,59 +49,7 @@ export class CSSRenameAdapter extends RenameAdapter<CSSWorker> {}
 
 export class CSSDocumentSymbolAdapter extends DocumentSymbolAdapter<CSSWorker> {}
 
-export class DocumentColorAdapter implements languages.DocumentColorProvider {
-	constructor(private _worker: WorkerAccessor) {}
-
-	public provideDocumentColors(
-		model: editor.IReadOnlyModel,
-		token: CancellationToken
-	): Promise<languages.IColorInformation[] | undefined> {
-		const resource = model.uri;
-
-		return this._worker(resource)
-			.then((worker) => worker.findDocumentColors(resource.toString()))
-			.then((infos) => {
-				if (!infos) {
-					return;
-				}
-				return infos.map((item) => ({
-					color: item.color,
-					range: toRange(item.range)
-				}));
-			});
-	}
-
-	public provideColorPresentations(
-		model: editor.IReadOnlyModel,
-		info: languages.IColorInformation,
-		token: CancellationToken
-	): Promise<languages.IColorPresentation[] | undefined> {
-		const resource = model.uri;
-
-		return this._worker(resource)
-			.then((worker) =>
-				worker.getColorPresentations(resource.toString(), info.color, fromRange(info.range))
-			)
-			.then((presentations) => {
-				if (!presentations) {
-					return;
-				}
-				return presentations.map((presentation) => {
-					let item: languages.IColorPresentation = {
-						label: presentation.label
-					};
-					if (presentation.textEdit) {
-						item.textEdit = toTextEdit(presentation.textEdit);
-					}
-					if (presentation.additionalTextEdits) {
-						item.additionalTextEdits =
-							presentation.additionalTextEdits.map<languages.TextEdit>(toTextEdit);
-					}
-					return item;
-				});
-			});
-	}
-}
+export class CSSDocumentColorAdapter extends DocumentColorAdapter<CSSWorker> {}
 
 export class FoldingRangeAdapter implements languages.FoldingRangeProvider {
 	constructor(private _worker: WorkerAccessor) {}

+ 1 - 10
src/html/languageFeatures.ts

@@ -5,19 +5,10 @@
 
 import type { HTMLWorker } from './htmlWorker';
 import * as lsTypes from 'vscode-languageserver-types';
-import {
-	languages,
-	editor,
-	Uri,
-	Position,
-	Range,
-	CancellationToken
-} from '../fillers/monaco-editor-core';
+import { languages, editor, Uri, Position, CancellationToken } from '../fillers/monaco-editor-core';
 import {
 	fromPosition,
 	toRange,
-	toTextEdit,
-	fromRange,
 	CompletionAdapter,
 	HoverAdapter,
 	DocumentHighlightAdapter,

+ 1 - 1
src/json/jsonMode.ts

@@ -70,7 +70,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 			providers.push(
 				languages.registerColorProvider(
 					languageId,
-					new languageFeatures.DocumentColorAdapter(worker)
+					new languageFeatures.JSONDocumentColorAdapter(worker)
 				)
 			);
 		}

+ 4 - 64
src/json/languageFeatures.ts

@@ -6,25 +6,17 @@
 import { LanguageServiceDefaults } from './monaco.contribution';
 import type { JSONWorker } from './jsonWorker';
 import * as lsTypes from 'vscode-languageserver-types';
-import {
-	languages,
-	editor,
-	Uri,
-	Position,
-	Range,
-	CancellationToken
-} from '../fillers/monaco-editor-core';
+import { languages, editor, Uri, Position, CancellationToken } from '../fillers/monaco-editor-core';
 import {
 	DiagnosticsAdapter,
 	fromPosition,
 	toRange,
-	toTextEdit,
-	fromRange,
 	CompletionAdapter,
 	HoverAdapter,
 	DocumentSymbolAdapter,
 	DocumentFormattingEditProvider,
-	DocumentRangeFormattingEditProvider
+	DocumentRangeFormattingEditProvider,
+	DocumentColorAdapter
 } from '../common/lspLanguageFeatures';
 
 export interface WorkerAccessor {
@@ -68,59 +60,7 @@ export class JSONDocumentFormattingEditProvider extends DocumentFormattingEditPr
 
 export class JSONDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<JSONWorker> {}
 
-export class DocumentColorAdapter implements languages.DocumentColorProvider {
-	constructor(private _worker: WorkerAccessor) {}
-
-	public provideDocumentColors(
-		model: editor.IReadOnlyModel,
-		token: CancellationToken
-	): Promise<languages.IColorInformation[] | undefined> {
-		const resource = model.uri;
-
-		return this._worker(resource)
-			.then((worker) => worker.findDocumentColors(resource.toString()))
-			.then((infos) => {
-				if (!infos) {
-					return;
-				}
-				return infos.map((item) => ({
-					color: item.color,
-					range: toRange(item.range)
-				}));
-			});
-	}
-
-	public provideColorPresentations(
-		model: editor.IReadOnlyModel,
-		info: languages.IColorInformation,
-		token: CancellationToken
-	): Promise<languages.IColorPresentation[] | undefined> {
-		const resource = model.uri;
-
-		return this._worker(resource)
-			.then((worker) =>
-				worker.getColorPresentations(resource.toString(), info.color, fromRange(info.range))
-			)
-			.then((presentations) => {
-				if (!presentations) {
-					return;
-				}
-				return presentations.map((presentation) => {
-					let item: languages.IColorPresentation = {
-						label: presentation.label
-					};
-					if (presentation.textEdit) {
-						item.textEdit = toTextEdit(presentation.textEdit);
-					}
-					if (presentation.additionalTextEdits) {
-						item.additionalTextEdits =
-							presentation.additionalTextEdits.map<languages.TextEdit>(toTextEdit);
-					}
-					return item;
-				});
-			});
-	}
-}
+export class JSONDocumentColorAdapter extends DocumentColorAdapter<JSONWorker> {}
 
 export class FoldingRangeAdapter implements languages.FoldingRangeProvider {
 	constructor(private _worker: WorkerAccessor) {}