From 3e2f2bf2f33dc76d8c287a5f522986419efb9368 Mon Sep 17 00:00:00 2001 From: Liangliang Zhu Date: Wed, 4 Dec 2024 10:37:07 +0800 Subject: [PATCH] Fix newline handling for tex-fmt input and output. --- src/lint/latex-formatter/tex-fmt.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/lint/latex-formatter/tex-fmt.ts b/src/lint/latex-formatter/tex-fmt.ts index 19ed042f6..20cd1be21 100644 --- a/src/lint/latex-formatter/tex-fmt.ts +++ b/src/lint/latex-formatter/tex-fmt.ts @@ -42,14 +42,15 @@ async function formatDocument(document: vscode.TextDocument, range?: vscode.Rang resolve(vscode.TextEdit.replace(range ?? document.validateRange(new vscode.Range(0, 0, Number.MAX_VALUE, Number.MAX_VALUE)), stdoutStr)) }) }) - - // write the document to the process, and add a newline at the end - process.stdin?.write(document.getText(range)+'\n') - process.stdin?.end() - const edits = await promise - // remove extra newline at the end + + // 2024-12-4, for tex-fmt 0.4.7, when using `--stdin`, it requires a newline at the end of the input; Therefore, we need to add a newline at the end of the input if it doesn't exist, and remove it from the output if it exists. + const text = document.getText(range); + const endsWithNewline = text.endsWith('\n'); + process.stdin?.write(endsWithNewline ? text : text + '\n'); + process.stdin?.end(); + const edits = await promise; if (edits) { - edits.newText = edits.newText.replace(/\n$/, '') + edits.newText = endsWithNewline ? edits.newText : edits.newText.replace(/\n$/, ''); } return edits }