-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix completion race conditions #6173
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
989f189
create savepoint before requesting completion
pascalkuthe b52f3c0
save selection before completion savepoint
pascalkuthe a057212
store multiple snapshots on the document at once
pascalkuthe e01126e
discard stale completion requests
pascalkuthe 0144c92
correctly store snapshots when repeating insert-mode actions
pascalkuthe File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -43,6 +43,7 @@ toml = "0.7" | |
log = "~0.4" | ||
|
||
which = "4.4" | ||
parking_lot = "0.12.1" | ||
|
||
|
||
[target.'cfg(windows)'.dependencies] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this is just getting whatever the currently focused view is, that may not be the same as the view in the last save point, right? E.g. would this panic if we sent a completion request and then changed views?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Your general idea is correct, that's why I added a check to drop requests if the view or document has changed in 56bf37a so this edgecase is already covered by that
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I'm not quite understanding how this works. It looks like those additional checks would prevent a new pop-up menu of completion items if we received a response after moving views. But this code looks like it's for handling repetition of a completion application, which in my understanding, does not trigger a new pop-up, just inserts the same text again. How does that extra check come into play here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The repetition code only replays events recorded while in insertmode and the appropriate event only gets generated if the completion menu is actually opened (prevent by said check). Specifically there are three events:
The important part is that there are always two savepoints during repeating: an active savepoint actually used for completions and the savepoint of the current request.
So in the case you mentioned a completion request (and completion request event) would occur bit if the view/doc is switched then the request gets dropped after it finishes and no trigger completion event is ever generated. Therefore the savepoint belonging to the request is never activated and would be replaced by the next completion request event
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it, this makes a lot more sense now, thanks for the write-up!