Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-def/src/body/lower.rs1
-rw-r--r--crates/ide-diagnostics/src/handlers/no_such_field.rs30
2 files changed, 31 insertions, 0 deletions
diff --git a/crates/hir-def/src/body/lower.rs b/crates/hir-def/src/body/lower.rs
index 5fc4867bfa..492ea6d5c5 100644
--- a/crates/hir-def/src/body/lower.rs
+++ b/crates/hir-def/src/body/lower.rs
@@ -1335,6 +1335,7 @@ impl ExprCollector<'_> {
let args = record_pat_field_list
.fields()
.filter_map(|f| {
+ self.check_cfg(&f)?;
let ast_pat = f.pat()?;
let pat = self.collect_pat(ast_pat, binding_list);
let name = f.field_name()?.as_name();
diff --git a/crates/ide-diagnostics/src/handlers/no_such_field.rs b/crates/ide-diagnostics/src/handlers/no_such_field.rs
index 5a20246cdd..8d77e566ed 100644
--- a/crates/ide-diagnostics/src/handlers/no_such_field.rs
+++ b/crates/ide-diagnostics/src/handlers/no_such_field.rs
@@ -129,6 +129,36 @@ mod tests {
use crate::tests::{check_diagnostics, check_fix, check_no_fix};
#[test]
+ fn dont_work_for_field_with_disabled_cfg() {
+ check_diagnostics(
+ r#"
+struct Test {
+ #[cfg(feature = "hello")]
+ test: u32,
+ other: u32
+}
+
+fn main() {
+ let a = Test {
+ #[cfg(feature = "hello")]
+ test: 1,
+ other: 1
+ };
+
+ let Test {
+ #[cfg(feature = "hello")]
+ test,
+ mut other,
+ ..
+ } = a;
+
+ other += 1;
+}
+"#,
+ );
+ }
+
+ #[test]
fn no_such_field_diagnostics() {
check_diagnostics(
r#"