]> git.lizzy.rs Git - rust.git/commitdiff
Handle start imports in import groups
authorAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 19 Dec 2019 15:57:22 +0000 (16:57 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Thu, 19 Dec 2019 15:57:22 +0000 (16:57 +0100)
crates/ra_hir_def/src/marks.rs
crates/ra_hir_def/src/nameres/tests/globs.rs
crates/ra_hir_def/src/path/lower/lower_use.rs

index 65239ca0a48b6f4e99554845cf5482e486a36a6f..457ba4abec05b1737cdd06e2ead1ecb4c9213684 100644 (file)
@@ -5,6 +5,7 @@
     name_res_works_for_broken_modules
     can_import_enum_variant
     glob_enum
+    glob_enum_group
     glob_across_crates
     std_prelude
     macro_rules_from_other_crates_are_visible_with_macro_use
index 5b03fe36504a46cc2475be629188112c06e545b4..5e24cb94d64dc97fcb141557979c3b7bda5ce97d 100644 (file)
@@ -112,3 +112,24 @@ enum Foo {
     "###
     );
 }
+
+#[test]
+fn glob_enum_group() {
+    covers!(glob_enum_group);
+    let map = def_map(
+        "
+        //- /lib.rs
+        enum Foo {
+            Bar, Baz
+        }
+        use self::Foo::{*};
+        ",
+    );
+    assert_snapshot!(map, @r###"
+   ⋮crate
+   ⋮Bar: t v
+   ⋮Baz: t v
+   ⋮Foo: t
+    "###
+    );
+}
index 062c02063e50c18dc8df305840a008694a5e28c2..3218eaf0a28c4fe07affcec7d07ab7c734691bb0 100644 (file)
@@ -9,6 +9,7 @@
     name::{AsName, Name},
 };
 use ra_syntax::ast::{self, NameOwner};
+use test_utils::tested_by;
 
 use crate::path::{ModPath, PathKind};
 
@@ -34,6 +35,7 @@ pub(crate) fn lower_use_tree(
         }
     } else {
         let alias = tree.alias().and_then(|a| a.name()).map(|a| a.as_name());
+        let is_glob = tree.has_star();
         if let Some(ast_path) = tree.path() {
             // Handle self in a path.
             // E.g. `use something::{self, <...>}`
@@ -48,11 +50,15 @@ pub(crate) fn lower_use_tree(
                 }
             }
             if let Some(path) = convert_path(prefix, ast_path, hygiene) {
-                let is_glob = tree.has_star();
                 cb(path, &tree, is_glob, alias)
             }
-            // FIXME: report errors somewhere
-            // We get here if we do
+        // FIXME: report errors somewhere
+        // We get here if we do
+        } else if is_glob {
+            tested_by!(glob_enum_group);
+            if let Some(prefix) = prefix {
+                cb(prefix, &tree, is_glob, None)
+            }
         }
     }
 }