]> git.lizzy.rs Git - rust.git/commitdiff
Use empty-deps tricks to detect it is core
authorEdwin Cheng <edwin0cheng@gmail.com>
Mon, 27 Apr 2020 19:32:47 +0000 (03:32 +0800)
committerEdwin Cheng <edwin0cheng@gmail.com>
Mon, 27 Apr 2020 19:32:47 +0000 (03:32 +0800)
crates/ra_hir_expand/src/builtin_derive.rs
crates/ra_hir_ty/src/tests/macros.rs

index cc8c453472858e295dcf5e8a124d4253cbfc9ae7..3bd3f7041e9e0355aa04ce5f75d8e60d19039f2d 100644 (file)
@@ -160,11 +160,17 @@ fn find_builtin_crate(db: &dyn AstDatabase, id: LazyMacroId) -> tt::TokenTree {
     let m: MacroCallId = id.into();
     let file_id = m.as_file().original_file(db);
     let cg = db.crate_graph();
-    let crates = db.relevant_crates(file_id);
-    let mut crate_names =
-        crates.iter().filter_map(|krate| cg[*krate].display_name.clone()).map(|it| it.to_string());
+    let krates = db.relevant_crates(file_id);
+    let krate = match krates.get(0) {
+        Some(krate) => krate,
+        None => {
+            let tt = quote! { core };
+            return tt.token_trees[0].clone();
+        }
+    };
 
-    let tt = if crate_names.any(|name| name == "std" || name == "core") {
+    // Check whether it has any deps, if not, it should be core:
+    let tt = if cg[*krate].dependencies.is_empty() {
         quote! { crate }
     } else {
         quote! { core }
@@ -263,8 +269,18 @@ mod tests {
 
     fn expand_builtin_derive(s: &str, name: Name) -> String {
         let def = find_builtin_derive(&name).unwrap();
+        let fixture = format!(
+            r#"//- /main.rs crate:main deps:core
+<|>
+{}
+//- /lib.rs crate:core
+// empty
+"#,
+            s
+        );
 
-        let (db, file_id) = TestDB::with_single_file(&s);
+        let (db, file_pos) = TestDB::with_position(&fixture);
+        let file_id = file_pos.file_id;
         let parsed = db.parse(file_id);
         let items: Vec<_> =
             parsed.syntax_node().descendants().filter_map(ast::ModuleItem::cast).collect();
index ac5485bc97cd5449a5064514e4b4cb4fe66c5c9c..5ddecbdc6808bb728402d565f7a07c5e5ae03dc7 100644 (file)
@@ -646,12 +646,6 @@ trait Clone {
 fn infer_derive_clone_in_core() {
     let (db, pos) = TestDB::with_position(
         r#"
-//- /main.rs crate:main deps:core
-use core::S;
-fn test() {
-    S.clone()<|>;
-}
-
 //- /lib.rs crate:core
 #[prelude_import]
 use clone::*;
@@ -663,6 +657,11 @@ trait Clone {
 #[derive(Clone)]
 pub struct S;
 
+//- /main.rs crate:main deps:core
+use core::S;
+fn test() {
+    S.clone()<|>;
+}
 "#,
     );
     assert_eq!("S", type_at_pos(&db, pos));