From 5b5e1f33c0298a98b52725ad228ebfdd82425ac0 Mon Sep 17 00:00:00 2001
From: GiGaGon <107241144+MeGaGiGaGon@users.noreply.github.com>
Date: Wed, 4 Mar 2026 15:14:55 -0800
Subject: [PATCH 1/2] [ty] Add quotes to related issues links
---
crates/ruff_dev/src/generate_ty_rules.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/crates/ruff_dev/src/generate_ty_rules.rs b/crates/ruff_dev/src/generate_ty_rules.rs
index 87b76e56e9900a..3b0cb514964105 100644
--- a/crates/ruff_dev/src/generate_ty_rules.rs
+++ b/crates/ruff_dev/src/generate_ty_rules.rs
@@ -116,7 +116,7 @@ fn generate_markdown() -> String {
r#"
Default level: {level} ·
{status_text} ·
-Related issues ·
+Related issues ·
View source
From 1cd4ed52bbc47941a87a3f2b41a5aa8782b5ef83 Mon Sep 17 00:00:00 2001
From: GiGaGon <107241144+MeGaGiGaGon@users.noreply.github.com>
Date: Wed, 4 Mar 2026 15:35:56 -0800
Subject: [PATCH 2/2] Re-generate ty rules.md
(Hopefully this works since I did it manually since can't build ruff)
---
crates/ty/docs/rules.md | 226 ++++++++++++++++++++--------------------
1 file changed, 113 insertions(+), 113 deletions(-)
diff --git a/crates/ty/docs/rules.md b/crates/ty/docs/rules.md
index c4672536a4fdc2..ad0e4e0a9ff9fe 100644
--- a/crates/ty/docs/rules.md
+++ b/crates/ty/docs/rules.md
@@ -7,7 +7,7 @@
Default level: error ·
Added in 0.0.13 ·
-Related issues ·
+Related issues ·
View source
@@ -48,7 +48,7 @@ class Derived(Base): # Error: `Derived` does not implement `method`
Default level: warn ·
Added in 0.0.1-alpha.20 ·
-Related issues ·
+Related issues ·
View source
@@ -89,7 +89,7 @@ class SubProto(BaseProto, Protocol):
Default level: error ·
Added in 0.0.14 ·
-Related issues ·
+Related issues ·
View source
@@ -125,7 +125,7 @@ def _(x: int):
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -156,7 +156,7 @@ def test(): -> "int":
Default level: error ·
Preview (since 0.0.16) ·
-Related issues ·
+Related issues ·
View source
@@ -205,7 +205,7 @@ Foo.method() # Error: cannot call abstract classmethod
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -229,7 +229,7 @@ Calling a non-callable object will raise a `TypeError` at runtime.
Default level: error ·
Added in 0.0.7 ·
-Related issues ·
+Related issues ·
View source
@@ -260,7 +260,7 @@ def f(x: object):
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -292,7 +292,7 @@ f(int) # error
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -323,7 +323,7 @@ a = 1
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -355,7 +355,7 @@ class C(A, B): ...
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -387,7 +387,7 @@ class B(A): ...
Default level: error ·
Added in 0.0.1-alpha.29 ·
-Related issues ·
+Related issues ·
View source
@@ -415,7 +415,7 @@ type B = A
Default level: error ·
Preview (since 1.0.0) ·
-Related issues ·
+Related issues ·
View source
@@ -447,7 +447,7 @@ class Example:
Default level: warn ·
Added in 0.0.1-alpha.16 ·
-Related issues ·
+Related issues ·
View source
@@ -474,7 +474,7 @@ old_func() # emits [deprecated] diagnostic
Default level: ignore ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -503,7 +503,7 @@ false positives it can produce.
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -530,7 +530,7 @@ class B(A, A): ...
Default level: error ·
Added in 0.0.1-alpha.12 ·
-Related issues ·
+Related issues ·
View source
@@ -568,7 +568,7 @@ class A: # Crash at runtime
Default level: error ·
Added in 0.0.14 ·
-Related issues ·
+Related issues ·
View source
@@ -614,7 +614,7 @@ def bar() -> str:
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -639,7 +639,7 @@ def foo() -> "intt\b": ...
Default level: error ·
Added in 0.0.20 ·
-Related issues ·
+Related issues ·
View source
@@ -671,7 +671,7 @@ def my_function() -> int:
Default level: error ·
Added in 0.0.15 ·
-Related issues ·
+Related issues ·
View source
@@ -704,7 +704,7 @@ MY_CONSTANT: Final[int] = 1
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -735,7 +735,7 @@ def test(): -> "int":
Default level: warn ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -766,7 +766,7 @@ a = 20 / 0 # ty: ignore[division-by-zero]
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -797,7 +797,7 @@ def test(): -> "Literal[5]":
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -827,7 +827,7 @@ class C(A, B): ...
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -853,7 +853,7 @@ t[3] # IndexError: tuple index out of range
Default level: warn ·
Added in 0.0.1-alpha.33 ·
-Related issues ·
+Related issues ·
View source
@@ -887,7 +887,7 @@ class MyClass: ...
Default level: error ·
Added in 0.0.1-alpha.12 ·
-Related issues ·
+Related issues ·
View source
@@ -976,7 +976,7 @@ an atypical memory layout.
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1003,7 +1003,7 @@ func("foo") # error: [invalid-argument-type]
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1031,7 +1031,7 @@ a: int = ''
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1065,7 +1065,7 @@ C.instance_var = 3 # error: Cannot assign to instance variable
Default level: error ·
Added in 0.0.1-alpha.19 ·
-Related issues ·
+Related issues ·
View source
@@ -1101,7 +1101,7 @@ asyncio.run(main())
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1125,7 +1125,7 @@ class A(42): ... # error: [invalid-base]
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1152,7 +1152,7 @@ with 1:
Default level: error ·
Added in 0.0.12 ·
-Related issues ·
+Related issues ·
View source
@@ -1189,7 +1189,7 @@ class Foo(NamedTuple):
Default level: error ·
Added in 0.0.13 ·
-Related issues ·
+Related issues ·
View source
@@ -1221,7 +1221,7 @@ class A:
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1250,7 +1250,7 @@ a: str
Default level: warn ·
Added in 0.0.20 ·
-Related issues ·
+Related issues ·
View source
@@ -1299,7 +1299,7 @@ class Pet(Enum):
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1343,7 +1343,7 @@ except ZeroDivisionError:
Default level: error ·
Added in 0.0.1-alpha.28 ·
-Related issues ·
+Related issues ·
View source
@@ -1385,7 +1385,7 @@ class D(A):
Default level: error ·
Added in 0.0.1-alpha.35 ·
-Related issues ·
+Related issues ·
View source
@@ -1429,7 +1429,7 @@ class NonFrozenChild(FrozenBase): # Error raised here
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1467,7 +1467,7 @@ class D(Generic[U, T]): ...
Default level: error ·
Added in 0.0.12 ·
-Related issues ·
+Related issues ·
View source
@@ -1516,7 +1516,7 @@ x: G[int]
Default level: warn ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1546,7 +1546,7 @@ a = 20 / 0 # type: ignore
Default level: error ·
Added in 0.0.1-alpha.17 ·
-Related issues ·
+Related issues ·
View source
@@ -1585,7 +1585,7 @@ carol = Person(name="Carol", age=25) # typo!
Default level: warn ·
Added in 0.0.15 ·
-Related issues ·
+Related issues ·
View source
@@ -1646,7 +1646,7 @@ def f(x, y, /): # Python 3.8+ syntax
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1681,7 +1681,7 @@ def f(t: TypeVar("U")): ...
Default level: error ·
Added in 0.0.18 ·
-Related issues ·
+Related issues ·
View source
@@ -1709,7 +1709,7 @@ match x:
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1743,7 +1743,7 @@ class B(metaclass=f): ...
Default level: error ·
Added in 0.0.1-alpha.20 ·
-Related issues ·
+Related issues ·
View source
@@ -1850,7 +1850,7 @@ Correct use of `@override` is enforced by ty's `invalid-explicit-override` rule.
Default level: error ·
Added in 0.0.1-alpha.19 ·
-Related issues ·
+Related issues ·
View source
@@ -1904,7 +1904,7 @@ AttributeError: Cannot overwrite NamedTuple attribute _asdict
Default level: error ·
Added in 0.0.1-alpha.27 ·
-Related issues ·
+Related issues ·
View source
@@ -1934,7 +1934,7 @@ Baz = NewType("Baz", int | str) # error: invalid base for `typing.NewType`
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -1984,7 +1984,7 @@ def foo(x: int) -> int: ...
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2010,7 +2010,7 @@ def f(a: int = ''): ...
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2041,7 +2041,7 @@ P2 = ParamSpec("S2") # error: ParamSpec name must match the variable it's assig
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2075,7 +2075,7 @@ TypeError: Protocols can only inherit from other protocols, got
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2124,7 +2124,7 @@ def g():
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2153,7 +2153,7 @@ def func() -> int:
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2199,7 +2199,7 @@ super(B, A) # error: `A` does not satisfy `issubclass(A, B)`
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2249,7 +2249,7 @@ class C: ...
Default level: error ·
Added in 0.0.10 ·
-Related issues ·
+Related issues ·
View source
@@ -2295,7 +2295,7 @@ class MyClass:
Default level: error ·
Added in 0.0.1-alpha.6 ·
-Related issues ·
+Related issues ·
View source
@@ -2322,7 +2322,7 @@ NewAlias = TypeAliasType(get_name(), int) # error: TypeAliasType name mus
Default level: error ·
Added in 0.0.1-alpha.29 ·
-Related issues ·
+Related issues ·
View source
@@ -2369,7 +2369,7 @@ Bar[int] # error: too few arguments
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2399,7 +2399,7 @@ TYPE_CHECKING = ''
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2429,7 +2429,7 @@ b: Annotated[int] # `Annotated` expects at least two arguments
Default level: error ·
Added in 0.0.1-alpha.11 ·
-Related issues ·
+Related issues ·
View source
@@ -2463,7 +2463,7 @@ f(10) # Error
Default level: error ·
Added in 0.0.1-alpha.11 ·
-Related issues ·
+Related issues ·
View source
@@ -2497,7 +2497,7 @@ class C:
Default level: error ·
Added in 0.0.15 ·
-Related issues ·
+Related issues ·
View source
@@ -2528,7 +2528,7 @@ def g[U, T: U](): ... # error: [invalid-type-variable-bound]
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2575,7 +2575,7 @@ U = TypeVar('U', list[int], int) # valid constrained Type
Default level: error ·
Added in 0.0.16 ·
-Related issues ·
+Related issues ·
View source
@@ -2607,7 +2607,7 @@ U = TypeVar("U", int, str, default=bytes) # error: [invalid-type-variable-defau
Default level: error ·
Added in 0.0.14 ·
-Related issues ·
+Related issues ·
View source
@@ -2642,7 +2642,7 @@ def f(x: dict):
Default level: error ·
Added in 0.0.9 ·
-Related issues ·
+Related issues ·
View source
@@ -2673,7 +2673,7 @@ class Foo(TypedDict):
Default level: error ·
Added in 0.0.14 ·
-Related issues ·
+Related issues ·
View source
@@ -2728,7 +2728,7 @@ def h(arg2: type):
Default level: error ·
Added in 0.0.15 ·
-Related issues ·
+Related issues ·
View source
@@ -2771,7 +2771,7 @@ def g(arg: object):
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2796,7 +2796,7 @@ func() # TypeError: func() missing 1 required positional argument: 'x'
Default level: error ·
Added in 0.0.1-alpha.20 ·
-Related issues ·
+Related issues ·
View source
@@ -2829,7 +2829,7 @@ alice["age"] # KeyError
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2858,7 +2858,7 @@ func("string") # error: [no-matching-overload]
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2884,7 +2884,7 @@ for i in 34: # TypeError: 'int' object is not iterable
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -2908,7 +2908,7 @@ Subscripting an object that does not support it will raise a `TypeError` at runt
Default level: error ·
Added in 0.0.1-alpha.29 ·
-Related issues ·
+Related issues ·
View source
@@ -2941,7 +2941,7 @@ class B(A):
Default level: error ·
Added in 0.0.16 ·
-Related issues ·
+Related issues ·
View source
@@ -2974,7 +2974,7 @@ class B(A):
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3001,7 +3001,7 @@ f(1, x=2) # Error raised here
Default level: error ·
Added in 0.0.1-alpha.22 ·
-Related issues ·
+Related issues ·
View source
@@ -3028,7 +3028,7 @@ f(x=1) # Error raised here
Default level: warn ·
Added in 0.0.1-alpha.22 ·
-Related issues ·
+Related issues ·
View source
@@ -3056,7 +3056,7 @@ A.c # AttributeError: type object 'A' has no attribute 'c'
Default level: warn ·
Added in 0.0.1-alpha.22 ·
-Related issues ·
+Related issues ·
View source
@@ -3088,7 +3088,7 @@ A()[0] # TypeError: 'A' object is not subscriptable
Default level: ignore ·
Added in 0.0.1-alpha.22 ·
-Related issues ·
+Related issues ·
View source
@@ -3125,7 +3125,7 @@ from module import a # ImportError: cannot import name 'a' from 'module'
Default level: ignore ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3158,7 +3158,7 @@ print(x) # NameError: name 'x' is not defined
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3189,7 +3189,7 @@ def test(): -> "int":
Default level: warn ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3216,7 +3216,7 @@ cast(int, f()) # Redundant
Default level: warn ·
Added in 0.0.18 ·
-Related issues ·
+Related issues ·
View source
@@ -3248,7 +3248,7 @@ class C:
Default level: error ·
Added in 0.0.20 ·
-Related issues ·
+Related issues ·
View source
@@ -3282,7 +3282,7 @@ class Outer[T]:
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3312,7 +3312,7 @@ static_assert(int(2.0 * 3.0) == 6) # error: does not have a statically known tr
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3341,7 +3341,7 @@ class B(A): ... # Error raised here
Default level: error ·
Added in 0.0.1-alpha.30 ·
-Related issues ·
+Related issues ·
View source
@@ -3375,7 +3375,7 @@ class F(NamedTuple):
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3402,7 +3402,7 @@ f("foo") # Error raised here
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3430,7 +3430,7 @@ def _(x: int):
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3476,7 +3476,7 @@ class A:
Default level: error ·
Added in 0.0.20 ·
-Related issues ·
+Related issues ·
View source
@@ -3513,7 +3513,7 @@ class C(Generic[T]):
Default level: warn ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3537,7 +3537,7 @@ reveal_type(1) # NameError: name 'reveal_type' is not defined
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3564,7 +3564,7 @@ f(x=1, y=2) # Error raised here
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3592,7 +3592,7 @@ A().foo # AttributeError: 'A' object has no attribute 'foo'
Default level: warn ·
Added in 0.0.1-alpha.15 ·
-Related issues ·
+Related issues ·
View source
@@ -3650,7 +3650,7 @@ def g():
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3675,7 +3675,7 @@ import foo # ModuleNotFoundError: No module named 'foo'
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3700,7 +3700,7 @@ print(x) # NameError: name 'x' is not defined
Default level: warn ·
Added in 0.0.1-alpha.7 ·
-Related issues ·
+Related issues ·
View source
@@ -3739,7 +3739,7 @@ class D(C): ... # error: [unsupported-base]
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3776,7 +3776,7 @@ b1 < b2 < b1 # exception raised here
Default level: ignore ·
Added in 0.0.12 ·
-Related issues ·
+Related issues ·
View source
@@ -3817,7 +3817,7 @@ def factory(base: type[Base]) -> type:
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3845,7 +3845,7 @@ A() + A() # TypeError: unsupported operand type(s) for +: 'A' and 'A'
Default level: warn ·
Preview (since 0.0.21) ·
-Related issues ·
+Related issues ·
View source
@@ -3878,7 +3878,7 @@ async def main() -> None:
Default level: warn ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source
@@ -3914,7 +3914,7 @@ to `false` to prevent this rule from reporting unused `type: ignore` comments.
Default level: warn ·
Added in 0.0.14 ·
-Related issues ·
+Related issues ·
View source
@@ -3951,7 +3951,7 @@ to `false`.
Default level: warn ·
Added in 0.0.1-alpha.22 ·
-Related issues ·
+Related issues ·
View source
@@ -4014,7 +4014,7 @@ def foo(x: int | str) -> int | str:
Default level: error ·
Added in 0.0.1-alpha.1 ·
-Related issues ·
+Related issues ·
View source