From 20d55ce44d4260b6dce220ba64ce81f55299d2ce Mon Sep 17 00:00:00 2001 From: Edwin Cheng Date: Sat, 3 Apr 2021 12:50:55 +0800 Subject: Allow include! an empty content file --- crates/hir_def/src/nameres/tests/diagnostics.rs | 20 ++++++++++++++++++++ crates/hir_def/src/test_db.rs | 13 +++++++++++++ crates/mbe/src/syntax_bridge.rs | 3 --- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/crates/hir_def/src/nameres/tests/diagnostics.rs b/crates/hir_def/src/nameres/tests/diagnostics.rs index a89061c2e..fefdadb22 100644 --- a/crates/hir_def/src/nameres/tests/diagnostics.rs +++ b/crates/hir_def/src/nameres/tests/diagnostics.rs @@ -7,6 +7,11 @@ fn check_diagnostics(ra_fixture: &str) { db.check_diagnostics(); } +fn check_no_diagnostics(ra_fixture: &str) { + let db: TestDB = TestDB::with_files(ra_fixture); + db.check_no_diagnostics(); +} + #[test] fn unresolved_import() { check_diagnostics( @@ -201,6 +206,21 @@ fn builtin_macro_fails_expansion() { ); } +#[test] +fn include_macro_should_allow_empty_content() { + check_no_diagnostics( + r#" + //- /lib.rs + #[rustc_builtin_macro] + macro_rules! include { () => {} } + + include!("bar.rs"); + //- /bar.rs + // empty + "#, + ); +} + #[test] fn good_out_dir_diagnostic() { check_diagnostics( diff --git a/crates/hir_def/src/test_db.rs b/crates/hir_def/src/test_db.rs index 10977761c..dd36106f8 100644 --- a/crates/hir_def/src/test_db.rs +++ b/crates/hir_def/src/test_db.rs @@ -265,4 +265,17 @@ impl TestDB { assert_eq!(annotations, actual); } + + pub(crate) fn check_no_diagnostics(&self) { + let db: &TestDB = self; + let annotations = db.extract_annotations(); + assert!(annotations.is_empty()); + + let mut has_diagnostics = false; + db.diagnostics(|_| { + has_diagnostics = true; + }); + + assert!(!has_diagnostics); + } } diff --git a/crates/mbe/src/syntax_bridge.rs b/crates/mbe/src/syntax_bridge.rs index 9d433b3b0..ae0780072 100644 --- a/crates/mbe/src/syntax_bridge.rs +++ b/crates/mbe/src/syntax_bridge.rs @@ -325,9 +325,6 @@ trait TokenConvertor { while self.peek().is_some() { self.collect_leaf(&mut subtree.token_trees); } - if subtree.token_trees.is_empty() { - return None; - } if subtree.token_trees.len() == 1 { if let tt::TokenTree::Subtree(first) = &subtree.token_trees[0] { return Some(first.clone()); -- cgit v1.2.3