From 3421b645e6f7d15ddad0e8e526d8a7db09b72516 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 22 Oct 2020 19:19:18 +0200 Subject: Emit better #[cfg] diagnostics --- crates/hir_def/src/attr.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'crates/hir_def/src/attr.rs') diff --git a/crates/hir_def/src/attr.rs b/crates/hir_def/src/attr.rs index dea552a60..b2ce7ca3c 100644 --- a/crates/hir_def/src/attr.rs +++ b/crates/hir_def/src/attr.rs @@ -125,12 +125,20 @@ impl Attrs { AttrQuery { attrs: self, key } } - pub fn cfg(&self) -> impl Iterator + '_ { + pub fn cfg(&self) -> Option { // FIXME: handle cfg_attr :-) - self.by_key("cfg").tt_values().map(CfgExpr::parse) + let mut cfgs = self.by_key("cfg").tt_values().map(CfgExpr::parse).collect::>(); + match cfgs.len() { + 0 => None, + 1 => Some(cfgs.pop().unwrap()), + _ => Some(CfgExpr::All(cfgs)), + } } pub(crate) fn is_cfg_enabled(&self, cfg_options: &CfgOptions) -> bool { - self.cfg().all(|cfg| cfg_options.check(&cfg) != Some(false)) + match self.cfg() { + None => true, + Some(cfg) => cfg_options.check(&cfg) != Some(false), + } } } -- cgit v1.2.3