Skip to content

feat(dashboard): Treat camelCase capitals as word starts in the quick switcher - #2908

Merged
BYK merged 1 commit into
mainfrom
feat/quick-switcher-camelcase
Nov 8, 2026
Merged

BYK merged 1 commit into
mainfrom
feat/quick-switcher-camelcase

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

The ⌘K matcher lowercased titles before it looked for word starts, so Scope in isolationScope counted as mid-word. fuzzysort treats a capital after a lowercase letter as a word start. This does the same.

Word starts are now read from the original title. Case folding still keeps UTF-16 indices aligned.

Query Title Before After
scope Investigate isolationScope leak 1979 (mid-word tier) 2979 (word-start tier)
hub Fix getCurrentHub usage 1986 2986
curnet Fix getCurrentHub usage no match typo match on Curren

Everything else scores the same as before. On the 27-query title benchmark from #2902, the right title is still first for 23/27 and in the top 3 for 27/27. Typos still start only at letters or digits.

No visual change: the palette's rendering is the same, and only the ranking and highlights for camelCase titles move.

Verified with the quickOpenMatch unit tests (the new test fails on main), the command palette e2e spec, and dashboard typecheck and lint.

The CLI gets the same change in getsentry/toolkit.

via @BYK.

--

View Session in Sentry

… switcher

Co-Authored-By: BYK <126780+BYK@users.noreply.github.com>
@vercel

vercel Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
junior-docs Ready Ready Preview Nov 7, 2026 9:39pm UTC

Request Review

@github-actions

github-actions Bot commented Nov 7, 2026

Copy link
Copy Markdown
Contributor

10 screenshot changes — 10 changed · 0 added · 0 removed

Review screenshots in Frameshift

Conversation Attachment · Desktop
Conversation Attachment · Desktop
Changed
Conversation Attachment · Mobile
Conversation Attachment · Mobile
Changed
Conversation Attachment Modal · Desktop
Conversation Attachment Modal · Desktop
Changed
Conversation Attachment Zoom · Desktop
Conversation Attachment Zoom · Desktop
Changed
Conversation Captured Memories Popover · Desktop
Conversation Captured Memories Popover · Desktop
Changed
Conversation Details Watched Linked Work · Desktop
Conversation Details Watched Linked Work · Desktop
Changed
Show 4 more changed screenshots
Conversation Long Transcript Touch · Mobile
Conversation Long Transcript Touch · Mobile
Changed
Conversation Stop Active · Mobile
Conversation Stop Active · Mobile
Changed
Conversations Sections Collapsed · Desktop
Conversations Sections Collapsed · Desktop
Changed
Settings Mcp · Desktop
Settings Mcp · Desktop
Changed

BYK added a commit to getsentry/toolkit that referenced this pull request Nov 8, 2026
)

Search mode (completions, the select filter, list name filters, schema
field search) lowercased names before it looked for word starts. So
`Scope` in `isolationScope` counted as mid-word. This treats a capital
after a lowercase letter as a word start, like fuzzysort and the Junior
quick switcher (getsentry/junior#2908).

- Word starts are read from the original name, then mapped into the
indices of `name.toLowerCase()`. That string can be longer: "İ"
lowercases to "i" plus a combining dot.
- Matching still lowercases both sides with `toLowerCase()`, as on
`main`, so a query that the caller lowercased first still matches.
- A typo still starts only at a letter or digit.

Examples:
- `curnet` now finds `getCurrentHub`; before, it didn't match.
- `iss` ranks `isolationScope` above `isolationscope`, because the `S`
is now a word start. Before, they tied.

The default mode ("Did you mean…?") has the same exact, prefix, and
contains tiers and the same edit-distance fallback. Only search-mode
scatter and typo scoring changes.

Verified:
- The new `fuzzy.test.ts` cases fail before the change and pass after
it. All 39 tests in that file pass.
- `pnpm run tsc` and `pnpm run lint` pass.
- I ran 38 test files in `test/lib` that failed locally against both
`main` and this branch. They fail the same 29 tests either way, because
of sandbox permissions and unauthenticated API errors. CI has the full
suite.

<!-- junior-request-attribution:start -->
via @BYK.
<!-- junior-request-attribution:end -->

<!-- junior-session-footer:start -->
<!-- junior-conversation-id:local%3Aweb%3Ad9d1647e26e4f2706ce013ea -->

--

[View Session in
Sentry](https://sentry.sentry.io/explore/conversations/local%3Aweb%3Ad9d1647e26e4f2706ce013ea/?project=4510944073809921)

<!-- junior-session-footer:end -->

---------

Co-authored-by: sentry-junior[bot] <264270552+sentry-junior[bot]@users.noreply.github.com>
Co-authored-by: BYK <126780+BYK@users.noreply.github.com>
@BYK
BYK merged commit ae18af2 into main Nov 8, 2026
43 checks passed
@BYK
BYK deleted the feat/quick-switcher-camelcase branch November 8, 2026 13:09

This branch was successfully deployed

1 active deployment
Preview – junior-docs — 6dba8bd5 Deployed Nov 7, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk: medium PR risk score: medium

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant