Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: struct holding cargo cfgs settings #18885

Merged
merged 3 commits into from
Jan 9, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
refactor: struct holding cargo cfgs settings
  • Loading branch information
qjerome committed Jan 8, 2025
commit 1c5a125beb35725ccc2ade005db9870db734bf23
21 changes: 15 additions & 6 deletions crates/rust-analyzer/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -571,12 +571,10 @@ config_data! {
/// avoid checking unnecessary things.
cargo_buildScripts_useRustcWrapper: bool = true,
/// List of cfg options to enable with the given values.
cargo_cfgs: FxHashMap<String, Option<String>> = {
let mut m = FxHashMap::default();
m.insert("debug_assertions".to_owned(), None);
m.insert("miri".to_owned(), None);
m
},
cargo_cfgs: Vec<String> = {
vec!["debug_assertion".into(), "miri".into()]
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}
},

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

,
/// Extra arguments that are passed to every cargo invocation.
cargo_extraArgs: Vec<String> = vec![],
/// Extra environment variables that will be set when running cargo, rustc
Expand Down Expand Up @@ -1944,6 +1942,17 @@ impl Config {
global: CfgDiff::new(
self.cargo_cfgs(source_root)
.iter()
// parse any cfg setting formatted as key=value
.map(|s| {
let mut sp = s.splitn(2, "=");
let key = sp.next();
let val = sp.next();
(key, val)
})
// we filter out anything with a None key
.filter(|(key, _)| key.is_some())
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can avoid the unwrap and do this in one step using filter_map.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

// unwrap cannot panic here as we are sure key is Some
.map(|(key, val)| (key.unwrap(), val))
.map(|(key, val)| match val {
Some(val) => CfgAtom::KeyValue {
key: Symbol::intern(key),
Expand Down
Loading