@@ -12,6 +12,7 @@ use base_db::{
12
12
use cfg:: { CfgDiff , CfgOptions } ;
13
13
use paths:: { AbsPath , AbsPathBuf } ;
14
14
use rustc_hash:: { FxHashMap , FxHashSet } ;
15
+ use semver:: Version ;
15
16
use stdx:: always;
16
17
17
18
use crate :: {
@@ -77,6 +78,7 @@ pub enum ProjectWorkspace {
77
78
/// different target.
78
79
rustc_cfg : Vec < CfgFlag > ,
79
80
cfg_overrides : CfgOverrides ,
81
+ toolchain : Option < Version > ,
80
82
} ,
81
83
/// Project workspace was manually specified using a `rust-project.json` file.
82
84
Json { project : ProjectJson , sysroot : Option < Sysroot > , rustc_cfg : Vec < CfgFlag > } ,
@@ -105,6 +107,7 @@ impl fmt::Debug for ProjectWorkspace {
105
107
rustc,
106
108
rustc_cfg,
107
109
cfg_overrides,
110
+ toolchain,
108
111
} => f
109
112
. debug_struct ( "Cargo" )
110
113
. field ( "root" , & cargo. workspace_root ( ) . file_name ( ) )
@@ -116,6 +119,7 @@ impl fmt::Debug for ProjectWorkspace {
116
119
)
117
120
. field ( "n_rustc_cfg" , & rustc_cfg. len ( ) )
118
121
. field ( "n_cfg_overrides" , & cfg_overrides. len ( ) )
122
+ . field ( "toolchain" , & toolchain)
119
123
. finish ( ) ,
120
124
ProjectWorkspace :: Json { project, sysroot, rustc_cfg } => {
121
125
let mut debug_struct = f. debug_struct ( "Json" ) ;
@@ -160,6 +164,9 @@ impl ProjectWorkspace {
160
164
cmd. arg ( "--version" ) ;
161
165
cmd
162
166
} ) ?;
167
+ let toolchain = cargo_version
168
+ . get ( "cargo " . len ( ) ..)
169
+ . and_then ( |it| Version :: parse ( it. split_whitespace ( ) . next ( ) ?) . ok ( ) ) ;
163
170
164
171
let meta = CargoWorkspace :: fetch_metadata (
165
172
& cargo_toml,
@@ -169,9 +176,9 @@ impl ProjectWorkspace {
169
176
)
170
177
. with_context ( || {
171
178
format ! (
172
- "Failed to read Cargo metadata from Cargo.toml file {}, {}" ,
179
+ "Failed to read Cargo metadata from Cargo.toml file {}, {:? }" ,
173
180
cargo_toml. display( ) ,
174
- cargo_version
181
+ toolchain
175
182
)
176
183
} ) ?;
177
184
let cargo = CargoWorkspace :: new ( meta) ;
@@ -219,6 +226,7 @@ impl ProjectWorkspace {
219
226
rustc,
220
227
rustc_cfg,
221
228
cfg_overrides,
229
+ toolchain,
222
230
}
223
231
}
224
232
} ;
@@ -271,8 +279,8 @@ impl ProjectWorkspace {
271
279
progress : & dyn Fn ( String ) ,
272
280
) -> Result < WorkspaceBuildScripts > {
273
281
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 ( || {
276
284
format ! ( "Failed to run build scripts for {}" , & cargo. workspace_root( ) . display( ) )
277
285
} )
278
286
}
@@ -320,6 +328,7 @@ impl ProjectWorkspace {
320
328
rustc_cfg : _,
321
329
cfg_overrides : _,
322
330
build_scripts,
331
+ toolchain : _,
323
332
} => {
324
333
cargo
325
334
. packages ( )
@@ -425,6 +434,7 @@ impl ProjectWorkspace {
425
434
rustc_cfg,
426
435
cfg_overrides,
427
436
build_scripts,
437
+ toolchain : _,
428
438
} => cargo_to_crate_graph (
429
439
rustc_cfg. clone ( ) ,
430
440
cfg_overrides,
0 commit comments