[ty] Added support for "document highlights" language server feature. by UnboundVariable · Pull Request #19515 · astral-sh/ruff (original) (raw)

MichaReiser

UnboundVariable added 3 commits

July 24, 2025 12:38

UnboundVariable pushed a commit to UnboundVariable/ruff that referenced this pull request

Jul 24, 2025

Conflicts:

crates/ty_server/src/server/api/requests.rs

crates/ty_server/tests/e2e/snapshots/e2e__initialize__initialization.snap

crates/ty_server/tests/e2e/snapshots/e2e__initialize__initialization_with_workspace.snap

AlexWaygood pushed a commit that referenced this pull request

Jul 25, 2025

@UnboundVariable @AlexWaygood

…#19515)

This PR adds support for the "document highlights" language server feature.

This feature allows a client to highlight all instances of a selected name within a document. Without this feature, editors perform highlighting based on a simple text match. This adds semantic knowledge.

The implementation of this feature largely overlaps that of the recently-added "references" feature. This PR refactors the existing "references.rs" module, separating out the functionality and tests that are specific to the other language feature into a "goto_references.rs" module. The "references.rs" module now contains the functionality that is common to "goto references", "document highlights" and "rename" (which is not yet implemented).

As part of this PR, I also created a new ReferenceTarget type which is similar to the existing NavigationTarget type but better suited for references. This idea was suggested by @MichaReiser in [this code review feedback](#19475 (comment)) from a previous PR. Notably, this new type contains a field that specifies the "kind" of the reference (read, write or other). This "kind" is needed for the document highlights feature.

Before: all textual instances of foo are highlighted Screenshot 2025-07-23 at 12 51 09 PM

After: only semantic matches are highlighted Screenshot 2025-07-23 at 12 52 05 PM


Co-authored-by: UnboundVariable unbound@gmail.com

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})