2611 paredit delete backward races sync registration #2675
Closed
+85
−45
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.
This pull request is mainly for review and comment. It is preparation for a fix to #2611. I don't know whether the change in this PR by itself would be noticeable.
This change adjusts paredit to allow non-async commands to be more responsive and reliable. Heretofore all Paredit commands are async, but this change registers commands as synchronous if their async was only nominal. The goal is to reduce race conditions among multiple commands concurrently in progress (e.g., when keyboard auto-repeat outruns execution), by opting-out of concurrent execution where possible. (Races between document-change notification events and command handlers are still possible, though.)
What has changed?
pareditCommands
(data structure) distinguishes synchronoushandler
fromasyncHandler
. For the time being, the handlers themselves are not rewritten in this patch to be less-asynchronous than they already were. Therefore, motion and selection commands are synchronous and document modification commands remain async.activate
usesregisterTextEditorCommand
for synchronous handlers,registerCommand
for async.wrapPareditCommand
passes to synchronous command handlers theTextEditorEdit
provided by VS Code (removing the need for the handlers to useTextEditor.edit
, which is async).Addressing #2611
My Calva PR Checklist
I have:
dev
branch. (Or have specific reasons to target some other branch.)published
. (Sorry for the nagging.)[Unreleased]
entry inCHANGELOG.md
, linking the issue(s) that the PR is addressing.Figured if anything about the fix warrants tests on Mac/Linux/Windows/Remote/Whatever, and either tested it there if so, or mentioned it in the PR.Added to or updated docs in this branch, if appropriateTestsnpm run prettier-format
)npm run eslint
before creating your PR, or runnpm run eslint-watch
to eslint as you go).Ping @PEZ, @bpringe, @corasaurus-hex, @Cyrik