about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2023-05-02 09:16:26 +0200
committerLukas Wirth <lukastw97@gmail.com>2023-05-02 17:33:58 +0200
commit16b3febcf54e932217c08cd4fc327f49705f82de (patch)
treeb2cd4f8b645a606cbe0a727b1baa55e0a08bbdf2
parent9c0c13ec8e47cfe487f46136b394c0372e957968 (diff)
downloadrust-16b3febcf54e932217c08cd4fc327f49705f82de.tar.gz
rust-16b3febcf54e932217c08cd4fc327f49705f82de.zip
Only pass unstable flags to cargo metadata from extra args config
-rw-r--r--crates/project-model/src/cargo_workspace.rs17
1 files changed, 15 insertions, 2 deletions
diff --git a/crates/project-model/src/cargo_workspace.rs b/crates/project-model/src/cargo_workspace.rs
index fb98d61963c..ea680b1b709 100644
--- a/crates/project-model/src/cargo_workspace.rs
+++ b/crates/project-model/src/cargo_workspace.rs
@@ -293,12 +293,25 @@ impl CargoWorkspace {
         }
         meta.current_dir(current_dir.as_os_str());
 
-        let mut other_options = config.extra_args.clone();
+        let mut other_options = vec![];
+        // cargo metadata only supports a subset of flags of what cargo usually accepts, and usually
+        // the only relevant flags for metadata here are unstable ones, so we pass those along
+        // but nothing else
+        let mut extra_args = config.extra_args.iter();
+        while let Some(arg) = extra_args.next() {
+            if arg == "-Z" {
+                if let Some(arg) = extra_args.next() {
+                    other_options.push("-Z".to_owned());
+                    other_options.push(arg.to_owned());
+                }
+            }
+        }
+
         if !targets.is_empty() {
             other_options.append(
                 &mut targets
                     .into_iter()
-                    .flat_map(|target| ["--filter-platform".to_string(), target])
+                    .flat_map(|target| ["--filter-platform".to_owned().to_string(), target])
                     .collect(),
             );
         }