# Prefer exact case matches when breaking completion ties \(\#54072\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/95b0c5aeefeec2c1245883991920339b53738310)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: 95b0c5aeefeec2c1245883991920339b53738310

Requested commit: 95b0c5aeefeec2c1245883991920339b53738310

Commit: 95b0c5aeefeec2c1245883991920339b53738310

Tree: 409b1bdf57c085a686471d7d52857fcbfdfcaf51

Author: Sergey Borovikov

Committer: GitHub

## Message

````
Prefer exact case matches when breaking completion ties (#54072)

## Summary

Fix completion ordering when two items are otherwise tied and only
differ by letter case.

In cases like `abc` vs `ABC`, if the user types `a`, Zed should prefer
`abc`. If the user types `A`, Zed should prefer `ABC`. This matches the
expectation described in #37081 and #27993, where `subscription` should
rank above `Subscription` for query `s`.

## What changed

In `CompletionsMenu::sort_string_matches`, I added a tie-breaker that
prefers completions with more exact case-sensitive matches at the
fuzzy-match positions.

This only applies after the existing higher-priority sort keys, so it
does not replace fuzzy score, match positions, snippet ordering, or LSP
`sortText`. It only resolves ambiguous ties more intuitively.

## Tests

Added regression coverage in `code_completion_tests` for abstract
case-only examples:

- `a` prefers `abc` over `ABC`
- `A` prefers `ABC` over `abc`
- `ab` prefers `abc` over `ABC`
- `AB` prefers `ABC` over `abc`
- mixed-case multi-letter queries like `Ab` and `aB`

## Verification

Ran:

```bash
cargo test -p editor code_completion_tests
```

PS: all code and description is generated by Codex

Release Notes:

- Fixed completions not tie braking by case
````

## Parents

- [7620b7833722279aaced4255517cf85b8000153e](https://git.cafe/gitcafe/zed/commit/7620b7833722279aaced4255517cf85b8000153e?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/95b0c5aeefeec2c1245883991920339b53738310?format=markdown)
