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 }