aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorEdwin Cheng <[email protected]>2020-03-07 08:25:43 +0000
committerEdwin Cheng <[email protected]>2020-03-07 11:08:42 +0000
commit18f88ad10bed9f8d82a3a67c2bb9eb23995641a0 (patch)
treef6d9895dc110a963f147dee9140775853412fd30 /crates
parent919747c323359724b3b451a43ed82152014c73de (diff)
Prevent include! macro include itself
Diffstat (limited to 'crates')
-rw-r--r--crates/ra_hir_expand/src/builtin_macro.rs7
-rw-r--r--crates/ra_hir_ty/src/tests/macros.rs18
2 files changed, 24 insertions, 1 deletions
diff --git a/crates/ra_hir_expand/src/builtin_macro.rs b/crates/ra_hir_expand/src/builtin_macro.rs
index a57e9285f..9bc33cfa8 100644
--- a/crates/ra_hir_expand/src/builtin_macro.rs
+++ b/crates/ra_hir_expand/src/builtin_macro.rs
@@ -279,7 +279,12 @@ fn relative_file(db: &dyn AstDatabase, call_id: MacroCallId, path: &str) -> Opti
279 let call_site = call_id.as_file().original_file(db); 279 let call_site = call_id.as_file().original_file(db);
280 let path = RelativePath::new(&path); 280 let path = RelativePath::new(&path);
281 281
282 db.resolve_relative_path(call_site, &path) 282 let res = db.resolve_relative_path(call_site, &path)?;
283 // Prevent include itself
284 if res == call_site {
285 return None;
286 }
287 Some(res)
283} 288}
284 289
285fn include_expand( 290fn include_expand(
diff --git a/crates/ra_hir_ty/src/tests/macros.rs b/crates/ra_hir_ty/src/tests/macros.rs
index c86733ac3..ffa78b046 100644
--- a/crates/ra_hir_ty/src/tests/macros.rs
+++ b/crates/ra_hir_ty/src/tests/macros.rs
@@ -511,6 +511,24 @@ fn bar() -> u32 {0}
511} 511}
512 512
513#[test] 513#[test]
514fn infer_builtin_macros_include_itself_should_failed() {
515 let (db, pos) = TestDB::with_position(
516 r#"
517//- /main.rs
518#[rustc_builtin_macro]
519macro_rules! include {() => {}}
520
521include!("main.rs");
522
523fn main() {
524 0<|>
525}
526"#,
527 );
528 assert_eq!("i32", type_at_pos(&db, pos));
529}
530
531#[test]
514fn infer_builtin_macros_concat_with_lazy() { 532fn infer_builtin_macros_concat_with_lazy() {
515 assert_snapshot!( 533 assert_snapshot!(
516 infer(r#" 534 infer(r#"