zls icon indicating copy to clipboard operation
zls copied to clipboard

`applyContentChanges` correctness, performance concerns

Open SuperAuguste opened this issue 2 years ago • 1 comments

See comment

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.

SuperAuguste avatar Feb 07 '23 22:02 SuperAuguste

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.

Techatrix avatar Aug 01 '23 05:08 Techatrix