A .split operation on a token requires splitting these paths appropriately. Exposing this property, for use only in unit-testing, will help to validate that split operations are performed properly.
Build-bot: skip build:web
Test-bot: skip
Now that the SearchQuotientNode rework is stabilizing, I've finally landed on a better name for the type. PendingTokenization _directly_ correlates to outbound edges from `SearchQuotientNode` entries once processed. New doc-comments are also added documenting the relationship of `TransitionEdge` and `TokenizationSubset` to `SearchQuotientSpur` and `SearchQuotientCluster`.
Admittedly, it may be wise to additionally rename `TokenizationSubset` to `TransitionCluster` (and rename the source file) to further mirror the relationship of these types... but that can always be done in a follow-up.
Build-bot: skip build:web
Test-bot: skip
This addition will allow us to clearly and cleanly indicate transforms that are two (or more) halves of the same original whole. It is notably more selective than just the original transition ID and is better suited for indicating split-transform cases.
Build-bot: skip build:web
Test-bot: skip
Once we start considering alternate tokenization schemes, we'll want to note how each potential input path aligns with the original input keystrokes. As there can be multiple paths to land within the same token, it's best to store this data on the SearchQuotientSpur objects instead. This becomes especially relevant when considering token splits and merges, which will be the next follow-ups.
Build-bot: skip build:web
Test-bot: skip
Once we enable whitespace fat-fingering, it will be possible for the 'source text' to actually _change_ after an autocorrect yet still be correctable. `.sourceText` does not reflect this adequately. What _does_ remain unchanged is the `.sourceRangeKey` property and its value - those provide a better source of stability and identification.
Build-bot: skip build:web
Test-bot: skip
This PR converts SearchQuotientSpur into an abstract base class with specialized forms for different cases. Two implementations are provided:
- SearchQuotientRoot - for the root node of the search
- LegacyQuotientSpur - for modeling existing behavior before swapping to our target design and model
Build-bot: skip build:web
Test-bot: skip
As an upcoming goal is to introduce a new SearchQuotientNode type that will assist with context-caching across multiple tokenizaitons, it is wise to generalize SearchQuotientSpur and functions utilizing it to accept any SearchQuotientNode-implementing type as its parent.
Build-bot: skip build:web
Test-bot: skip
That is, corrections that eliminate user keystrokes from consideration should have a flat cost regardless of the keystroke's original transform distribution. Neither deleteLeft nor insert effects should have any impact.
Fixes: #15325
Build-bot: skip build:web
Test-bot: skip