diff --git a/crates/ruff/tests/analyze_graph.rs b/crates/ruff/tests/analyze_graph.rs index fb678f28557f8..28cfba740aed4 100644 --- a/crates/ruff/tests/analyze_graph.rs +++ b/crates/ruff/tests/analyze_graph.rs @@ -305,3 +305,65 @@ fn exclude() -> Result<()> { Ok(()) } + +#[test] +fn wildcard() -> Result<()> { + let tempdir = TempDir::new()?; + let root = ChildPath::new(tempdir.path()); + + root.child("ruff").child("__init__.py").write_str("")?; + root.child("ruff") + .child("a.py") + .write_str(indoc::indoc! {r#" + from ruff.b import * + "#})?; + root.child("ruff") + .child("b.py") + .write_str(indoc::indoc! {r#" + from ruff import c + "#})?; + root.child("ruff") + .child("c.py") + .write_str(indoc::indoc! {r#" + from ruff.utils import * + "#})?; + + root.child("ruff") + .child("utils") + .child("__init__.py") + .write_str("from .helpers import *")?; + root.child("ruff") + .child("utils") + .child("helpers.py") + .write_str("")?; + + insta::with_settings!({ + filters => INSTA_FILTERS.to_vec(), + }, { + assert_cmd_snapshot!(command().current_dir(&root), @r###" + success: true + exit_code: 0 + ----- stdout ----- + { + "ruff/__init__.py": [], + "ruff/a.py": [ + "ruff/b.py" + ], + "ruff/b.py": [ + "ruff/c.py" + ], + "ruff/c.py": [ + "ruff/utils/__init__.py" + ], + "ruff/utils/__init__.py": [ + "ruff/utils/helpers.py" + ], + "ruff/utils/helpers.py": [] + } + + ----- stderr ----- + "###); + }); + + Ok(()) +} diff --git a/crates/ruff_graph/src/collector.rs b/crates/ruff_graph/src/collector.rs index b68518d2ac059..5b5aef5e95c12 100644 --- a/crates/ruff_graph/src/collector.rs +++ b/crates/ruff_graph/src/collector.rs @@ -90,8 +90,10 @@ impl<'ast> SourceOrderVisitor<'ast> for Collector<'_> { components.extend(module.split('.')); } - // Add the alias name. - components.push(alias.name.as_str()); + // Add the alias name, unless it's a wildcard import. + if alias.name.as_str() != "*" { + components.push(alias.name.as_str()); + } if let Some(module_name) = ModuleName::from_components(components) { self.imports.push(CollectedImport::ImportFrom(module_name));