astrale-sharp / typstfmt

Apache License 2.0
253 stars 25 forks source link

Trailing newlines are removed following markup #167

Open mtoohey31 opened 6 months ago

mtoohey31 commented 6 months ago

Describe the bug

When formatting a document that ends in a normal paragraph, trailing newlines are removed. This doesn't appear to happen with other syntax elements, such as lists, headings, code blocks, etc.

To Reproduce

Format a document consisting of the following string: "_Glaciers_ form an important part of the earth's climate system.\n". After formatting, this produces: "_Glaciers_ form an important part of the earth's climate system." (note that the trailing newline is missing).

astrale-sharp commented 6 months ago

Running on a bigger example, i get this result (input and output are the same, it's stable)

_Glaciers_ form an important part of the earth's climate system.
_Glaciers_ form an important part of the earth's climate system.
_Glaciers_ form an important part of the earth's climate system.

_Glaciers_ form an important part of the earth's climate system.
_Glaciers_ form an important part of the earth's climate system.
_Glaciers_ form an important part of the earth's climate system.

_Glaciers_ form an important part of the earth's climate system.
_Glaciers_ form an important part of the earth's climate system.
_Glaciers_ form an important part of the earth's climate system.⏎               

Only the last line has whitespaces removed, I think this could be improved by : instead of always removing all whitespace, remove all whitespace and add \n

mtoohey31 commented 6 months ago

Only the last line has whitespaces removed, I think this could be improved by : instead of always removing all whitespace, remove all whitespace and add \n

Yeah that matches what I saw in my testing when the last line was a paragraph. The suggested fix sounds good to me.

mtoohey31 commented 6 months ago

Spent a little more time looking at this. For the ending node kinds which I originally reported that the issue didn't appear for (lists, headings, etc.) it looks like there's an opposite bug in that it'll leave two trailing newlines instead of one if there's two or more in the unformatted document.

For example, the string "= this is a heading\n\n\n" becomes "= this is a heading\n\n" but I'd expect "= this is a heading\n".