Skip to content

Commit 5fef4d4

Browse files
authored
Use python.typing.org for typing documentation links (#17323)
## Summary There is a new official URL for the typing documentation: https://typing.python.org/ Change all https://typing.readthedocs.io/ links to use the new sub domain, which is slightly shorter and looks more official. ## Test Plan Tested to see if each and every new URL is accessible. I noticed that some links go to https://typing.python.org/en/latest/source/stubs.html which seems to be outdated, but that is a separate issue. The same page shows up for the old URL.
1 parent 144484d commit 5fef4d4

37 files changed

+57
-57
lines changed

crates/red_knot_python_semantic/resources/mdtest/annotations/callable.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
References:
44

5-
- <https://typing.readthedocs.io/en/latest/spec/callables.html#callable>
5+
- <https://typing.python.org/en/latest/spec/callables.html#callable>
66

77
Note that `typing.Callable` is deprecated at runtime, in favour of `collections.abc.Callable` (see:
88
<https://docs.python.org/3/library/typing.html#deprecated-aliases>). However, removal of
@@ -299,4 +299,4 @@ def _(c: Callable[[int], int]):
299299
reveal_type(c.__call__) # revealed: Unknown
300300
```
301301

302-
[gradual form]: https://typing.readthedocs.io/en/latest/spec/glossary.html#term-gradual-form
302+
[gradual form]: https://typing.python.org/en/latest/spec/glossary.html#term-gradual-form

crates/red_knot_python_semantic/resources/mdtest/annotations/int_float_complex.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
In order to support common use cases, an annotation of `float` actually means `int | float`, and an
44
annotation of `complex` actually means `int | float | complex`. See
5-
[the specification](https://typing.readthedocs.io/en/latest/spec/special-types.html#special-cases-for-float-and-complex)
5+
[the specification](https://typing.python.org/en/latest/spec/special-types.html#special-cases-for-float-and-complex)
66

77
## float
88

crates/red_knot_python_semantic/resources/mdtest/annotations/literal.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Literal
22

3-
<https://typing.readthedocs.io/en/latest/spec/literal.html#literals>
3+
<https://typing.python.org/en/latest/spec/literal.html#literals>
44

55
## Parameterization
66

crates/red_knot_python_semantic/resources/mdtest/annotations/literal_string.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,4 +147,4 @@ def f():
147147
reveal_type(x) # revealed: LiteralString
148148
```
149149

150-
[1]: https://typing.readthedocs.io/en/latest/spec/literal.html#literalstring
150+
[1]: https://typing.python.org/en/latest/spec/literal.html#literalstring

crates/red_knot_python_semantic/resources/mdtest/attributes.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1800,5 +1800,5 @@ Some of the tests in the *Class and instance variables* section draw inspiration
18001800

18011801
[descriptor protocol tests]: descriptor_protocol.md
18021802
[pyright's documentation]: https://microsoft.github.io/pyright/#/type-concepts-advanced?id=class-and-instance-variables
1803-
[typing spec on `classvar`]: https://typing.readthedocs.io/en/latest/spec/class-compat.html#classvar
1803+
[typing spec on `classvar`]: https://typing.python.org/en/latest/spec/class-compat.html#classvar
18041804
[`typing.classvar`]: https://docs.python.org/3/library/typing.html#typing.ClassVar

crates/red_knot_python_semantic/resources/mdtest/doc/public_type_undeclared_symbols.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,4 @@ class Wrapper:
122122
reveal_type(Wrapper.value) # revealed: Unknown | None
123123
```
124124

125-
[gradual guarantee]: https://typing.readthedocs.io/en/latest/spec/concepts.html#the-gradual-guarantee
125+
[gradual guarantee]: https://typing.python.org/en/latest/spec/concepts.html#the-gradual-guarantee

crates/red_knot_python_semantic/resources/mdtest/generics/legacy.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,4 @@ from typing import TypeVar
6969
T = TypeVar("T", int)
7070
```
7171

72-
[generics]: https://typing.readthedocs.io/en/latest/spec/generics.html
72+
[generics]: https://typing.python.org/en/latest/spec/generics.html

crates/red_knot_python_semantic/resources/mdtest/generics/scoping.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -299,4 +299,4 @@ class C[T]:
299299
ok2: Inner[T]
300300
```
301301

302-
[scoping]: https://typing.readthedocs.io/en/latest/spec/generics.html#scoping-rules-for-type-variables
302+
[scoping]: https://typing.python.org/en/latest/spec/generics.html#scoping-rules-for-type-variables

crates/red_knot_python_semantic/resources/mdtest/import/conventions.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This document describes the conventions for importing symbols.
44

55
Reference:
66

7-
- <https://typing.readthedocs.io/en/latest/spec/distributing.html#import-conventions>
7+
- <https://typing.python.org/en/latest/spec/distributing.html#import-conventions>
88

99
## Builtins scope
1010

crates/red_knot_python_semantic/resources/mdtest/suppressions/no_type_check.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
> If a type checker supports the `no_type_check` decorator for functions, it should suppress all
44
> type errors for the def statement and its body including any nested functions or classes. It
55
> should also ignore all parameter and return type annotations and treat the function as if it were
6-
> unannotated. [source](https://typing.readthedocs.io/en/latest/spec/directives.html#no-type-check)
6+
> unannotated. [source](https://typing.python.org/en/latest/spec/directives.html#no-type-check)
77
88
## Error in the function body
99

@@ -95,7 +95,7 @@ def test() -> Undefined:
9595

9696
Red Knot does not support decorating classes with `no_type_check`. The behaviour of `no_type_check`
9797
when applied to classes is
98-
[not specified currently](https://typing.readthedocs.io/en/latest/spec/directives.html#no-type-check),
98+
[not specified currently](https://typing.python.org/en/latest/spec/directives.html#no-type-check),
9999
and is not supported by Pyright or mypy.
100100

101101
A future improvement might be to emit a diagnostic if a `no_type_check` annotation is applied to a

crates/red_knot_python_semantic/resources/mdtest/type_properties/is_assignable_to.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -504,4 +504,4 @@ c: Callable[[Any], str] = f
504504
c: Callable[[Any], str] = g
505505
```
506506

507-
[typing documentation]: https://typing.readthedocs.io/en/latest/spec/concepts.html#the-assignable-to-or-consistent-subtyping-relation
507+
[typing documentation]: https://typing.python.org/en/latest/spec/concepts.html#the-assignable-to-or-consistent-subtyping-relation

crates/red_knot_python_semantic/resources/mdtest/type_properties/is_equivalent_to.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,4 @@ from knot_extensions import is_equivalent_to, static_assert
254254
static_assert(is_equivalent_to(int | Callable[[int | str], None], Callable[[str | int], None] | int))
255255
```
256256

257-
[the equivalence relation]: https://typing.readthedocs.io/en/latest/spec/glossary.html#term-equivalent
257+
[the equivalence relation]: https://typing.python.org/en/latest/spec/glossary.html#term-equivalent

crates/red_knot_python_semantic/resources/mdtest/type_properties/is_gradual_equivalent_to.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,4 @@ def f6(a, /): ...
157157
static_assert(not is_gradual_equivalent_to(CallableTypeOf[f1], CallableTypeOf[f6]))
158158
```
159159

160-
[materializations]: https://typing.readthedocs.io/en/latest/spec/glossary.html#term-materialize
160+
[materializations]: https://typing.python.org/en/latest/spec/glossary.html#term-materialize

crates/red_knot_python_semantic/resources/mdtest/type_properties/is_subtype_of.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1148,5 +1148,5 @@ static_assert(not is_subtype_of(TypeOf[A.g], Callable[[], int]))
11481148
static_assert(is_subtype_of(TypeOf[A.f], Callable[[A, int], int]))
11491149
```
11501150

1151-
[special case for float and complex]: https://typing.readthedocs.io/en/latest/spec/special-types.html#special-cases-for-float-and-complex
1152-
[typing documentation]: https://typing.readthedocs.io/en/latest/spec/concepts.html#subtype-supertype-and-type-equivalence
1151+
[special case for float and complex]: https://typing.python.org/en/latest/spec/special-types.html#special-cases-for-float-and-complex
1152+
[typing documentation]: https://typing.python.org/en/latest/spec/concepts.html#subtype-supertype-and-type-equivalence

crates/red_knot_python_semantic/src/module_resolver/resolver.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ impl SearchPaths {
168168
///
169169
/// This method also implements the typing spec's [module resolution order].
170170
///
171-
/// [module resolution order]: https://typing.readthedocs.io/en/latest/spec/distributing.html#import-resolution-ordering
171+
/// [module resolution order]: https://typing.python.org/en/latest/spec/distributing.html#import-resolution-ordering
172172
pub(crate) fn from_settings(
173173
db: &dyn Db,
174174
settings: &SearchPathSettings,

crates/red_knot_python_semantic/src/suppression.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -535,7 +535,7 @@ impl<'a> SuppressionsBuilder<'a> {
535535
// > imports, or other executable code, silences all errors in the file.
536536
// > Blank lines and other comments, such as shebang lines and coding cookies,
537537
// > may precede the # type: ignore comment.
538-
// > https://typing.readthedocs.io/en/latest/spec/directives.html#type-ignore-comments
538+
// > https://typing.python.org/en/latest/spec/directives.html#type-ignore-comments
539539
let is_file_suppression = comment.kind.is_type_ignore() && !self.seen_non_trivia_token;
540540

541541
let suppressed_range = if is_file_suppression {

crates/red_knot_python_semantic/src/types.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ impl<'db> Type<'db> {
766766
///
767767
/// This method returns `false` if either `self` or `other` is not fully static.
768768
///
769-
/// [subtype of]: https://typing.readthedocs.io/en/latest/spec/concepts.html#subtype-supertype-and-type-equivalence
769+
/// [subtype of]: https://typing.python.org/en/latest/spec/concepts.html#subtype-supertype-and-type-equivalence
770770
pub(crate) fn is_subtype_of(self, db: &'db dyn Db, target: Type<'db>) -> bool {
771771
// Two equivalent types are always subtypes of each other.
772772
//
@@ -1056,7 +1056,7 @@ impl<'db> Type<'db> {
10561056

10571057
/// Return true if this type is [assignable to] type `target`.
10581058
///
1059-
/// [assignable to]: https://typing.readthedocs.io/en/latest/spec/concepts.html#the-assignable-to-or-consistent-subtyping-relation
1059+
/// [assignable to]: https://typing.python.org/en/latest/spec/concepts.html#the-assignable-to-or-consistent-subtyping-relation
10601060
pub(crate) fn is_assignable_to(self, db: &'db dyn Db, target: Type<'db>) -> bool {
10611061
if self.is_gradual_equivalent_to(db, target) {
10621062
return true;
@@ -1274,7 +1274,7 @@ impl<'db> Type<'db> {
12741274
///
12751275
/// This method returns `false` if either `self` or `other` is not fully static.
12761276
///
1277-
/// [equivalent to]: https://typing.readthedocs.io/en/latest/spec/glossary.html#term-equivalent
1277+
/// [equivalent to]: https://typing.python.org/en/latest/spec/glossary.html#term-equivalent
12781278
pub(crate) fn is_equivalent_to(self, db: &'db dyn Db, other: Type<'db>) -> bool {
12791279
// TODO equivalent but not identical types: TypedDicts, Protocols, type aliases, etc.
12801280

@@ -1318,7 +1318,7 @@ impl<'db> Type<'db> {
13181318
///
13191319
/// This powers the `assert_type()` directive.
13201320
///
1321-
/// [Summary of type relations]: https://typing.readthedocs.io/en/latest/spec/concepts.html#summary-of-type-relations
1321+
/// [Summary of type relations]: https://typing.python.org/en/latest/spec/concepts.html#summary-of-type-relations
13221322
pub(crate) fn is_gradual_equivalent_to(self, db: &'db dyn Db, other: Type<'db>) -> bool {
13231323
if self == other {
13241324
return true;
@@ -3857,7 +3857,7 @@ impl<'db> Type<'db> {
38573857
) -> Result<Type<'db>, InvalidTypeExpressionError<'db>> {
38583858
match self {
38593859
// Special cases for `float` and `complex`
3860-
// https://typing.readthedocs.io/en/latest/spec/special-types.html#special-cases-for-float-and-complex
3860+
// https://typing.python.org/en/latest/spec/special-types.html#special-cases-for-float-and-complex
38613861
Type::ClassLiteral(class) => {
38623862
let ty = match class.known(db) {
38633863
Some(KnownClass::Any) => Type::any(),
@@ -5462,7 +5462,7 @@ pub enum KnownFunction {
54625462
/// `typing(_extensions).final`
54635463
Final,
54645464

5465-
/// [`typing(_extensions).no_type_check`](https://typing.readthedocs.io/en/latest/spec/directives.html#no-type-check)
5465+
/// [`typing(_extensions).no_type_check`](https://typing.python.org/en/latest/spec/directives.html#no-type-check)
54665466
NoTypeCheck,
54675467

54685468
/// `typing(_extensions).assert_type`

crates/red_knot_python_semantic/src/types/infer.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -6223,9 +6223,9 @@ impl<'db> TypeInferenceBuilder<'db> {
62236223
&mut self,
62246224
annotation: &ast::Expr,
62256225
) -> TypeAndQualifiers<'db> {
6226-
// https://typing.readthedocs.io/en/latest/spec/annotations.html#grammar-token-expression-grammar-annotation_expression
6226+
// https://typing.python.org/en/latest/spec/annotations.html#grammar-token-expression-grammar-annotation_expression
62276227
let annotation_ty = match annotation {
6228-
// String annotations: https://typing.readthedocs.io/en/latest/spec/annotations.html#string-annotations
6228+
// String annotations: https://typing.python.org/en/latest/spec/annotations.html#string-annotations
62296229
ast::Expr::StringLiteral(string) => self.infer_string_annotation_expression(string),
62306230

62316231
// Annotation expressions also get special handling for `*args` and `**kwargs`.
@@ -6420,7 +6420,7 @@ impl<'db> TypeInferenceBuilder<'db> {
64206420

64216421
/// Infer the type of a type expression without storing the result.
64226422
fn infer_type_expression_no_store(&mut self, expression: &ast::Expr) -> Type<'db> {
6423-
// https://typing.readthedocs.io/en/latest/spec/annotations.html#grammar-token-expression-grammar-type_expression
6423+
// https://typing.python.org/en/latest/spec/annotations.html#grammar-token-expression-grammar-type_expression
64246424
match expression {
64256425
ast::Expr::Name(name) => match name.ctx {
64266426
ast::ExprContext::Load => self
@@ -6446,7 +6446,7 @@ impl<'db> TypeInferenceBuilder<'db> {
64466446

64476447
ast::Expr::NoneLiteral(_literal) => Type::none(self.db()),
64486448

6449-
// https://typing.readthedocs.io/en/latest/spec/annotations.html#string-annotations
6449+
// https://typing.python.org/en/latest/spec/annotations.html#string-annotations
64506450
ast::Expr::StringLiteral(string) => self.infer_string_type_expression(string),
64516451

64526452
ast::Expr::Subscript(subscript) => {

crates/red_knot_vendored/vendor/typeshed/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ it before submitting pull requests; do not report issues with annotations to
1919
the project the stubs are for, but instead report them here to typeshed.**
2020

2121
Further documentation on stub files, typeshed, and Python's typing system in
22-
general, can also be found at https://typing.readthedocs.io/en/latest/.
22+
general, can also be found at https://typing.python.org/en/latest/.
2323

2424
Typeshed supports Python versions 3.9 to 3.13.
2525

crates/ruff/tests/snapshots/integration_test__rule_f401.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,6 @@ else:
9191
## References
9292
- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)
9393
- [Python documentation: `importlib.util.find_spec`](https://docs.python.org/3/library/importlib.html#importlib.util.find_spec)
94-
- [Typing documentation: interface conventions](https://typing.readthedocs.io/en/latest/source/libraries.html#library-interface-public-and-private-symbols)
94+
- [Typing documentation: interface conventions](https://typing.python.org/en/latest/source/libraries.html#library-interface-public-and-private-symbols)
9595

9696
----- stderr -----

crates/ruff_linter/src/message/snapshots/ruff_linter__message__sarif__tests__results.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ expression: value
8181
"rules": [
8282
{
8383
"fullDescription": {
84-
"text": "## What it does\nChecks for unused imports.\n\n## Why is this bad?\nUnused imports add a performance overhead at runtime, and risk creating\nimport cycles. They also increase the cognitive load of reading the code.\n\nIf an import statement is used to check for the availability or existence\nof a module, consider using `importlib.util.find_spec` instead.\n\nIf an import statement is used to re-export a symbol as part of a module's\npublic interface, consider using a \"redundant\" import alias, which\ninstructs Ruff (and other tools) to respect the re-export, and avoid\nmarking it as unused, as in:\n\n```python\nfrom module import member as member\n```\n\nAlternatively, you can use `__all__` to declare a symbol as part of the module's\ninterface, as in:\n\n```python\n# __init__.py\nimport some_module\n\n__all__ = [\"some_module\"]\n```\n\n## Fix safety\n\nFixes to remove unused imports are safe, except in `__init__.py` files.\n\nApplying fixes to `__init__.py` files is currently in preview. The fix offered depends on the\ntype of the unused import. Ruff will suggest a safe fix to export first-party imports with\neither a redundant alias or, if already present in the file, an `__all__` entry. If multiple\n`__all__` declarations are present, Ruff will not offer a fix. Ruff will suggest an unsafe fix\nto remove third-party and standard library imports -- the fix is unsafe because the module's\ninterface changes.\n\n## Example\n\n```python\nimport numpy as np # unused import\n\n\ndef area(radius):\n return 3.14 * radius**2\n```\n\nUse instead:\n\n```python\ndef area(radius):\n return 3.14 * radius**2\n```\n\nTo check the availability of a module, use `importlib.util.find_spec`:\n\n```python\nfrom importlib.util import find_spec\n\nif find_spec(\"numpy\") is not None:\n print(\"numpy is installed\")\nelse:\n print(\"numpy is not installed\")\n```\n\n## Options\n- `lint.ignore-init-module-imports`\n- `lint.pyflakes.allowed-unused-imports`\n\n## References\n- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)\n- [Python documentation: `importlib.util.find_spec`](https://docs.python.org/3/library/importlib.html#importlib.util.find_spec)\n- [Typing documentation: interface conventions](https://typing.readthedocs.io/en/latest/source/libraries.html#library-interface-public-and-private-symbols)\n"
84+
"text": "## What it does\nChecks for unused imports.\n\n## Why is this bad?\nUnused imports add a performance overhead at runtime, and risk creating\nimport cycles. They also increase the cognitive load of reading the code.\n\nIf an import statement is used to check for the availability or existence\nof a module, consider using `importlib.util.find_spec` instead.\n\nIf an import statement is used to re-export a symbol as part of a module's\npublic interface, consider using a \"redundant\" import alias, which\ninstructs Ruff (and other tools) to respect the re-export, and avoid\nmarking it as unused, as in:\n\n```python\nfrom module import member as member\n```\n\nAlternatively, you can use `__all__` to declare a symbol as part of the module's\ninterface, as in:\n\n```python\n# __init__.py\nimport some_module\n\n__all__ = [\"some_module\"]\n```\n\n## Fix safety\n\nFixes to remove unused imports are safe, except in `__init__.py` files.\n\nApplying fixes to `__init__.py` files is currently in preview. The fix offered depends on the\ntype of the unused import. Ruff will suggest a safe fix to export first-party imports with\neither a redundant alias or, if already present in the file, an `__all__` entry. If multiple\n`__all__` declarations are present, Ruff will not offer a fix. Ruff will suggest an unsafe fix\nto remove third-party and standard library imports -- the fix is unsafe because the module's\ninterface changes.\n\n## Example\n\n```python\nimport numpy as np # unused import\n\n\ndef area(radius):\n return 3.14 * radius**2\n```\n\nUse instead:\n\n```python\ndef area(radius):\n return 3.14 * radius**2\n```\n\nTo check the availability of a module, use `importlib.util.find_spec`:\n\n```python\nfrom importlib.util import find_spec\n\nif find_spec(\"numpy\") is not None:\n print(\"numpy is installed\")\nelse:\n print(\"numpy is not installed\")\n```\n\n## Options\n- `lint.ignore-init-module-imports`\n- `lint.pyflakes.allowed-unused-imports`\n\n## References\n- [Python documentation: `import`](https://docs.python.org/3/reference/simple_stmts.html#the-import-statement)\n- [Python documentation: `importlib.util.find_spec`](https://docs.python.org/3/library/importlib.html#importlib.util.find_spec)\n- [Typing documentation: interface conventions](https://typing.python.org/en/latest/source/libraries.html#library-interface-public-and-private-symbols)\n"
8585
},
8686
"help": {
8787
"text": "`{name}` imported but unused; consider using `importlib.util.find_spec` to test for availability"

crates/ruff_linter/src/rules/flake8_annotations/rules/definition.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ impl Violation for MissingReturnTypeClassMethod {
480480
/// ```
481481
///
482482
/// ## References
483-
/// - [Typing spec: `Any`](https://typing.readthedocs.io/en/latest/spec/special-types.html#any)
483+
/// - [Typing spec: `Any`](https://typing.python.org/en/latest/spec/special-types.html#any)
484484
/// - [Python documentation: `typing.Any`](https://docs.python.org/3/library/typing.html#typing.Any)
485485
/// - [Mypy documentation: The Any type](https://mypy.readthedocs.io/en/stable/kinds_of_types.html#the-any-type)
486486
#[derive(ViolationMetadata)]

crates/ruff_linter/src/rules/flake8_pyi/rules/complex_if_statement_in_stub.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::checkers::ast::Checker;
3030
/// ```
3131
///
3232
/// ## References
33-
/// - [Typing documentation: Version and platform checking](https://typing.readthedocs.io/en/latest/spec/directives.html#version-and-platform-checks)
33+
/// - [Typing documentation: Version and platform checking](https://typing.python.org/en/latest/spec/directives.html#version-and-platform-checks)
3434
#[derive(ViolationMetadata)]
3535
pub(crate) struct ComplexIfStatementInStub;
3636

crates/ruff_linter/src/rules/flake8_pyi/rules/future_annotations_in_stub.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::{checkers::ast::Checker, fix};
1616
/// statement has no effect and should be omitted.
1717
///
1818
/// ## References
19-
/// - [Static Typing with Python: Type Stubs](https://typing.readthedocs.io/en/latest/source/stubs.html)
19+
/// - [Static Typing with Python: Type Stubs](https://typing.python.org/en/latest/source/stubs.html)
2020
#[derive(ViolationMetadata)]
2121
pub(crate) struct FutureAnnotationsInStub;
2222

crates/ruff_linter/src/rules/flake8_pyi/rules/non_empty_stub_body.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use crate::checkers::ast::Checker;
2626
/// ```
2727
///
2828
/// ## References
29-
/// - [Typing documentation - Writing and Maintaining Stub Files](https://typing.readthedocs.io/en/latest/guides/writing_stubs.html)
29+
/// - [Typing documentation - Writing and Maintaining Stub Files](https://typing.python.org/en/latest/guides/writing_stubs.html)
3030
#[derive(ViolationMetadata)]
3131
pub(crate) struct NonEmptyStubBody;
3232

0 commit comments

Comments
 (0)