From 11af66a267687ac88da3685b3408e9d25951079b Mon Sep 17 00:00:00 2001 From: Christoph Brandau Date: Fri, 10 Jan 2025 07:44:48 +0100 Subject: [PATCH] handle def file formatter --- client/src/common/handlers.ts | 19 +++++++++++++++++++ client/src/extension.ts | 24 +++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/client/src/common/handlers.ts b/client/src/common/handlers.ts index 7627b76..542f899 100644 --- a/client/src/common/handlers.ts +++ b/client/src/common/handlers.ts @@ -12,10 +12,29 @@ export function formatCdlFile(content: string): string { if (strippedLine.endsWith("{")) { indentLevel += 1 } + if (strippedLine.startsWith("#")) { + formattedLines[formattedLines.length - 1] = + " ".repeat(indentLevel) + strippedLine.replace(/^#\s*/, "# ") + } } return formattedLines.join("\n") } +export function formatDefFile(content: string): string { + let indentLevel = 0 + const formattedLines = [] + for (const line of content.split("\n")) { + const strippedLine = line.trim() + if (strippedLine.endsWith("}")) { + indentLevel = Math.max(indentLevel - 1, 0) + } + formattedLines.push(" ".repeat(indentLevel) + strippedLine) + if (strippedLine.endsWith("{")) { + indentLevel += 1 + } + } + return formattedLines.join("\n") +} export function completionHandlerCdl(document: vscode.TextDocument, position: vscode.Position) { const linePrefix = document.lineAt(position).text.substring(0, position.character) const categories = ["MILL", "LATHE", "DRILL"] diff --git a/client/src/extension.ts b/client/src/extension.ts index a99bb04..a98b6ca 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -1,5 +1,10 @@ import * as vscode from "vscode" -import { formatCdlFile, completionHandlerCdl, hoverCdlHandler } from "./common/handlers" +import { + formatCdlFile, + completionHandlerCdl, + hoverCdlHandler, + formatDefFile +} from "./common/handlers" export function activate(context: vscode.ExtensionContext) { const formatCdlProvider = vscode.languages.registerDocumentFormattingEditProvider( @@ -48,6 +53,23 @@ export function activate(context: vscode.ExtensionContext) { } ) context.subscriptions.push(hoverCdlProvider) + + const formatDefProvider = vscode.languages.registerDocumentFormattingEditProvider( + { scheme: "file", language: "def" }, + { + provideDocumentFormattingEdits(document: vscode.TextDocument): vscode.TextEdit[] { + const text = document.getText() + const formattedText = formatDefFile(text) + const fullRange = new vscode.Range( + document.positionAt(0), + document.positionAt(text.length) + ) + return [vscode.TextEdit.replace(fullRange, formattedText)] + } + } + ) + + context.subscriptions.push(formatDefProvider) } export function deactivate() {}