Skip to content

editor: Add preserve scroll strategy for go to definition#55036

Merged
SomeoneToIgnore merged 4 commits into
mainfrom
preserve-scroll-strategy
Apr 29, 2026
Merged

editor: Add preserve scroll strategy for go to definition#55036
SomeoneToIgnore merged 4 commits into
mainfrom
preserve-scroll-strategy

Conversation

@dinocosta
Copy link
Copy Markdown
Member

@dinocosta dinocosta commented Apr 27, 2026

These changes attempt to expand on the work introduced by #54778 by introducing a new GoToDefinitionScrollStrategy::Preserve variant that attempts to keep the cursor at the same vertical offset within the viewport when navigating to a definition.

Most of the machinery for this was already in place. To support cases where the user's scroll position isn't snapped to an exact display row, for example, after scrolling with the mmouse, Autoscroll::TopRelative and Autoscroll::BottomRelative were updated from usize to ScrollOffset, allowing fractional offsets.

When the cursor is offscreen at the moment the editor: go to definition action is invoked, Preserve falls back to Autoscroll::center, matching the existing default for go_to_definition_scroll_strategy. This avoids attempting to preserve an offset where the cursor isn't visible which would lead to the cursor being offscreen when jumping to the definition.

Documentation has also been updated to reflect this new strategy value.

Self-Review Checklist:

  • I've reviewed my own diff for quality, security, and reliability
  • Unsafe blocks (if any) have justifying comments
  • The content is consistent with the UI/UX checklist
  • Tests cover the new/changed behavior
  • Performance impact has been considered and is acceptable

Relates to #52173

Release Notes:

  • Added a new preserve option to go_to_definition_scroll_strategy that keeps the cursor at the same vertical position within the viewport when navigating to a definition

Introduces a new `GoToDefinitionScrollStrategy::Preserve` variant that
attempts to keep the cursor at the same vertical offset within the
viewport when navigating to a definition.

Most of the machinery for this was already in place. To support cases
where the user's scroll position isn't snapped to an exact display row,
for example, after scrolling with the mmouse, `Autoscroll::TopRelative`
and `Autoscroll::BottomRelative` were updated from `usize` to
`ScrollOffset`, allowing fractional offsets.

When the cursor is offscreen at the moment the `editor: go to
definition` action is invoked, `Preserve` falls back to
`Autoscroll::center`, matching the existing default for
`go_to_definition_scroll_strategy`. This avoids attempting to preserve
an offset where the cursor isn't visible which would lead to the cursor
being offscreen when jumping to the definition.

Documentation has also been updated to reflect this new strategy value.
@cla-bot cla-bot Bot added the cla-signed The user has signed the Contributor License Agreement label Apr 27, 2026
@zed-community-bot zed-community-bot Bot added the staff Pull requests authored by a current member of Zed staff label Apr 27, 2026
@dinocosta
Copy link
Copy Markdown
Member Author

Short screen recording of this strategy in action ▼

CleanShot.2026-04-27.at.22.26.03.mp4

@dinocosta dinocosta marked this pull request as ready for review April 27, 2026 22:30
@SomeoneToIgnore SomeoneToIgnore added this pull request to the merge queue Apr 29, 2026
Merged via the queue into main with commit 6357a85 Apr 29, 2026
31 checks passed
@SomeoneToIgnore SomeoneToIgnore deleted the preserve-scroll-strategy branch April 29, 2026 07:31
ebaah46 pushed a commit to ebaah46/zed that referenced this pull request May 6, 2026
…ries#55036)

These changes attempt to expand on the work introduced by
zed-industries#54778 by introducing a new
`GoToDefinitionScrollStrategy::Preserve` variant that attempts to keep
the cursor at the same vertical offset within the viewport when
navigating to a definition.

Most of the machinery for this was already in place. To support cases
where the user's scroll position isn't snapped to an exact display row,
for example, after scrolling with the mmouse, `Autoscroll::TopRelative`
and `Autoscroll::BottomRelative` were updated from `usize` to
`ScrollOffset`, allowing fractional offsets.

When the cursor is offscreen at the moment the `editor: go to
definition` action is invoked, `Preserve` falls back to
`Autoscroll::center`, matching the existing default for
`go_to_definition_scroll_strategy`. This avoids attempting to preserve
an offset where the cursor isn't visible which would lead to the cursor
being offscreen when jumping to the definition.

Documentation has also been updated to reflect this new strategy value.

Self-Review Checklist:

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Relates to zed-industries#52173

Release Notes:

- Added a new `preserve` option to `go_to_definition_scroll_strategy`
that keeps the cursor at the same vertical position within the viewport
when navigating to a definition
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement staff Pull requests authored by a current member of Zed staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants