zls
zls copied to clipboard
`applyContentChanges` correctness, performance concerns
On top of that, in large files, this function can easily take 20 milliseconds if not more, which adds up when quickly modifying code.
The solution is probably just yoinking Go's implementation for this, too.
Are you sure this implementation is incorrect at its core? Looking at the description of TextDocumentContentChangeEvent:
The actual content changes. The content changes describe single state
changes to the document. So if there are two content changes c1 (at
array index 0) and c2 (at array index 1) for a document in state S then
c1 moves the document from S to S' and c2 from S' to S''. So c1 is
computed on the state S and c2 is computed on the state S'.
To mirror the content of a document using change events use the following
approach:
- start with the same initial content
- apply the 'textDocument/didChange' notifications in the order you
receive them.
- apply the `TextDocumentContentChangeEvent`s in a single notification
in the order you receive them.