diff --git a/crates/ty/tests/file_watching.rs b/crates/ty/tests/file_watching.rs index ba16bc8c3f..950cf82a84 100644 --- a/crates/ty/tests/file_watching.rs +++ b/crates/ty/tests/file_watching.rs @@ -1912,7 +1912,7 @@ fn submodule_cache_invalidation_created() -> anyhow::Result<()> { insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), - @"foo", + @"bar.foo", ); std::fs::write(case.project_path("bar/wazoo.py").as_std_path(), "")?; @@ -1922,8 +1922,8 @@ fn submodule_cache_invalidation_created() -> anyhow::Result<()> { insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), @r" - foo - wazoo + bar.foo + bar.wazoo ", ); @@ -1944,8 +1944,8 @@ fn submodule_cache_invalidation_deleted() -> anyhow::Result<()> { insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), @r" - foo - wazoo + bar.foo + bar.wazoo ", ); @@ -1955,7 +1955,7 @@ fn submodule_cache_invalidation_deleted() -> anyhow::Result<()> { insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), - @"foo", + @"bar.foo", ); Ok(()) @@ -1969,7 +1969,7 @@ fn submodule_cache_invalidation_created_then_deleted() -> anyhow::Result<()> { insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), - @"foo", + @"bar.foo", ); std::fs::write(case.project_path("bar/wazoo.py").as_std_path(), "")?; @@ -1982,7 +1982,7 @@ fn submodule_cache_invalidation_created_then_deleted() -> anyhow::Result<()> { insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), - @"foo", + @"bar.foo", ); Ok(()) @@ -1997,7 +1997,7 @@ fn submodule_cache_invalidation_after_pyproject_created() -> anyhow::Result<()> insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), - @"foo", + @"bar.foo", ); case.update_options(Options::default())?; @@ -2009,8 +2009,8 @@ fn submodule_cache_invalidation_after_pyproject_created() -> anyhow::Result<()> insta::assert_snapshot!( case.sorted_submodule_names("bar").join("\n"), @r" - foo - wazoo + bar.foo + bar.wazoo ", ); diff --git a/crates/ty_python_semantic/src/module_resolver/module.rs b/crates/ty_python_semantic/src/module_resolver/module.rs index 7d61e65818..c51e77aa81 100644 --- a/crates/ty_python_semantic/src/module_resolver/module.rs +++ b/crates/ty_python_semantic/src/module_resolver/module.rs @@ -203,7 +203,9 @@ fn all_submodule_names_for_package<'db>( }) .filter_map(|entry| { let stem = entry.path().file_stem()?; - let name = ModuleName::new(stem)?; + let mut name = module.name(db).clone(); + name.extend(&ModuleName::new(stem)?); + let (kind, file) = if entry.file_type().is_directory() { ( ModuleKind::Package, @@ -239,7 +241,9 @@ fn all_submodule_names_for_package<'db>( }) .filter_map(|entry| { let stem = entry.path().file_stem()?; - let name = ModuleName::new(stem)?; + let mut name = module.name(db).clone(); + name.extend(&ModuleName::new(stem)?); + let (kind, file) = if entry.file_type().is_directory() { ( ModuleKind::Package, diff --git a/crates/ty_python_semantic/src/semantic_model.rs b/crates/ty_python_semantic/src/semantic_model.rs index 489929c9ba..25c05e437d 100644 --- a/crates/ty_python_semantic/src/semantic_model.rs +++ b/crates/ty_python_semantic/src/semantic_model.rs @@ -181,8 +181,11 @@ impl<'db> SemanticModel<'db> { let mut completions = vec![]; for submodule in module.all_submodules(self.db) { let ty = Type::module_literal(self.db, self.file, *submodule); + let Some(base) = submodule.name(self.db).components().next_back() else { + continue; + }; completions.push(Completion { - name: Name::new(submodule.name(self.db).as_str()), + name: Name::new(base), ty: Some(ty), kind: None, builtin,