about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2024-08-07 13:08:35 +0000
committerbors <bors@rust-lang.org>2024-08-07 13:08:35 +0000
commit6fc5d09ab28049c6e46af24472364aa2edf6e18f (patch)
tree01576dabbad76823b27a81c0a95c06475de94df7
parent359d5b92839c44f6d5f6d83a86df9187bc9d7f67 (diff)
parentc4809d0d6ec11b63f6e17beb41b7d69dbbc5ad3d (diff)
downloadrust-6fc5d09ab28049c6e46af24472364aa2edf6e18f.tar.gz
rust-6fc5d09ab28049c6e46af24472364aa2edf6e18f.zip
Auto merge of #17823 - Veykril:mod-unconfigured-diag, r=Veykril
fix: Fix unconfigured diagnostic being attached to the wrong file for modules

Fixes https://github.com/rust-lang/rust-analyzer/issues/17817
-rw-r--r--src/tools/rust-analyzer/crates/hir-def/src/nameres/collector.rs2
-rw-r--r--src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/inactive_code.rs26
2 files changed, 26 insertions, 2 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/nameres/collector.rs b/src/tools/rust-analyzer/crates/hir-def/src/nameres/collector.rs
index 483bffc4b29..d970dbac1c2 100644
--- a/src/tools/rust-analyzer/crates/hir-def/src/nameres/collector.rs
+++ b/src/tools/rust-analyzer/crates/hir-def/src/nameres/collector.rs
@@ -2003,7 +2003,7 @@ impl ModCollector<'_, '_> {
                             Err(cfg) => {
                                 self.emit_unconfigured_diagnostic(
                                     self.tree_id,
-                                    AttrOwner::TopLevel,
+                                    AttrOwner::ModItem(module_id.into()),
                                     &cfg,
                                 );
                             }
diff --git a/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/inactive_code.rs b/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/inactive_code.rs
index acff8116961..1f8f805a1e2 100644
--- a/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/inactive_code.rs
+++ b/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/inactive_code.rs
@@ -42,7 +42,10 @@ mod tests {
     use crate::{tests::check_diagnostics_with_config, DiagnosticsConfig};
 
     pub(crate) fn check(ra_fixture: &str) {
-        let config = DiagnosticsConfig::test_sample();
+        let config = DiagnosticsConfig {
+            disabled: std::iter::once("unlinked-file".to_owned()).collect(),
+            ..DiagnosticsConfig::test_sample()
+        };
         check_diagnostics_with_config(config, ra_fixture)
     }
 
@@ -171,4 +174,25 @@ union FooBar {
 "#,
         );
     }
+
+    #[test]
+    fn modules() {
+        check(
+            r#"
+//- /main.rs
+  #[cfg(outline)] mod outline;
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^ weak: code is inactive due to #[cfg] directives: outline is disabled
+
+  mod outline_inner;
+//^^^^^^^^^^^^^^^^^^ weak: code is inactive due to #[cfg] directives: outline_inner is disabled
+
+  #[cfg(inline)] mod inline {}
+//^^^^^^^^^^^^^^^^^^^^^^^^^^^^ weak: code is inactive due to #[cfg] directives: inline is disabled
+
+//- /outline_inner.rs
+#![cfg(outline_inner)]
+//- /outline.rs
+"#,
+        );
+    }
 }