Repository: rust-analyzer/rust-analyzer (rust)

Issue:
include! macro should allow empty content file
```rust
//- /lib.rs
include!("bar.rs");    // <-- ERROR: could not convert tokens

//- /bar.rs
// empty
```

Pull request description:
Allow include! an empty content file
fixes #8306

bors r+

Patch:
diff --git a/crates/mbe/src/syntax_bridge.rs b/crates/mbe/src/syntax_bridge.rs
index 9d433b3b0b..ae0780072a 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());


Test patch:
diff --git a/crates/hir_def/src/nameres/tests/diagnostics.rs b/crates/hir_def/src/nameres/tests/diagnostics.rs
index a89061c2e8..fefdadb225 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 10977761c9..dd36106f8d 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);
+    }
 }