Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

[ty] Render full diagnostics in color - #26384

#26384
Merged
AlexWaygood merged 2 commits into
mainastral-sh/ruff:mainfrom
alex/colored-diagnosticsastral-sh/ruff:alex/colored-diagnosticsCopy head branch name to clipboard
Jun 26, 2026
Merged

[ty] Render full diagnostics in color#26384
AlexWaygood merged 2 commits into
mainastral-sh/ruff:mainfrom
alex/colored-diagnosticsastral-sh/ruff:alex/colored-diagnosticsCopy head branch name to clipboard

Conversation

@AlexWaygood

@AlexWaygood AlexWaygood commented Jun 25, 2026

Copy link
Copy Markdown
Member

Context

This builds on the original Click for full diagnostic feature implemented in astral-sh/ruff#26269 and astral-sh/ty-vscode#462. The colored rendering follows the approach established by rust-lang/rust-analyzer#13848.

Summary

  • render full ty diagnostics with ANSI color and styling
  • disable terminal hyperlinks in LSP output and cover the behavior under forced hyperlink support

Companion PRs

Test plan

Screen.Recording.2026-06-25.at.19.40.15.mov

@AlexWaygood AlexWaygood added ty Multi-file analysis & type inference server Related to the LSP server labels Jun 25, 2026 — with ChatGPT Codex Connector
@astral-sh-bot

astral-sh-bot Bot commented Jun 25, 2026

Copy link
Copy Markdown

Memory usage report

Memory usage unchanged ✅

@astral-sh-bot

astral-sh-bot Bot commented Jun 25, 2026

Copy link
Copy Markdown

ecosystem-analyzer results

Lint rule Added Removed Changed
invalid-argument-type 29 1 3
no-matching-overload 13 0 0
unresolved-attribute 11 0 2
invalid-assignment 2 0 8
unsupported-operator 4 0 4
not-subscriptable 4 0 0
type-assertion-failure 0 1 2
invalid-return-type 1 1 0
not-iterable 1 0 1
call-non-callable 0 1 0
invalid-yield 1 0 0
unused-type-ignore-comment 0 1 0
Total 66 5 20

Flaky changes detected. This PR summary excludes flaky changes; see the HTML report for details.

Raw diff (91 changes)
beartype (https://github.com/beartype/beartype)
+ beartype/bite/collection/infercollectionitems.py:288:47 error[invalid-argument-type] Argument to function `make_hint_pep484604_union` is incorrect: Expected `Sequence[TypeForm[Any]]`, found `tuple[object, ...]`
+ beartype/bite/collection/infercollectionitems.py:289:49 error[invalid-argument-type] Argument to function `make_hint_pep484604_union` is incorrect: Expected `Sequence[TypeForm[Any]]`, found `tuple[object, ...]`

bokeh (https://github.com/bokeh/bokeh)
- src/bokeh/core/property/wrappers.py:566:29 error[invalid-argument-type] Method `__getitem__` of type `Overload[(index: int, /) -> Never, (index: slice[int | None, int | None, int | None], /) -> MutableSequence[Never]]` cannot be called with key of type `tuple[@Todo, ...]` on object of type `MutableSequence[Never]`
+ src/bokeh/core/property/wrappers.py:566:29 error[invalid-argument-type] Method `__getitem__` of type `Overload[(index: int, /) -> Never, (index: slice[int | None, int | None, int | None], /) -> MutableSequence[Never]]` cannot be called with key of type `tuple[int | slice[Any, Any, Any], ...]` on object of type `MutableSequence[Never]`
- src/bokeh/core/property/wrappers.py:568:21 error[invalid-assignment] Invalid subscript assignment with key of type `tuple[@Todo, ...]` and value of type `Unknown` on object of type `MutableSequence[Never]`
+ src/bokeh/core/property/wrappers.py:568:21 error[invalid-assignment] Invalid subscript assignment with key of type `tuple[int | slice[Any, Any, Any], ...]` and value of type `Unknown` on object of type `MutableSequence[Never]`

comtypes (https://github.com/enthought/comtypes)
+ comtypes/_vtbl.py:346:16 error[invalid-yield] Yield type `type` does not match annotated yield type `type[IUnknown]`

core (https://github.com/home-assistant/core)
- homeassistant/components/tasmota/light.py:224:40 error[unsupported-operator] Operator `in` is not supported between objects of type `Literal[ColorMode.HS]` and `set[ColorMode] | None | set[Unknown]`
+ homeassistant/components/tasmota/light.py:224:40 error[unsupported-operator] Operator `in` is not supported between objects of type `Literal[ColorMode.HS]` and `set[ColorMode] | None`
- homeassistant/components/tasmota/light.py:228:37 error[unsupported-operator] Operator `in` is not supported between objects of type `Literal[ColorMode.WHITE]` and `set[ColorMode] | None | set[Unknown]`
+ homeassistant/components/tasmota/light.py:228:37 error[unsupported-operator] Operator `in` is not supported between objects of type `Literal[ColorMode.WHITE]` and `set[ColorMode] | None`
- homeassistant/components/tasmota/light.py:239:17 error[unsupported-operator] Operator `in` is not supported between objects of type `Literal[ColorMode.COLOR_TEMP]` and `set[ColorMode] | None | set[Unknown]`
+ homeassistant/components/tasmota/light.py:239:17 error[unsupported-operator] Operator `in` is not supported between objects of type `Literal[ColorMode.COLOR_TEMP]` and `set[ColorMode] | None`

cwltool (https://github.com/common-workflow-language/cwltool)
+ cwltool/main.py:244:57 error[no-matching-overload] No overload of bound method `str.join` matches arguments
+ cwltool/validate_js.py:101:29 error[invalid-argument-type] Method `__getitem__` of type `bound method Top[MutableMapping[Unknown, Unknown]].__getitem__(key: Never, /) -> object` cannot be called with key of type `str` on object of type `Top[MutableMapping[Unknown, Unknown]]`
+ cwltool/validate_js.py:101:29 error[invalid-argument-type] Method `__getitem__` of type `bound method str.__getitem__(key: SupportsIndex | slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | None], /) -> str` cannot be called with key of type `str` on object of type `str`

egglog-python (https://github.com/egraphs-good/egglog-python)
- python/egglog/egraph_state.py:378:25 error[type-assertion-failure] Type `Unknown & ~Literal["delete"] & ~Literal["subsume"]` is not equivalent to `Never`
- python/egglog/egraph_state.py:623:25 error[type-assertion-failure] Type `Unknown & ~None` is not equivalent to `Never`
+ python/egglog/egraph_state.py:623:25 error[type-assertion-failure] Type `Value` is not equivalent to `Never`
- python/egglog/pretty.py:309:17 error[type-assertion-failure] Type `Unknown & ~None` is not equivalent to `Never`
+ python/egglog/pretty.py:309:17 error[type-assertion-failure] Type `Value` is not equivalent to `Never`
+ python/egglog/thunk.py:69:28 error[invalid-return-type] Return type does not match returned value: expected `T@__call__`, found `TypeVar`

freqtrade (https://github.com/freqtrade/freqtrade)
- freqtrade/optimize/analysis/lookahead.py:137:57 error[invalid-argument-type] Argument to function `LookaheadAnalysis.get_result` is incorrect: Expected `DataFrame`, found `dict[Unknown, Unknown]`
+ freqtrade/optimize/analysis/lookahead.py:137:57 error[invalid-argument-type] Argument to function `LookaheadAnalysis.get_result` is incorrect: Expected `DataFrame`, found `dict[str, DataFrame]`

hydra-zen (https://github.com/mit-ll-responsible-ai/hydra-zen)
- src/hydra_zen/structured_configs/_implementations.py:2880:60 error[invalid-argument-type] Argument to bound method `list.append` is incorrect: Expected `tuple[str, type, Field[Any]]`, found `tuple[str | @Todo, ...]`
+ src/hydra_zen/structured_configs/_implementations.py:2880:60 error[invalid-argument-type] Argument to bound method `list.append` is incorrect: Expected `tuple[str, type, Field[Any]]`, found `tuple[str | Any, ...]`

jax (https://github.com/google/jax)
+ jax/_src/pallas/einshape.py:637:47 error[invalid-argument-type] Argument to function `_is_tile_preserving` is incorrect: Expected `tuple[int, int] | None`, found `tuple[int | None, ...]`
+ jax/_src/pallas/fuser/block_spec.py:1414:60 error[invalid-argument-type] Argument to bound method `NDIndexer.make_trivial_indexer` is incorrect: Expected `tuple[int, ...]`, found `object`
+ jax/_src/pallas/fuser/block_spec.py:1417:25 error[not-iterable] Object of type `_T_co@zip` is not iterable
+ jax/_src/pallas/fuser/block_spec.py:1417:51 error[invalid-argument-type] Argument to constructor `zip.__new__` is incorrect: Expected `Iterable[Unknown]`, found `object`
+ jax/_src/pallas/mosaic_gpu/core.py:1371:19 error[unsupported-operator] Operator `+` is not supported between objects of type `int | Unknown` and `int | Array | Any | Slice`
+ jax/_src/pallas/mosaic_gpu/lowering.py:1133:7 error[invalid-argument-type] Argument to function `_lower_as_gpu_kernel` is incorrect: Expected `tuple[int, int, int]`, found `tuple[int, ...]`
- jax/experimental/mosaic/gpu/constraints.py:211:6 error[invalid-return-type] Function can implicitly return `None`, which is not assignable to return type `Variable | RegisterLayout | TMEMLayout | ... omitted 6 union elements`

manticore (https://github.com/trailofbits/manticore)
+ tests/other/test_smtlibv2.py:139:25 error[invalid-argument-type] Argument to bound method `set.add` is incorrect: Expected `<class 'Expression'> | <class 'BoolOperation'> | <class 'BitVecOperation'> | ... omitted 4 union elements`, found `type`

mongo-python-driver (https://github.com/mongodb/mongo-python-driver)
+ pymongo/asynchronous/mongo_client.py:892:37 error[invalid-argument-type] Argument to bound method `AsyncMongoClient._init_based_on_options` is incorrect: Expected `Collection[tuple[str, int]]`, found `set[Unknown | tuple[str, int | None]] & ~AlwaysFalsy`
+ pymongo/asynchronous/mongo_client.py:971:41 error[invalid-argument-type] Argument to bound method `AsyncMongoClient._init_based_on_options` is incorrect: Expected `Collection[tuple[str, int]]`, found `set[Unknown | tuple[str, int | None]] & ~AlwaysFalsy`
+ pymongo/synchronous/mongo_client.py:893:37 error[invalid-argument-type] Argument to bound method `MongoClient._init_based_on_options` is incorrect: Expected `Collection[tuple[str, int]]`, found `set[Unknown | tuple[str, int | None]] & ~AlwaysFalsy`
+ pymongo/synchronous/mongo_client.py:972:41 error[invalid-argument-type] Argument to bound method `MongoClient._init_based_on_options` is incorrect: Expected `Collection[tuple[str, int]]`, found `set[Unknown | tuple[str, int | None]] & ~AlwaysFalsy`

pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/internals/construction.py:430:21 error[invalid-argument-type] Argument to function `construct_1d_arraylike_from_scalar` is incorrect: Expected `str | bytes | date | ... omitted 10 union elements`, found `object`
+ pandas/core/internals/construction.py:434:17 error[invalid-assignment] Invalid subscript assignment with key of type `int` and value of type `ExtensionArray | ndarray[tuple[Any, ...], dtype[Any]]` on object of type `list[int | float]`

pwndbg (https://github.com/pwndbg/pwndbg)
+ pwndbg/enhance.py:176:53 error[no-matching-overload] No overload of bound method `str.join` matches arguments

pylint (https://github.com/pycqa/pylint)
+ pylint/checkers/match_statements_checker.py:164:25 error[unresolved-attribute] Attribute `value` is not defined on `NodeNG` in union `NodeNG | Proxy`
+ pylint/checkers/classes/class_checker.py:946:54 error[unresolved-attribute] Attribute `name` is not defined on `NodeNG` in union `NodeNG | UninferableBase | Proxy`
+ pylint/checkers/refactoring/recommendation_checker.py:261:29 error[unresolved-attribute] Attribute `name` is not defined on `Attribute` in union `Attribute | Name`
+ pylint/checkers/refactoring/recommendation_checker.py:265:29 error[unresolved-attribute] Attribute `attrname` is not defined on `Name` in union `Attribute | Name`
+ pylint/checkers/refactoring/refactoring_checker.py:652:16 error[unresolved-attribute] Object of type `NodeNG | None` has no attribute `value`
+ pylint/checkers/refactoring/refactoring_checker.py:1178:12 error[unresolved-attribute] Object of type `NodeNG` has no attribute `name`
+ pylint/checkers/refactoring/refactoring_checker.py:1830:32 error[unresolved-attribute] Attribute `name` is not defined on `NodeNG` in union `NodeNG | Proxy`
+ pylint/checkers/refactoring/refactoring_checker.py:1841:38 error[unresolved-attribute] Attribute `name` is not defined on `NodeNG` in union `NodeNG | Proxy`
+ pylint/checkers/utils.py:1303:83 error[invalid-argument-type] Argument to function `has_known_bases` is incorrect: Expected `ClassDef`, found `(ClassDef & BaseInstance) | (FunctionDef & BaseInstance) | (Lambda & BaseInstance) | (UnboundMethod & BaseInstance)`
+ pylint/checkers/utils.py:1304:38 error[invalid-argument-type] Argument is incorrect: Expected `NodeNG`, found `(ClassDef & BaseInstance) | (FunctionDef & BaseInstance) | (Lambda & BaseInstance) | (UnboundMethod & BaseInstance)`

pyppeteer (https://github.com/pyppeteer/pyppeteer)
- pyppeteer/launcher.py:148:40 warning[unused-type-ignore-comment] Unused blanket `type: ignore` directive

pytest (https://github.com/pytest-dev/pytest)
- src/_pytest/assertion/rewrite.py:1012:25 error[invalid-assignment] Invalid subscript assignment with key of type `Unknown` and value of type `expr` on object of type `dict[str, str]`
+ src/_pytest/assertion/rewrite.py:1012:25 error[invalid-assignment] Invalid subscript assignment with key of type `str` and value of type `expr` on object of type `dict[str, str]`
- src/_pytest/assertion/rewrite.py:1110:17 error[invalid-assignment] Invalid subscript assignment with key of type `Unknown` and value of type `NamedExpr` on object of type `dict[str, str]`
+ src/_pytest/assertion/rewrite.py:1110:17 error[invalid-assignment] Invalid subscript assignment with key of type `str` and value of type `NamedExpr` on object of type `dict[str, str]`
- src/_pytest/assertion/rewrite.py:1128:21 error[invalid-assignment] Invalid subscript assignment with key of type `Unknown` and value of type `NamedExpr` on object of type `dict[str, str]`
+ src/_pytest/assertion/rewrite.py:1128:21 error[invalid-assignment] Invalid subscript assignment with key of type `Any & str` and value of type `NamedExpr` on object of type `dict[str, str]`

rotki (https://github.com/rotki/rotki)
- rotkehlchen/api/services/transactions.py:792:40 error[invalid-argument-type] Argument to bound method `list.extend` is incorrect: Expected `Iterable[Literal[SupportedBlockchain.ETHEREUM, SupportedBlockchain.OPTIMISM, SupportedBlockchain.POLYGON_POS, SupportedBlockchain.ARBITRUM_ONE, SupportedBlockchain.BASE, ... omitted 6 literals]]`, found `list[SupportedBlockchain]`

schema_salad (https://github.com/common-workflow-language/schema_salad)
+ src/schema_salad/typescript_codegen.py:408:25 error[invalid-argument-type] Argument is incorrect: Expected `bool`, found `Any | str | Literal[False]`

schemathesis (https://github.com/schemathesis/schemathesis)
+ src/schemathesis/specs/openapi/negative/value_channel.py:205:18 error[invalid-argument-type] Method `__getitem__` of type `Overload[(i: SupportsIndex, /) -> Divergent, (s: slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | None], /) -> list[Divergent]]` cannot be called with key of type `str` on object of type `list[Divergent]`
+ src/schemathesis/specs/openapi/negative/value_channel.py:205:18 error[invalid-argument-type] Method `__getitem__` of type `bound method dict[str, Divergent].__getitem__(key: str, /) -> Divergent` cannot be called with key of type `int` on object of type `dict[str, Divergent]`
+ src/schemathesis/specs/openapi/negative/value_channel.py:205:18 error[invalid-argument-type] Method `__getitem__` of type `bound method str.__getitem__(key: SupportsIndex | slice[SupportsIndex | None, SupportsIndex | None, SupportsIndex | None], /) -> str` cannot be called with key of type `str` on object of type `str`

scikit-learn (https://github.com/scikit-learn/scikit-learn)
+ sklearn/linear_model/_logistic.py:2402:30 error[no-matching-overload] No overload of function `tile` matches arguments
- sklearn/linear_model/tests/test_logistic.py:1940:12 error[unresolved-attribute] Attribute `shape` is not defined on `list[Unknown]`, `int`, `float` in union `list[Unknown] | ndarray[tuple[Any, ...], dtype[Unknown]] | int | float`
+ sklearn/linear_model/tests/test_logistic.py:1940:12 error[unresolved-attribute] Attribute `shape` is not defined on `list[Any]`, `int`, `float` in union `list[Any] | ndarray[tuple[Any, ...], dtype[Unknown]] | int | float`
- sklearn/linear_model/tests/test_logistic.py:1941:12 error[unresolved-attribute] Attribute `shape` is not defined on `list[Unknown]`, `int`, `float` in union `list[Unknown] | ndarray[tuple[Any, ...], dtype[Unknown]] | int | float`
+ sklearn/linear_model/tests/test_logistic.py:1941:12 error[unresolved-attribute] Attribute `shape` is not defined on `list[Unknown | str | None | int | float]`, `int`, `float` in union `list[Unknown | str | None | int | float] | Unknown | ndarray[tuple[Any, ...], dtype[Any]] | int | float`
+ sklearn/linear_model/tests/test_logistic.py:1946:9 error[no-matching-overload] No overload of function `assert_allclose` matches arguments
+ sklearn/linear_model/tests/test_logistic.py:1995:5 error[no-matching-overload] No overload of function `assert_allclose` matches arguments
+ sklearn/metrics/tests/test_common.py:1305:13 error[invalid-assignment] Object of type `str` is not assignable to attribute `__name__` on type `(Unknown & Top[partial[Unknown]]) | partial[(...) -> Unknown] | (((...) -> Unknown) & Top[partial[Unknown]])`

scipy (https://github.com/scipy/scipy)
+ scipy/conftest.py:661:55 error[invalid-argument-type] Argument to function `filterwarnings` is incorrect: Expected `bool`, found `<class 'RuntimeWarning'> | str | <class 'DeprecationWarning'> | ... omitted 3 union elements`
+ scipy/conftest.py:661:55 error[invalid-argument-type] Argument to function `filterwarnings` is incorrect: Expected `int`, found `<class 'RuntimeWarning'> | str | <class 'DeprecationWarning'> | ... omitted 3 union elements`
+ scipy/conftest.py:661:55 error[invalid-argument-type] Argument to function `filterwarnings` is incorrect: Expected `str`, found `<class 'RuntimeWarning'> | str | <class 'DeprecationWarning'> | ... omitted 3 union elements`
+ scipy/conftest.py:661:55 error[invalid-argument-type] Argument to function `filterwarnings` is incorrect: Expected `str`, found `<class 'RuntimeWarning'> | str | <class 'DeprecationWarning'> | ... omitted 3 union elements`
+ scipy/conftest.py:661:55 error[invalid-argument-type] Argument to function `filterwarnings` is incorrect: Expected `type[Warning]`, found `<class 'RuntimeWarning'> | str | <class 'DeprecationWarning'> | ... omitted 3 union elements`
+ scipy/spatial/tests/test_distance.py:615:14 error[no-matching-overload] No overload of function `cdist` matches arguments
+ scipy/spatial/tests/test_distance.py:664:14 error[no-matching-overload] No overload of function `cdist` matches arguments
+ scipy/spatial/tests/test_distance.py:665:14 error[no-matching-overload] No overload of function `cdist` matches arguments
+ scipy/spatial/tests/test_distance.py:677:15 error[no-matching-overload] No overload of function `cdist` matches arguments
+ scipy/spatial/tests/test_distance.py:1394:19 error[no-matching-overload] No overload of function `pdist` matches arguments
+ scipy/spatial/tests/test_distance.py:1432:14 error[no-matching-overload] No overload of function `pdist` matches arguments
+ scipy/spatial/tests/test_distance.py:1433:14 error[no-matching-overload] No overload of function `pdist` matches arguments

spark (https://github.com/apache/spark)
- python/pyspark/sql/connect/readwriter.py:662:25 error[invalid-assignment] Object of type `list[str] | @Todo` is not assignable to `tuple[str | None, ...]`
+ python/pyspark/sql/connect/readwriter.py:662:25 error[invalid-assignment] Object of type `list[str] | tuple[str, ...]` is not assignable to `tuple[str | None, ...]`
- python/pyspark/sql/connect/readwriter.py:708:25 error[invalid-assignment] Object of type `list[str] | @Todo` is not assignable to `tuple[str | None, ...]`
+ python/pyspark/sql/connect/readwriter.py:708:25 error[invalid-assignment] Object of type `list[str] | tuple[str, ...]` is not assignable to `tuple[str | None, ...]`
- python/pyspark/sql/readwriter.py:1631:25 error[invalid-assignment] Object of type `list[str] | @Todo` is not assignable to `tuple[str | None, ...]`
+ python/pyspark/sql/readwriter.py:1631:25 error[invalid-assignment] Object of type `list[str] | tuple[str, ...]` is not assignable to `tuple[str | None, ...]`
- python/pyspark/sql/readwriter.py:1715:25 error[invalid-assignment] Object of type `list[str] | @Todo` is not assignable to `tuple[str | None, ...]`
+ python/pyspark/sql/readwriter.py:1715:25 error[invalid-assignment] Object of type `list[str] | tuple[str, ...]` is not assignable to `tuple[str | None, ...]`

strawberry (https://github.com/strawberry-graphql/strawberry)
- strawberry/cli/__init__.py:15:9 error[call-non-callable] Object of type `<module 'strawberry.cli.app'>` is not callable

sympy (https://github.com/sympy/sympy)
+ sympy/functions/special/gamma_functions.py:803:30 error[unsupported-operator] Operator `+` is not supported between objects of type `Basic` and `Literal[1]`
+ sympy/geometry/ellipse.py:808:13 error[unsupported-operator] Operator `-` is not supported between two objects of type `Basic`
+ sympy/geometry/ellipse.py:855:13 error[unsupported-operator] Operator `-` is not supported between two objects of type `Basic`
+ sympy/logic/boolalg.py:1372:36 error[invalid-argument-type] Argument to constructor `Or.__new__` is incorrect: Expected `Boolean | bool`, found `Basic`
+ sympy/matrices/expressions/kronecker.py:125:21 error[unresolved-attribute] Object of type `Basic` has no attribute `rows`
+ sympy/matrices/expressions/kronecker.py:126:21 error[unresolved-attribute] Object of type `Basic` has no attribute `cols`
+ sympy/plotting/series.py:528:35 error[not-subscriptable] Cannot subscript object of type `Basic` with no `__getitem__` method
+ sympy/plotting/series.py:529:31 error[not-subscriptable] Cannot subscript object of type `Basic` with no `__getitem__` method
+ sympy/series/order.py:329:26 error[not-subscriptable] Cannot subscript object of type `Basic` with no `__getitem__` method
+ sympy/series/order.py:336:26 error[not-subscriptable] Cannot subscript object of type `Basic` with no `__getitem__` method
+ sympy/series/order.py:363:25 error[no-matching-overload] No overload of `dict.__init__` matches arguments
+ sympy/simplify/radsimp.py:206:35 error[unresolved-attribute] Attribute `base` is not defined on `Expr` in union `Expr | Unknown`
- sympy/simplify/radsimp.py:708:28 error[not-iterable] Object of type `set[Unknown] | Basic` may not be iterable
+ sympy/simplify/radsimp.py:708:28 error[not-iterable] Object of type `set[Expr] | Basic` may not be iterable
- sympy/simplify/simplify.py:1936:27 error[unsupported-operator] Operator `+` is not supported between objects of type `tuple[Unknown | int | float]` and `Unknown | list[Unknown]`
+ sympy/simplify/simplify.py:1936:27 error[unsupported-operator] Operator `+` is not supported between objects of type `tuple[Unknown | int | float]` and `Unknown | list[Unknown] | tuple[Unknown, ...]`

tornado (https://github.com/tornadoweb/tornado)
+ tornado/routing.py:349:55 error[invalid-argument-type] Argument to `Rule.__init__` is incorrect: Expected `dict[str, Any] | None`, found `object`
+ tornado/routing.py:349:55 error[invalid-argument-type] Argument to `Rule.__init__` is incorrect: Expected `str | None`, found `object`

typeshed-stats (https://github.com/AlexWaygood/typeshed-stats)
+ src/typeshed_stats/gather.py:520:27 error[invalid-argument-type] Argument to function `sorted` is incorrect: Expected `Iterable[str]`, found `Top[list[Unknown]]`

Full report with detailed diff (timing results)

@AlexWaygood
AlexWaygood force-pushed the alex/colored-diagnostics branch from 5bcc458 to a777b40 Compare June 25, 2026 18:38
@astral-sh-bot

astral-sh-bot Bot commented Jun 25, 2026

Copy link
Copy Markdown

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

✅ ecosystem check detected no linter changes.

@AlexWaygood
AlexWaygood marked this pull request as ready for review June 25, 2026 18:45
@AlexWaygood
AlexWaygood requested review from a team as code owners June 25, 2026 18:45
@astral-sh-bot
astral-sh-bot Bot requested a review from MichaReiser June 25, 2026 18:45
Comment thread crates/ty_server/src/capabilities.rs Outdated
Comment thread crates/ruff_db/src/diagnostic/mod.rs Outdated
AlexWaygood added a commit to astral-sh/ty-vscode that referenced this pull request Jun 26, 2026
## Context

This builds on the original **Click for full diagnostic** feature
implemented in
[astral-sh/ruff#26269](astral-sh/ruff#26269) and
[#462](#462).
The colored rendering follows the approach established by
[rust-lang/rust-analyzer#13848](rust-lang/rust-analyzer#13848).

## Summary

- advertise support for colored full diagnostic output
- strip ANSI sequences from the virtual document and recreate their
styles with VS Code decorations
- support named terminal colors, 256-color palette entries, truecolor,
and text decorations

## Companion PRs

- [astral-sh/ruff#26384](astral-sh/ruff#26384)
- [astral-sh/ty#3858](astral-sh/ty#3858)

## Test plan



https://github.com/user-attachments/assets/36638263-fe48-4ba7-8abe-95db353f1257
@AlexWaygood
AlexWaygood enabled auto-merge (squash) June 26, 2026 12:15
AlexWaygood added a commit to astral-sh/ty that referenced this pull request Jun 26, 2026
## Context

This builds on the original **Click for full diagnostic** feature
implemented in
[astral-sh/ruff#26269](astral-sh/ruff#26269) and
[astral-sh/ty-vscode#462](astral-sh/ty-vscode#462).
The colored rendering follows the approach established by
[rust-lang/rust-analyzer#13848](rust-lang/rust-analyzer#13848).

## Summary

Explain that `fullDiagnosticOutput` can include ANSI colour codes and
clients are expected to be able to handle this

## Companion PRs

- [astral-sh/ruff#26384](astral-sh/ruff#26384)
-
[astral-sh/ty-vscode#463](astral-sh/ty-vscode#463)
@AlexWaygood
AlexWaygood merged commit 147bf85 into main Jun 26, 2026
61 checks passed
@AlexWaygood
AlexWaygood deleted the alex/colored-diagnostics branch June 26, 2026 12:19
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

Morty Proxy This is a proxified and sanitized view of the page, visit original site.