Skip to content

Commit 4333905

Browse files
committed
add support of feature flag for runnables #4464
Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
1 parent a7c8aa7 commit 4333905

File tree

2 files changed

+9
-21
lines changed

2 files changed

+9
-21
lines changed

crates/ra_cfg/src/cfg_expr.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,11 @@ impl CfgExpr {
3535
}
3636

3737
/// Return minimal features needed
38-
pub fn minimal_features_needed(&self) -> Option<Vec<SmolStr>> {
38+
pub fn minimal_features_needed(&self) -> Vec<SmolStr> {
3939
let mut features = vec![];
4040
self.collect_minimal_features_needed(&mut features);
41-
if features.is_empty() {
42-
None
43-
} else {
44-
Some(features)
45-
}
41+
42+
features
4643
}
4744

4845
fn collect_minimal_features_needed(&self, features: &mut Vec<SmolStr>) {
@@ -169,26 +166,26 @@ mod tests {
169166
let (subtree, _) = get_token_tree_generated(r#"#![cfg(feature = "baz")]"#);
170167
let cfg_expr = parse_cfg(&subtree);
171168

172-
assert_eq!(cfg_expr.minimal_features_needed().unwrap(), vec![SmolStr::new("baz")]);
169+
assert_eq!(cfg_expr.minimal_features_needed(), vec![SmolStr::new("baz")]);
173170

174171
let (subtree, _) =
175172
get_token_tree_generated(r#"#![cfg(all(feature = "baz", feature = "foo"))]"#);
176173
let cfg_expr = parse_cfg(&subtree);
177174

178175
assert_eq!(
179-
cfg_expr.minimal_features_needed().unwrap(),
176+
cfg_expr.minimal_features_needed(),
180177
vec![SmolStr::new("baz"), SmolStr::new("foo")]
181178
);
182179

183180
let (subtree, _) =
184181
get_token_tree_generated(r#"#![cfg(any(feature = "baz", feature = "foo", unix))]"#);
185182
let cfg_expr = parse_cfg(&subtree);
186183

187-
assert_eq!(cfg_expr.minimal_features_needed().unwrap(), vec![SmolStr::new("baz")]);
184+
assert_eq!(cfg_expr.minimal_features_needed(), vec![SmolStr::new("baz")]);
188185

189186
let (subtree, _) = get_token_tree_generated(r#"#![cfg(foo)]"#);
190187
let cfg_expr = parse_cfg(&subtree);
191188

192-
assert!(cfg_expr.minimal_features_needed().is_none());
189+
assert!(cfg_expr.minimal_features_needed().is_empty());
193190
}
194191
}

crates/ra_ide/src/runnables.rs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -190,17 +190,8 @@ fn runnable_mod(
190190

191191
fn get_features_needed(attrs: Attrs) -> Option<Vec<SmolStr>> {
192192
let cfg_expr = attrs.by_key("cfg").tt_values().map(|subtree| ra_cfg::parse_cfg(subtree));
193-
let features_needed = cfg_expr.fold(vec![], |mut acc, cfg| {
194-
if let Some(features_needed) = cfg.minimal_features_needed() {
195-
acc.extend(features_needed);
196-
}
197-
acc
198-
});
199-
if features_needed.is_empty() {
200-
None
201-
} else {
202-
Some(features_needed)
203-
}
193+
let features_needed = cfg_expr.map(|cfg| cfg.minimal_features_needed()).flatten().collect();
194+
Some(features_needed).filter(|it: &Vec<SmolStr>| !it.is_empty())
204195
}
205196

206197
#[cfg(test)]

0 commit comments

Comments
 (0)