@@ -12,6 +12,7 @@ use base_db::{
1212use cfg:: { CfgDiff , CfgOptions } ;
1313use paths:: { AbsPath , AbsPathBuf } ;
1414use rustc_hash:: { FxHashMap , FxHashSet } ;
15+ use semver:: Version ;
1516use stdx:: always;
1617
1718use crate :: {
@@ -77,6 +78,7 @@ pub enum ProjectWorkspace {
7778 /// different target.
7879 rustc_cfg : Vec < CfgFlag > ,
7980 cfg_overrides : CfgOverrides ,
81+ toolchain : Option < Version > ,
8082 } ,
8183 /// Project workspace was manually specified using a `rust-project.json` file.
8284 Json { project : ProjectJson , sysroot : Option < Sysroot > , rustc_cfg : Vec < CfgFlag > } ,
@@ -105,6 +107,7 @@ impl fmt::Debug for ProjectWorkspace {
105107 rustc,
106108 rustc_cfg,
107109 cfg_overrides,
110+ toolchain,
108111 } => f
109112 . debug_struct ( "Cargo" )
110113 . field ( "root" , & cargo. workspace_root ( ) . file_name ( ) )
@@ -116,6 +119,7 @@ impl fmt::Debug for ProjectWorkspace {
116119 )
117120 . field ( "n_rustc_cfg" , & rustc_cfg. len ( ) )
118121 . field ( "n_cfg_overrides" , & cfg_overrides. len ( ) )
122+ . field ( "toolchain" , & toolchain)
119123 . finish ( ) ,
120124 ProjectWorkspace :: Json { project, sysroot, rustc_cfg } => {
121125 let mut debug_struct = f. debug_struct ( "Json" ) ;
@@ -160,6 +164,9 @@ impl ProjectWorkspace {
160164 cmd. arg ( "--version" ) ;
161165 cmd
162166 } ) ?;
167+ let toolchain = cargo_version
168+ . get ( "cargo " . len ( ) ..)
169+ . and_then ( |it| Version :: parse ( it. split_whitespace ( ) . next ( ) ?) . ok ( ) ) ;
163170
164171 let meta = CargoWorkspace :: fetch_metadata (
165172 & cargo_toml,
@@ -169,9 +176,9 @@ impl ProjectWorkspace {
169176 )
170177 . with_context ( || {
171178 format ! (
172- "Failed to read Cargo metadata from Cargo.toml file {}, {}" ,
179+ "Failed to read Cargo metadata from Cargo.toml file {}, {:? }" ,
173180 cargo_toml. display( ) ,
174- cargo_version
181+ toolchain
175182 )
176183 } ) ?;
177184 let cargo = CargoWorkspace :: new ( meta) ;
@@ -219,6 +226,7 @@ impl ProjectWorkspace {
219226 rustc,
220227 rustc_cfg,
221228 cfg_overrides,
229+ toolchain,
222230 }
223231 }
224232 } ;
@@ -271,8 +279,8 @@ impl ProjectWorkspace {
271279 progress : & dyn Fn ( String ) ,
272280 ) -> Result < WorkspaceBuildScripts > {
273281 match self {
274- ProjectWorkspace :: Cargo { cargo, .. } => {
275- WorkspaceBuildScripts :: run ( config, cargo, progress) . with_context ( || {
282+ ProjectWorkspace :: Cargo { cargo, toolchain , .. } => {
283+ WorkspaceBuildScripts :: run ( config, cargo, progress, toolchain ) . with_context ( || {
276284 format ! ( "Failed to run build scripts for {}" , & cargo. workspace_root( ) . display( ) )
277285 } )
278286 }
@@ -320,6 +328,7 @@ impl ProjectWorkspace {
320328 rustc_cfg : _,
321329 cfg_overrides : _,
322330 build_scripts,
331+ toolchain : _,
323332 } => {
324333 cargo
325334 . packages ( )
@@ -425,6 +434,7 @@ impl ProjectWorkspace {
425434 rustc_cfg,
426435 cfg_overrides,
427436 build_scripts,
437+ toolchain : _,
428438 } => cargo_to_crate_graph (
429439 rustc_cfg. clone ( ) ,
430440 cfg_overrides,
0 commit comments