fix: Modifies read to handle large LS messages #52
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
read is written correctly to handle the case where multiple JSON messages are returned from the Language Server (LS) with new lines as the messages separator. However, as the Typst source gets large messages from the LS, the messages become too large to fit in a single chunk of data read from stdout of the LS. LibUV makes no guarentee that the message will end on a newline, so the left over data needs to be saved. In this case, vim logs an error because
data:find
returnsnil
intos
and the code tries to add1
to anil
value.I got this to work by having a read_buffer outside the function that can persist the unused portion of the previous read chunk and apply it to the next message before parsing.
To reproduce this error, create
test.typ
with:Then make 99 copies of this line. I incremented the number each time.
Run
TypstPreview
, then try to insert text. You'll get one or two related errors in vimThis cutoff may vary by OS. I'm on Mac OS Sonoma 14.5.