diff options
author | Benjamin Coenen <[email protected]> | 2020-04-25 14:48:04 +0100 |
---|---|---|
committer | Benjamin Coenen <[email protected]> | 2020-04-25 14:48:04 +0100 |
commit | b87b335e6859ead3baa7fde20e3ea2ac69f63d85 (patch) | |
tree | 1d27336c626c070e87069911aebc54db8d3ba98b | |
parent | 05981823bac91ba338110902fd435c6e3166f1d6 (diff) |
add support for cfg feature attributes on expression #4063
Signed-off-by: Benjamin Coenen <[email protected]>
-rw-r--r-- | crates/ra_hir_def/src/body/lower.rs | 4 | ||||
-rw-r--r-- | crates/ra_hir_ty/src/tests.rs | 32 |
2 files changed, 36 insertions, 0 deletions
diff --git a/crates/ra_hir_def/src/body/lower.rs b/crates/ra_hir_def/src/body/lower.rs index 0caedd8d8..571603854 100644 --- a/crates/ra_hir_def/src/body/lower.rs +++ b/crates/ra_hir_def/src/body/lower.rs | |||
@@ -141,6 +141,10 @@ impl ExprCollector<'_> { | |||
141 | 141 | ||
142 | fn collect_expr(&mut self, expr: ast::Expr) -> ExprId { | 142 | fn collect_expr(&mut self, expr: ast::Expr) -> ExprId { |
143 | let syntax_ptr = AstPtr::new(&expr); | 143 | let syntax_ptr = AstPtr::new(&expr); |
144 | let attrs = self.expander.parse_attrs(&expr); | ||
145 | if !self.expander.is_cfg_enabled(&attrs) { | ||
146 | return self.missing_expr(); | ||
147 | } | ||
144 | match expr { | 148 | match expr { |
145 | ast::Expr::IfExpr(e) => { | 149 | ast::Expr::IfExpr(e) => { |
146 | let then_branch = self.collect_block_opt(e.then_branch()); | 150 | let then_branch = self.collect_block_opt(e.then_branch()); |
diff --git a/crates/ra_hir_ty/src/tests.rs b/crates/ra_hir_ty/src/tests.rs index b6a96bb5c..588d81282 100644 --- a/crates/ra_hir_ty/src/tests.rs +++ b/crates/ra_hir_ty/src/tests.rs | |||
@@ -391,6 +391,38 @@ fn no_such_field_with_feature_flag_diagnostics_on_struct_lit() { | |||
391 | } | 391 | } |
392 | 392 | ||
393 | #[test] | 393 | #[test] |
394 | fn no_such_field_with_feature_flag_diagnostics_on_block_expr() { | ||
395 | let diagnostics = TestDB::with_files( | ||
396 | r#" | ||
397 | //- /lib.rs crate:foo cfg:feature=foo | ||
398 | struct S { | ||
399 | #[cfg(feature = "foo")] | ||
400 | foo: u32, | ||
401 | #[cfg(not(feature = "foo"))] | ||
402 | bar: u32, | ||
403 | } | ||
404 | |||
405 | impl S { | ||
406 | fn new(bar: u32) -> Self { | ||
407 | #[cfg(feature = "foo")] | ||
408 | { | ||
409 | Self { foo: bar } | ||
410 | } | ||
411 | #[cfg(not(feature = "foo"))] | ||
412 | { | ||
413 | Self { bar } | ||
414 | } | ||
415 | } | ||
416 | } | ||
417 | "#, | ||
418 | ) | ||
419 | .diagnostics() | ||
420 | .0; | ||
421 | |||
422 | assert_snapshot!(diagnostics, @r###""###); | ||
423 | } | ||
424 | |||
425 | #[test] | ||
394 | fn no_such_field_with_feature_flag_diagnostics_on_struct_fields() { | 426 | fn no_such_field_with_feature_flag_diagnostics_on_struct_fields() { |
395 | let diagnostics = TestDB::with_files( | 427 | let diagnostics = TestDB::with_files( |
396 | r#" | 428 | r#" |