about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <me@lukaswirth.dev>2025-07-27 21:33:02 +0000
committerGitHub <noreply@github.com>2025-07-27 21:33:02 +0000
commitc41536e79ec0e4607a62a29732d2a825dd746a80 (patch)
tree1e6a3ffa615f0402394949e4f83f1d154bedad1e
parentea927c03e24162642124eb7952ecdf0dd4d134cc (diff)
parent81bdfd39106bf2c6cd8caac4709a8465268016ff (diff)
downloadrust-c41536e79ec0e4607a62a29732d2a825dd746a80.tar.gz
rust-c41536e79ec0e4607a62a29732d2a825dd746a80.zip
Merge pull request #20319 from Veykril/push-znwukpmpsqxt
fix: Consider all produced artifacts for proc-macro dylib search
-rw-r--r--src/tools/rust-analyzer/crates/base-db/src/input.rs13
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/build_dependencies.rs14
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/toolchain_info/rustc_cfg.rs1
-rw-r--r--src/tools/rust-analyzer/crates/project-model/src/workspace.rs8
4 files changed, 15 insertions, 21 deletions
diff --git a/src/tools/rust-analyzer/crates/base-db/src/input.rs b/src/tools/rust-analyzer/crates/base-db/src/input.rs
index fdaebeaa934..0bf4fbdfbd6 100644
--- a/src/tools/rust-analyzer/crates/base-db/src/input.rs
+++ b/src/tools/rust-analyzer/crates/base-db/src/input.rs
@@ -31,7 +31,7 @@ pub enum ProcMacroLoadingError {
     Disabled,
     FailedToBuild,
     ExpectedProcMacroArtifact,
-    MissingDylibPath(Box<[String]>),
+    MissingDylibPath,
     NotYetBuilt,
     NoProcMacros,
     ProcMacroSrvError(Box<str>),
@@ -42,7 +42,7 @@ impl ProcMacroLoadingError {
             ProcMacroLoadingError::Disabled | ProcMacroLoadingError::NotYetBuilt => false,
             ProcMacroLoadingError::ExpectedProcMacroArtifact
             | ProcMacroLoadingError::FailedToBuild
-            | ProcMacroLoadingError::MissingDylibPath(_)
+            | ProcMacroLoadingError::MissingDylibPath
             | ProcMacroLoadingError::NoProcMacros
             | ProcMacroLoadingError::ProcMacroSrvError(_) => true,
         }
@@ -58,19 +58,12 @@ impl fmt::Display for ProcMacroLoadingError {
             }
             ProcMacroLoadingError::Disabled => write!(f, "proc-macro expansion is disabled"),
             ProcMacroLoadingError::FailedToBuild => write!(f, "proc-macro failed to build"),
-            ProcMacroLoadingError::MissingDylibPath(candidates) if candidates.is_empty() => {
+            ProcMacroLoadingError::MissingDylibPath => {
                 write!(
                     f,
                     "proc-macro crate built but the dylib path is missing, this indicates a problem with your build system."
                 )
             }
-            ProcMacroLoadingError::MissingDylibPath(candidates) => {
-                write!(
-                    f,
-                    "proc-macro crate built but the dylib path is missing, this indicates a problem with your build system. Candidates not considered due to not having a dynamic library extension: {}",
-                    candidates.join(", ")
-                )
-            }
             ProcMacroLoadingError::NotYetBuilt => write!(f, "proc-macro not yet built"),
             ProcMacroLoadingError::NoProcMacros => {
                 write!(f, "proc macro library has no proc macros")
diff --git a/src/tools/rust-analyzer/crates/project-model/src/build_dependencies.rs b/src/tools/rust-analyzer/crates/project-model/src/build_dependencies.rs
index 9888984934f..5bea74bed7e 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/build_dependencies.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/build_dependencies.rs
@@ -35,7 +35,7 @@ pub struct WorkspaceBuildScripts {
 #[derive(Debug, Clone, Default, PartialEq, Eq)]
 pub enum ProcMacroDylibPath {
     Path(AbsPathBuf),
-    DylibNotFound(Box<[Utf8PathBuf]>),
+    DylibNotFound,
     NotProcMacro,
     #[default]
     NotBuilt,
@@ -251,7 +251,7 @@ impl WorkspaceBuildScripts {
                     }) {
                         match proc_macro_dylibs.iter().find(|(name, _)| *name == package.name) {
                             Some((_, path)) => ProcMacroDylibPath::Path(path.clone()),
-                            _ => ProcMacroDylibPath::DylibNotFound(Box::default()),
+                            _ => ProcMacroDylibPath::DylibNotFound,
                         }
                     } else {
                         ProcMacroDylibPath::NotProcMacro
@@ -386,7 +386,11 @@ impl WorkspaceBuildScripts {
                             if data.proc_macro_dylib_path == ProcMacroDylibPath::NotBuilt {
                                 data.proc_macro_dylib_path = ProcMacroDylibPath::NotProcMacro;
                             }
-                            if message.target.kind.contains(&cargo_metadata::TargetKind::ProcMacro)
+                            if !matches!(data.proc_macro_dylib_path, ProcMacroDylibPath::Path(_))
+                                && message
+                                    .target
+                                    .kind
+                                    .contains(&cargo_metadata::TargetKind::ProcMacro)
                             {
                                 data.proc_macro_dylib_path =
                                     match message.filenames.iter().find(|file| is_dylib(file)) {
@@ -394,9 +398,7 @@ impl WorkspaceBuildScripts {
                                             let filename = AbsPath::assert(filename);
                                             ProcMacroDylibPath::Path(filename.to_owned())
                                         }
-                                        None => ProcMacroDylibPath::DylibNotFound(
-                                            message.filenames.clone().into_boxed_slice(),
-                                        ),
+                                        None => ProcMacroDylibPath::DylibNotFound,
                                     };
                             }
                         });
diff --git a/src/tools/rust-analyzer/crates/project-model/src/toolchain_info/rustc_cfg.rs b/src/tools/rust-analyzer/crates/project-model/src/toolchain_info/rustc_cfg.rs
index 6e06e88bf7a..ab69c8e0e4a 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/toolchain_info/rustc_cfg.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/toolchain_info/rustc_cfg.rs
@@ -65,6 +65,7 @@ fn rustc_print_cfg(
     let (sysroot, current_dir) = match config {
         QueryConfig::Cargo(sysroot, cargo_toml, _) => {
             let mut cmd = sysroot.tool(Tool::Cargo, cargo_toml.parent(), extra_env);
+            cmd.env("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly");
             cmd.args(["rustc", "-Z", "unstable-options"]).args(RUSTC_ARGS);
             if let Some(target) = target {
                 cmd.args(["--target", target]);
diff --git a/src/tools/rust-analyzer/crates/project-model/src/workspace.rs b/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
index f53c0ae7dc2..5b36e10fd69 100644
--- a/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
+++ b/src/tools/rust-analyzer/crates/project-model/src/workspace.rs
@@ -1639,7 +1639,7 @@ fn add_target_crate_root(
                 match proc_macro_dylib_path {
                     ProcMacroDylibPath::Path(path) => Ok((cargo_name.to_owned(), path.clone())),
                     ProcMacroDylibPath::NotBuilt => Err(ProcMacroLoadingError::NotYetBuilt),
-                    ProcMacroDylibPath::NotProcMacro | ProcMacroDylibPath::DylibNotFound(_)
+                    ProcMacroDylibPath::NotProcMacro | ProcMacroDylibPath::DylibNotFound
                         if has_errors =>
                     {
                         Err(ProcMacroLoadingError::FailedToBuild)
@@ -1647,10 +1647,8 @@ fn add_target_crate_root(
                     ProcMacroDylibPath::NotProcMacro => {
                         Err(ProcMacroLoadingError::ExpectedProcMacroArtifact)
                     }
-                    ProcMacroDylibPath::DylibNotFound(candidates) => {
-                        Err(ProcMacroLoadingError::MissingDylibPath(
-                            candidates.iter().map(ToString::to_string).collect(),
-                        ))
+                    ProcMacroDylibPath::DylibNotFound => {
+                        Err(ProcMacroLoadingError::MissingDylibPath)
                     }
                 }
             }