Skip to content

[ty] More low-hanging fruit for inlay hint goto-definition#21548

Merged
AlexWaygood merged 1 commit into
mainfrom
alex/even-more-details
Nov 20, 2025
Merged

[ty] More low-hanging fruit for inlay hint goto-definition#21548
AlexWaygood merged 1 commit into
mainfrom
alex/even-more-details

Conversation

@AlexWaygood

Copy link
Copy Markdown
Member

Summary

Enable users to jump to int from the inlay for a variable inferred as Literal[42], and some other easy things

Test Plan

snapshots

@AlexWaygood AlexWaygood requested a review from Gankra November 20, 2025 20:40
@AlexWaygood AlexWaygood added the server Related to the LSP server label Nov 20, 2025
@AlexWaygood AlexWaygood added the ty Multi-file analysis & type inference label Nov 20, 2025
@astral-sh-bot

astral-sh-bot Bot commented Nov 20, 2025

Copy link
Copy Markdown

Diagnostic diff on typing conformance tests

No changes detected when running ty on typing conformance tests ✅

@astral-sh-bot

astral-sh-bot Bot commented Nov 20, 2025

Copy link
Copy Markdown

mypy_primer results

Changes were detected when running on open source projects
scikit-build-core (https://github.com/scikit-build/scikit-build-core)
+ src/scikit_build_core/build/wheel.py:98:20: error[no-matching-overload] No overload of bound method `__init__` matches arguments
- Found 43 diagnostics
+ Found 44 diagnostics

No memory usage changes detected ✅

@carljm carljm removed their request for review November 20, 2025 21:55
Comment on lines +862 to 869
// an alternative would be to use `Type::SpecialForm(SpecialFormType::LiteralString)` here,
// which would mean users would be able to jump to the definition of `LiteralString` from the
// inlay hint, but that seems less useful than the definition of `str` for a variable that is
// inferred as an *inhabitant* of `LiteralString` (since that variable will just be a string
// at runtime)
Type::LiteralString => f
.with_detail(TypeDetail::Type(self.ty))
.write_str("LiteralString"),

@Gankra Gankra Nov 20, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm I think I disagree? From what I've seen LiteralString only shows up in code that's explicitly declared e.g. a function argument as LiteralString, but maybe I've just been lucky? (not a strong opinion)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm, you could be hovering over os.name or some other constant that's annotated (but not by you) as LiteralString? I don't have a strong opinion either; we can easily change this in response to user feedback if we get some!

@Gankra Gankra left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice!

@AlexWaygood AlexWaygood merged commit 06941c1 into main Nov 20, 2025
43 checks passed
@AlexWaygood AlexWaygood deleted the alex/even-more-details branch November 20, 2025 23:16
dcreager added a commit that referenced this pull request Nov 24, 2025
…d-typevar

* origin/main: (24 commits)
  [ty] Remove brittle constraint set reveal tests (#21568)
  [`ruff`] Catch more dummy variable uses (`RUF052`) (#19799)
  [ty] Use the same snapshot handling as other tests (#21564)
  [ty] suppress autocomplete suggestions during variable binding (#21549)
  Set severity for non-rule diagnostics (#21559)
  [ty] Add `with_type` convenience to display code (#21563)
  [ty] Implement docstring rendering to markdown (#21550)
  [ty] Reduce indentation of `TypeInferenceBuilder::infer_attribute_load` (#21560)
  Bump 0.14.6 (#21558)
  [ty] Improve debug messages when imports fail (#21555)
  [ty] Add support for relative import completions
  [ty] Refactor detection of import statements for completions
  [ty] Use dedicated collector for completions
  [ty] Attach subdiagnostics to `unresolved-import` errors for relative imports as well as absolute imports (#21554)
  [ty] support PEP 613 type aliases (#21394)
  [ty] More low-hanging fruit for inlay hint goto-definition (#21548)
  [ty] implement `TypedDict` structural assignment (#21467)
  [ty] Add more random TypeDetails and tests (#21546)
  [ty] Add goto for `Unknown` when it appears in an inlay hint (#21545)
  [ty] Add type definitions for `Type::SpecialForm`s (#21544)
  ...
MichaReiser added a commit that referenced this pull request May 26, 2026
#25373)

## Summary

Today, ty showed the hover for `str` when hovering the inlay of a
`LiteralString` type:

```py
from typing import LiteralString
def my_func(x: LiteralString):
    y[: LiteralString] = x
my_func(x="hello")
```

Hovering the inlay of `y` (`[: LiteralString]` is the inlay) showed the
hover of `str`.

We argued in #21548 that `str` is
generally the more useful type in this position. I sort of agree, but I
think it's more important that the inlay and the hover show the same
type. I also think that it's important that the hover is consistent with
when we "bake" the inlay, e.g. hovering `LiteralString` now also shows
`LiteralString` and not `str`

```py
from typing import LiteralString
def my_func(x: LiteralString):
    y: LiteralString = x
my_func(x="hello")
```

Closes astral-sh/ty#2860

## Test Plan

Updated test
anishgirianish pushed a commit to anishgirianish/ruff that referenced this pull request May 28, 2026
astral-sh#25373)

## Summary

Today, ty showed the hover for `str` when hovering the inlay of a
`LiteralString` type:

```py
from typing import LiteralString
def my_func(x: LiteralString):
    y[: LiteralString] = x
my_func(x="hello")
```

Hovering the inlay of `y` (`[: LiteralString]` is the inlay) showed the
hover of `str`.

We argued in astral-sh#21548 that `str` is
generally the more useful type in this position. I sort of agree, but I
think it's more important that the inlay and the hover show the same
type. I also think that it's important that the hover is consistent with
when we "bake" the inlay, e.g. hovering `LiteralString` now also shows
`LiteralString` and not `str`

```py
from typing import LiteralString
def my_func(x: LiteralString):
    y: LiteralString = x
my_func(x="hello")
```

Closes astral-sh/ty#2860

## Test Plan

Updated test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

server Related to the LSP server ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants