diff --git a/resources/test/fixtures/F401.py b/resources/test/fixtures/F401.py index 5d130f3755..3bb103d866 100644 --- a/resources/test/fixtures/F401.py +++ b/resources/test/fixtures/F401.py @@ -67,7 +67,22 @@ c = cast("Vegetable", b) Field = lambda default=MISSING: field(default=default) +# Test: access a sub-importation via an alias. import pyarrow as pa import pyarrow.csv print(pa.csv.read_csv("test.csv")) + + +# Test: referencing an import via TypeAlias. +import sys + +import numpy as np + +if sys.version_info >= (3, 10): + from typing import TypeAlias +else: + from typing_extensions import TypeAlias + + +CustomInt: TypeAlias = "np.int8 | np.int16" diff --git a/src/ast/visitor.rs b/src/ast/visitor.rs index d47fbdaaa2..911e55a43a 100644 --- a/src/ast/visitor.rs +++ b/src/ast/visitor.rs @@ -1,3 +1,4 @@ +use crate::ast::helpers::match_name_or_attr; use rustpython_parser::ast::{ Alias, Arg, Arguments, Boolop, Cmpop, Comprehension, Constant, Excepthandler, ExcepthandlerKind, Expr, ExprContext, ExprKind, Keyword, MatchCase, Operator, Pattern, @@ -148,7 +149,11 @@ pub fn walk_stmt<'a, V: Visitor<'a> + ?Sized>(visitor: &mut V, stmt: &'a Stmt) { } => { visitor.visit_annotation(annotation); if let Some(expr) = value { - visitor.visit_expr(expr); + if match_name_or_attr(annotation, "TypeAlias") { + visitor.visit_annotation(expr); + } else { + visitor.visit_expr(expr); + } } visitor.visit_expr(target); }