In quite a few places the selection is changed multiple times in a
transaction. For example, `backspace` might do it 3 times:
* `select_autoclose_pair`
* selection of the ranges to delete
* `insert` of empty string also updates selection
Before this change, each of these selection changes appended to
selection history and did a bunch of work that's only relevant to
selections the user actually sees. So for each backspace,
`editor::UndoSelection` would need to be invoked 3-4 times before the
cursor actually moves. It still needs to be run twice after this change,
but that is a separate issue.
Signature help even had a `backspace_pressed: bool` as an incomplete
workaround, to avoid it flickering due to the selection switching
between being a range and being cursor-like.
The original motivation for this change is work I'm doing on not
re-querying completions when the language server provides a response
that has `is_incomplete: false`. Whether the menu is still visible is
determined by the cursor position, and this was complicated by it seeing
`backspace` temporarily moving the head of the selection 1 character to
the left.
This change also removes some redundant uses of
`push_to_selection_history`.
Not super stoked with the name `DeferredSelectionEffectsState`. Naming
is hard.
Release Notes:
- N/A