mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 13:03:31 +00:00
Move feature desugaring to the right abstraction layer
This commit is contained in:
parent
7be0a29c63
commit
d3110859ba
2 changed files with 12 additions and 18 deletions
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
mod cfg_expr;
|
mod cfg_expr;
|
||||||
|
|
||||||
use std::iter::IntoIterator;
|
|
||||||
|
|
||||||
use ra_syntax::SmolStr;
|
use ra_syntax::SmolStr;
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::FxHashSet;
|
||||||
|
|
||||||
|
@ -48,18 +46,4 @@ impl CfgOptions {
|
||||||
pub fn insert_key_value(&mut self, key: SmolStr, value: SmolStr) {
|
pub fn insert_key_value(&mut self, key: SmolStr, value: SmolStr) {
|
||||||
self.key_values.insert((key, value));
|
self.key_values.insert((key, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Shortcut to set features
|
|
||||||
pub fn insert_features(&mut self, iter: impl IntoIterator<Item = SmolStr>) {
|
|
||||||
iter.into_iter().for_each(|feat| self.insert_key_value("feature".into(), feat));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Shortcut to set cfgs
|
|
||||||
pub fn insert_cfgs(&mut self, iter: impl IntoIterator<Item = SmolStr>) {
|
|
||||||
iter.into_iter().for_each(|cfg| match cfg.find('=') {
|
|
||||||
Some(split) => self
|
|
||||||
.insert_key_value(cfg[0..split].into(), cfg[split + 1..].trim_matches('"').into()),
|
|
||||||
None => self.insert_atom(cfg),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -398,8 +398,18 @@ impl ProjectWorkspace {
|
||||||
let edition = cargo[pkg].edition;
|
let edition = cargo[pkg].edition;
|
||||||
let cfg_options = {
|
let cfg_options = {
|
||||||
let mut opts = default_cfg_options.clone();
|
let mut opts = default_cfg_options.clone();
|
||||||
opts.insert_features(cargo[pkg].features.iter().map(Into::into));
|
for feature in cargo[pkg].features.iter() {
|
||||||
opts.insert_cfgs(cargo[pkg].cfgs.iter().map(Into::into));
|
opts.insert_key_value("feature".into(), feature.into());
|
||||||
|
}
|
||||||
|
for cfg in cargo[pkg].cfgs.iter() {
|
||||||
|
match cfg.find('=') {
|
||||||
|
Some(split) => opts.insert_key_value(
|
||||||
|
cfg[..split].into(),
|
||||||
|
cfg[split + 1..].trim_matches('"').into(),
|
||||||
|
),
|
||||||
|
None => opts.insert_atom(cfg.into()),
|
||||||
|
};
|
||||||
|
}
|
||||||
opts
|
opts
|
||||||
};
|
};
|
||||||
let mut env = Env::default();
|
let mut env = Env::default();
|
||||||
|
|
Loading…
Reference in a new issue