From 678c74430b099e1f615069d99674926a0b7ff892 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 8 Dec 2020 17:16:18 +0100 Subject: Handle macros in `TestDB::check_diagnostics` --- crates/hir_def/src/test_db.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/hir_def/src/test_db.rs b/crates/hir_def/src/test_db.rs index 00fe711fe..59c788b18 100644 --- a/crates/hir_def/src/test_db.rs +++ b/crates/hir_def/src/test_db.rs @@ -157,9 +157,16 @@ impl TestDB { db.diagnostics(|d| { let src = d.display_source(); let root = db.parse_or_expand(src.file_id).unwrap(); - // FIXME: macros... + + // Place all diagnostics emitted in macro files on the original caller. + // Note that this does *not* match IDE behavior. + let mut src = src.map(|ptr| ptr.to_node(&root)); + while let Some(exp) = src.file_id.call_node(db) { + src = exp; + } + let file_id = src.file_id.original_file(db); - let range = src.value.to_node(&root).text_range(); + let range = src.value.text_range(); let message = d.message().to_owned(); actual.entry(file_id).or_default().push((range, message)); }); -- cgit v1.2.3 From 6c1d29256902d16c520fe076ce06cb91d934b62f Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Tue, 8 Dec 2020 17:17:30 +0100 Subject: Add test for `$crate` in builtin macros Fixes #6716 --- crates/hir_def/src/body/tests.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/crates/hir_def/src/body/tests.rs b/crates/hir_def/src/body/tests.rs index 6dba9817d..de77d5fc9 100644 --- a/crates/hir_def/src/body/tests.rs +++ b/crates/hir_def/src/body/tests.rs @@ -134,3 +134,31 @@ fn f() { "#, ); } + +#[test] +fn dollar_crate_in_builtin_macro() { + check_diagnostics( + r#" +#[macro_export] +#[rustc_builtin_macro] +macro_rules! format_args {} + +#[macro_export] +macro_rules! arg { + () => {} +} + +#[macro_export] +macro_rules! outer { + () => { + $crate::format_args!( "", $crate::arg!(1) ) + }; +} + +fn f() { + outer!(); + //^^^^^^^^ leftover tokens +} + "#, + ) +} -- cgit v1.2.3