Răsfoiți Sursa

Extract `DocumentFormattingEditProvider` and `DocumentRangeFormattingEditProvider`

Alex Dima 3 ani în urmă
părinte
comite
3cb8acd2e9

+ 70 - 0
src/common/lspLanguageFeatures.ts

@@ -763,3 +763,73 @@ export class DocumentLinkAdapter<T extends ILanguageWorkerWithDocumentLinks>
 }
 
 //#endregion
+
+//#region DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider
+
+export interface ILanguageWorkerWithFormat {
+	format(
+		uri: string,
+		range: lsTypes.Range | null,
+		options: lsTypes.FormattingOptions
+	): Promise<lsTypes.TextEdit[]>;
+}
+
+export class DocumentFormattingEditProvider<T extends ILanguageWorkerWithFormat>
+	implements languages.DocumentFormattingEditProvider
+{
+	constructor(private _worker: WorkerAccessor<T>) {}
+
+	public provideDocumentFormattingEdits(
+		model: editor.IReadOnlyModel,
+		options: languages.FormattingOptions,
+		token: CancellationToken
+	): Promise<languages.TextEdit[] | undefined> {
+		const resource = model.uri;
+
+		return this._worker(resource).then((worker) => {
+			return worker
+				.format(resource.toString(), null, fromFormattingOptions(options))
+				.then((edits) => {
+					if (!edits || edits.length === 0) {
+						return;
+					}
+					return edits.map<languages.TextEdit>(toTextEdit);
+				});
+		});
+	}
+}
+
+export class DocumentRangeFormattingEditProvider<T extends ILanguageWorkerWithFormat>
+	implements languages.DocumentRangeFormattingEditProvider
+{
+	constructor(private _worker: WorkerAccessor<T>) {}
+
+	public provideDocumentRangeFormattingEdits(
+		model: editor.IReadOnlyModel,
+		range: Range,
+		options: languages.FormattingOptions,
+		token: CancellationToken
+	): Promise<languages.TextEdit[] | undefined> {
+		const resource = model.uri;
+
+		return this._worker(resource).then((worker) => {
+			return worker
+				.format(resource.toString(), fromRange(range), fromFormattingOptions(options))
+				.then((edits) => {
+					if (!edits || edits.length === 0) {
+						return;
+					}
+					return edits.map<languages.TextEdit>(toTextEdit);
+				});
+		});
+	}
+}
+
+function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
+	return {
+		tabSize: options.tabSize,
+		insertSpaces: options.insertSpaces
+	};
+}
+
+//#endregion

+ 4 - 4
src/html/htmlMode.ts

@@ -48,11 +48,11 @@ export function setupMode1(defaults: LanguageServiceDefaults): void {
 	if (languageId === 'html') {
 		languages.registerDocumentFormattingEditProvider(
 			languageId,
-			new languageFeatures.DocumentFormattingEditProvider(worker)
+			new languageFeatures.HTMLDocumentFormattingEditProvider(worker)
 		);
 		languages.registerDocumentRangeFormattingEditProvider(
 			languageId,
-			new languageFeatures.DocumentRangeFormattingEditProvider(worker)
+			new languageFeatures.HTMLDocumentRangeFormattingEditProvider(worker)
 		);
 	}
 }
@@ -135,7 +135,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 			providers.push(
 				languages.registerDocumentFormattingEditProvider(
 					languageId,
-					new languageFeatures.DocumentFormattingEditProvider(worker)
+					new languageFeatures.HTMLDocumentFormattingEditProvider(worker)
 				)
 			);
 		}
@@ -143,7 +143,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 			providers.push(
 				languages.registerDocumentRangeFormattingEditProvider(
 					languageId,
-					new languageFeatures.DocumentRangeFormattingEditProvider(worker)
+					new languageFeatures.HTMLDocumentRangeFormattingEditProvider(worker)
 				)
 			);
 		}

+ 5 - 55
src/html/languageFeatures.ts

@@ -23,7 +23,9 @@ import {
 	DocumentHighlightAdapter,
 	RenameAdapter,
 	DocumentSymbolAdapter,
-	DocumentLinkAdapter
+	DocumentLinkAdapter,
+	DocumentFormattingEditProvider,
+	DocumentRangeFormattingEditProvider
 } from '../common/lspLanguageFeatures';
 
 export interface WorkerAccessor {
@@ -46,61 +48,9 @@ export class HTMLDocumentSymbolAdapter extends DocumentSymbolAdapter<HTMLWorker>
 
 export class HTMLDocumentLinkAdapter extends DocumentLinkAdapter<HTMLWorker> {}
 
-function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
-	return {
-		tabSize: options.tabSize,
-		insertSpaces: options.insertSpaces
-	};
-}
-
-export class DocumentFormattingEditProvider implements languages.DocumentFormattingEditProvider {
-	constructor(private _worker: WorkerAccessor) {}
-
-	public provideDocumentFormattingEdits(
-		model: editor.IReadOnlyModel,
-		options: languages.FormattingOptions,
-		token: CancellationToken
-	): Promise<languages.TextEdit[] | undefined> {
-		const resource = model.uri;
-
-		return this._worker(resource).then((worker) => {
-			return worker
-				.format(resource.toString(), null, fromFormattingOptions(options))
-				.then((edits) => {
-					if (!edits || edits.length === 0) {
-						return;
-					}
-					return edits.map<languages.TextEdit>(toTextEdit);
-				});
-		});
-	}
-}
-
-export class DocumentRangeFormattingEditProvider
-	implements languages.DocumentRangeFormattingEditProvider
-{
-	constructor(private _worker: WorkerAccessor) {}
+export class HTMLDocumentFormattingEditProvider extends DocumentFormattingEditProvider<HTMLWorker> {}
 
-	public provideDocumentRangeFormattingEdits(
-		model: editor.IReadOnlyModel,
-		range: Range,
-		options: languages.FormattingOptions,
-		token: CancellationToken
-	): Promise<languages.TextEdit[] | undefined> {
-		const resource = model.uri;
-
-		return this._worker(resource).then((worker) => {
-			return worker
-				.format(resource.toString(), fromRange(range), fromFormattingOptions(options))
-				.then((edits) => {
-					if (!edits || edits.length === 0) {
-						return;
-					}
-					return edits.map<languages.TextEdit>(toTextEdit);
-				});
-		});
-	}
-}
+export class HTMLDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<HTMLWorker> {}
 
 export class FoldingRangeAdapter implements languages.FoldingRangeProvider {
 	constructor(private _worker: WorkerAccessor) {}

+ 2 - 2
src/json/jsonMode.ts

@@ -30,7 +30,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 			providers.push(
 				languages.registerDocumentFormattingEditProvider(
 					languageId,
-					new languageFeatures.DocumentFormattingEditProvider(worker)
+					new languageFeatures.JSONDocumentFormattingEditProvider(worker)
 				)
 			);
 		}
@@ -38,7 +38,7 @@ export function setupMode(defaults: LanguageServiceDefaults): IDisposable {
 			providers.push(
 				languages.registerDocumentRangeFormattingEditProvider(
 					languageId,
-					new languageFeatures.DocumentRangeFormattingEditProvider(worker)
+					new languageFeatures.JSONDocumentRangeFormattingEditProvider(worker)
 				)
 			);
 		}

+ 5 - 55
src/json/languageFeatures.ts

@@ -22,7 +22,9 @@ import {
 	fromRange,
 	CompletionAdapter,
 	HoverAdapter,
-	DocumentSymbolAdapter
+	DocumentSymbolAdapter,
+	DocumentFormattingEditProvider,
+	DocumentRangeFormattingEditProvider
 } from '../common/lspLanguageFeatures';
 
 export interface WorkerAccessor {
@@ -62,61 +64,9 @@ export class JSONHoverAdapter extends HoverAdapter<JSONWorker> {}
 
 export class JSONDocumentSymbolAdapter extends DocumentSymbolAdapter<JSONWorker> {}
 
-function fromFormattingOptions(options: languages.FormattingOptions): lsTypes.FormattingOptions {
-	return {
-		tabSize: options.tabSize,
-		insertSpaces: options.insertSpaces
-	};
-}
-
-export class DocumentFormattingEditProvider implements languages.DocumentFormattingEditProvider {
-	constructor(private _worker: WorkerAccessor) {}
-
-	public provideDocumentFormattingEdits(
-		model: editor.IReadOnlyModel,
-		options: languages.FormattingOptions,
-		token: CancellationToken
-	): Promise<languages.TextEdit[] | undefined> {
-		const resource = model.uri;
-
-		return this._worker(resource).then((worker) => {
-			return worker
-				.format(resource.toString(), null, fromFormattingOptions(options))
-				.then((edits) => {
-					if (!edits || edits.length === 0) {
-						return;
-					}
-					return edits.map<languages.TextEdit>(toTextEdit);
-				});
-		});
-	}
-}
-
-export class DocumentRangeFormattingEditProvider
-	implements languages.DocumentRangeFormattingEditProvider
-{
-	constructor(private _worker: WorkerAccessor) {}
-
-	public provideDocumentRangeFormattingEdits(
-		model: editor.IReadOnlyModel,
-		range: Range,
-		options: languages.FormattingOptions,
-		token: CancellationToken
-	): Promise<languages.TextEdit[] | undefined> {
-		const resource = model.uri;
+export class JSONDocumentFormattingEditProvider extends DocumentFormattingEditProvider<JSONWorker> {}
 
-		return this._worker(resource).then((worker) => {
-			return worker
-				.format(resource.toString(), fromRange(range), fromFormattingOptions(options))
-				.then((edits) => {
-					if (!edits || edits.length === 0) {
-						return;
-					}
-					return edits.map<languages.TextEdit>(toTextEdit);
-				});
-		});
-	}
-}
+export class JSONDocumentRangeFormattingEditProvider extends DocumentRangeFormattingEditProvider<JSONWorker> {}
 
 export class DocumentColorAdapter implements languages.DocumentColorProvider {
 	constructor(private _worker: WorkerAccessor) {}