Skip to content
This repository has been archived by the owner on Oct 7, 2020. It is now read-only.

HIE's version of code gets out of sync with VS Code after undo/redo #566

Closed
nickolay opened this issue May 13, 2018 · 2 comments
Closed

Comments

@nickolay
Copy link

I'm having an issue similar to #531 and #538 using hie @ 824c185 and VS Code 1.23.1 with hie extension 0.0.16.

STR:

  1. open an empty test.hs
  2. type f = 5<*>
  3. Hit Undo, you should end up with f =| (| indicating the caret position)
  4. Hit Redo

The temporary ghc-mod file (/private/var/folders/qc/6yf8538j3bxb57076xqy6qjw0000gn/T/ghc-mod98991/test98990-11.hs) now contains:

f = >5*<

The relevant part of /tmp/hie.log reads (I've omitted the common prefix {"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"file:///Users/nickolay/dev/haskell/tmp/test.hs", of the JSON for brevity):

---> ... "version":2},"contentChanges":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"rangeLength":0,"text":"f"}]}}
---> ... "version":2},"contentChanges":[]}}
---> ... "version":3},"contentChanges":[{"range":{"start":{"line":0,"character":1},"end":{"line":0,"character":1}},"rangeLength":0,"text":" "}]}}
---> ... "version":4},"contentChanges":[{"range":{"start":{"line":0,"character":2},"end":{"line":0,"character":2}},"rangeLength":0,"text":"="}]}}
---> ... "version":5},"contentChanges":[{"range":{"start":{"line":0,"character":3},"end":{"line":0,"character":3}},"rangeLength":0,"text":" "}]}}
---> ... "version":6},"contentChanges":[{"range":{"start":{"line":0,"character":4},"end":{"line":0,"character":4}},"rangeLength":0,"text":"5"}]}}
---> ... "version":7},"contentChanges":[{"range":{"start":{"line":0,"character":5},"end":{"line":0,"character":5}},"rangeLength":0,"text":"<"}]}}
---> ... "version":8},"contentChanges":[{"range":{"start":{"line":0,"character":6},"end":{"line":0,"character":6}},"rangeLength":0,"text":"*"}]}}
---> ... "version":9},"contentChanges":[{"range":{"start":{"line":0,"character":7},"end":{"line":0,"character":7}},"rangeLength":0,"text":">"}]}}
---> ... "version":14},"contentChanges":[{"range":{"start":{"line":0,"character":7},"end":{"line":0,"character":8}},"rangeLength":1,"text":""},{"range":{"start":{"line":0,"character":6},"end":{"line":0,"character":7}},"rangeLength":1,"text":""},{"range":{"start":{"line":0,"character":5},"end":{"line":0,"character":6}},"rangeLength":1,"text":""},{"range":{"start":{"line":0,"character":4},"end":{"line":0,"character":5}},"rangeLength":1,"text":""},{"range":{"start":{"line":0,"character":3},"end":{"line":0,"character":4}},"rangeLength":1,"text":""}]}}
---> ... "version":19},"contentChanges":[{"range":{"start":{"line":0,"character":3},"end":{"line":0,"character":3}},"rangeLength":0,"text":" "},{"range":{"start":{"line":0,"character":4},"end":{"line":0,"character":4}},"rangeLength":0,"text":"5"},{"range":{"start":{"line":0,"character":5},"end":{"line":0,"character":5}},"rangeLength":0,"text":"<"},{"range":{"start":{"line":0,"character":6},"end":{"line":0,"character":6}},"rangeLength":0,"text":"*"},{"range":{"start":{"line":0,"character":7},"end":{"line":0,"character":7}},"rangeLength":0,"text":">"}]}}

The last line, corresponding to redo looks sane:

{"range":{"start":{"line":0,"character":4},"end":{"line":0,"character":4}},"rangeLength":0,"text":"5"},
{"range":{"start":{"line":0,"character":5},"end":{"line":0,"character":5}},"rangeLength":0,"text":"<"},
{"range":{"start":{"line":0,"character":6},"end":{"line":0,"character":6}},"rangeLength":0,"text":"*"},
{"range":{"start":{"line":0,"character":7},"end":{"line":0,"character":7}},"rangeLength":0,"text":">"}]}}

The full logs are attached.
hie-wire.log
hie.log

@Xanewok
Copy link

Xanewok commented May 16, 2018

I'd like to confirm the issue and link to similar issue we encountered when working on Rust Language Server.

The root cause was handling text edits not in the order specified by the sent file versions (which VS Code sometimes outputs not in an ordered fashion during undo/redo).

@nickolay
Copy link
Author

It appears that the referenced issue is concerned with separate didChange notications being processed out-of-order.

In my case the problem is incorrect processing of a single didChange notification that contains multiple changes.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants