From cfafcbf24446674dfa286641f40c90e07f9aac7b Mon Sep 17 00:00:00 2001 From: Witalis Domitrz Date: Sat, 30 Aug 2025 14:01:33 +0100 Subject: [PATCH 1/2] support multiple languages --- src/extension.ts | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index be8df42..501ffd5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,7 +7,7 @@ import { runCommand } from './run-command' interface Formatter { command: string - language: string + language: string | string[] } export function activate(context: ExtensionContext) { @@ -42,27 +42,31 @@ export function activate(context: ExtensionContext) { break } - let disposable = languages.registerDocumentFormattingEditProvider(formatter.language, { - async provideDocumentFormattingEdits(document: TextDocument): Promise { - const rawText = document.getText() - const filename = document.uri.fsPath - const workspaceDir = getCwd(filename) - const formattedText = await runCommand(rawText, formatter.command, filename, workspaceDir) + const languages = Array.isArray(formatter.language) ? formatter.language : [formatter.language] - const lastLineNumber = document.lineCount - 1 - const lastLineChar = document.lineAt(lastLineNumber).text.length + for (let language of languages) { + let disposable = languages.registerDocumentFormattingEditProvider(language, { + async provideDocumentFormattingEdits(document: TextDocument): Promise { + const rawText = document.getText() + const filename = document.uri.fsPath + const workspaceDir = getCwd(filename) + const formattedText = await runCommand(rawText, formatter.command, filename, workspaceDir) - const startPos = new Position(0, 0) - const endPos = new Position(lastLineNumber, lastLineChar) - const replaceRange = new Range(startPos, endPos) + const lastLineNumber = document.lineCount - 1 + const lastLineChar = document.lineAt(lastLineNumber).text.length - return [TextEdit.replace(replaceRange, formattedText)] - }, - }) + const startPos = new Position(0, 0) + const endPos = new Position(lastLineNumber, lastLineChar) + const replaceRange = new Range(startPos, endPos) - listeningLanguages.push(formatter.language) + return [TextEdit.replace(replaceRange, formattedText)] + }, + }) - context.subscriptions.push(disposable) + listeningLanguages.push(language) + + context.subscriptions.push(disposable) + } } log(`Formatting activated for the following languages: [${listeningLanguages.toLocaleString()}]`) From 90031748ee55cf3f8af54dc4d74afe7eb3264288 Mon Sep 17 00:00:00 2001 From: Witalis Domitrz Date: Sat, 30 Aug 2025 14:11:34 +0100 Subject: [PATCH 2/2] update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 14bf94e..b6258fc 100644 --- a/README.md +++ b/README.md @@ -20,14 +20,14 @@ Populate the `custom-format.formatters` setting. // Create our custom formatters "custom-format.formatters": [ { - // Whatever language id you need to format - "language": "javascript", + // Whatever language id you need to format - or a list of languages + "language": ["javascript", "typescript"], // The command that will be run to format files with the language id specified above "command": "node format.js $FILE" // $FILE is replaced with the path of the file to be formatted }, { - "language": "typescript", - "command": "node format-ts.js" + "language": "html", + "command": "node format-html.js" } ],