[ty] make implicit submodule imports re-exported (#21573)

Thus they work in `.pyi` files

Closes https://github.com/astral-sh/ty/issues/1609

---------

Co-authored-by: Carl Meyer <carl@astral.sh>
This commit is contained in:
Aria Desires
2025-11-21 20:42:11 -05:00
committed by GitHub
parent 492d676736
commit 768bb24cdf
2 changed files with 10 additions and 14 deletions

View File

@@ -214,8 +214,8 @@ reveal_type(mypackage.imported.X) # revealed: Unknown
## Relative `from` Import of Nested Submodule in `__init__`
`from .submodule import nested` in an `__init__.pyi` does not re-export `mypackage.submodule`,
`mypackage.submodule.nested`, or `nested`.
`from .submodule import nested` in an `__init__.pyi` does re-export `mypackage.submodule`, but not
`mypackage.submodule.nested` or `nested`.
### In Stub
@@ -241,11 +241,10 @@ X: int = 42
```py
import mypackage
# error: "has no member `submodule`"
reveal_type(mypackage.submodule) # revealed: Unknown
# error: "has no member `submodule`"
reveal_type(mypackage.submodule) # revealed: <module 'mypackage.submodule'>
# error: "has no member `nested`"
reveal_type(mypackage.submodule.nested) # revealed: Unknown
# error: "has no member `submodule`"
# error: "has no member `nested`"
reveal_type(mypackage.submodule.nested.X) # revealed: Unknown
# error: "has no member `nested`"
reveal_type(mypackage.nested) # revealed: Unknown
@@ -318,12 +317,10 @@ X: int = 42
```py
import mypackage
# TODO: this could work and would be nice to have
# error: "has no member `submodule`"
reveal_type(mypackage.submodule) # revealed: Unknown
# error: "has no member `submodule`"
reveal_type(mypackage.submodule) # revealed: <module 'mypackage.submodule'>
# error: "has no member `nested`"
reveal_type(mypackage.submodule.nested) # revealed: Unknown
# error: "has no member `submodule`"
# error: "has no member `nested`"
reveal_type(mypackage.submodule.nested.X) # revealed: Unknown
# error: "has no member `nested`"
reveal_type(mypackage.nested) # revealed: Unknown
@@ -623,8 +620,7 @@ X: int = 42
```py
import mypackage
# error: "no member `imported`"
reveal_type(mypackage.imported.X) # revealed: Unknown
reveal_type(mypackage.imported.X) # revealed: int
```
### In Non-Stub

View File

@@ -702,7 +702,7 @@ impl DefinitionKind<'_> {
match self {
DefinitionKind::Import(import) => import.is_reexported(),
DefinitionKind::ImportFrom(import) => import.is_reexported(),
DefinitionKind::ImportFromSubmodule(_) => false,
DefinitionKind::ImportFromSubmodule(_) => true,
_ => true,
}
}