language: Fix bracket `not_in` scopes being ignored at end of buffer (#64840)
## Summary
"Closes #64820"
Bracket `not_in` rules (like "don't auto-close `'` inside a comment")
were ignored when the cursor was at the very end of the file. For
example, in a C file containing only `// it ''`, typing `'` at EOF would
still auto-insert a closing `'`, even though C disables that pair inside
comments.
The cause was in `language_scope_at` in `buffer.rs`. It walks down the
syntax tree using `Range::contains`, which excludes the end of the
range. At EOF, the cursor offset equals the end of the root node, so
every layer got skipped. The function then fell back to a scope with no
`override_id`, and all `not_in` rules were lost.
The fix lets the tree walk accept the end of a node's range, but only
when the cursor is at the end of the buffer. Behavior everywhere else in
the file is unchanged. Huge thanks to @arixsnow who reported this in
#64820 with clear repro steps and tracked the root cause. This PR
implements the fix they pointed to.
https://github.com/user-attachments/assets/dc3680c0-46f1-4fc1-b80a-973f18398139
## Testing
Ran `cargo test -p language`, all passed.
The issue #64820 includes directions to reproduce it clearly I used the
same to test the fix.
## Self-review
- [x] I've reviewed my diff for quality, security, reliability, and
performance.
- [x] UI changes follow the
[checklist](https://zed.dev/docs/development/ui-checklist).
- [x] Tests cover the new or changed behavior.
Release Notes:
- Fixed auto-closing brackets being inserted inside comments or strings
at the end of a file.
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
8e7fbcc131rn23thakur committed on 9/30/2026, 8:34:35 PM· committed by GitHubparent0bdc70c