@@ -41,7 +41,7 @@ pub enum ProjectWorkspace {
4141 Cargo {
4242 cargo : CargoWorkspace ,
4343 build_scripts : WorkspaceBuildScripts ,
44- sysroot : Sysroot ,
44+ sysroot : Option < Sysroot > ,
4545 rustc : Option < CargoWorkspace > ,
4646 /// Holds cfg flags for the current target. We get those by running
4747 /// `rustc --print cfg`.
@@ -82,7 +82,7 @@ impl fmt::Debug for ProjectWorkspace {
8282 . debug_struct ( "Cargo" )
8383 . field ( "root" , & cargo. workspace_root ( ) . file_name ( ) )
8484 . field ( "n_packages" , & cargo. packages ( ) . len ( ) )
85- . field ( "n_sysroot_crates " , & sysroot. crates ( ) . len ( ) )
85+ . field ( "sysroot " , & sysroot. is_some ( ) )
8686 . field (
8787 "n_rustc_compiler_crates" ,
8888 & rustc. as_ref ( ) . map_or ( 0 , |rc| rc. packages ( ) . len ( ) ) ,
@@ -145,14 +145,14 @@ impl ProjectWorkspace {
145145 let cargo = CargoWorkspace :: new ( meta) ;
146146
147147 let sysroot = if config. no_sysroot {
148- Sysroot :: default ( )
148+ None
149149 } else {
150- Sysroot :: discover ( cargo_toml. parent ( ) ) . with_context ( || {
150+ Some ( Sysroot :: discover ( cargo_toml. parent ( ) ) . with_context ( || {
151151 format ! (
152152 "Failed to find sysroot for Cargo.toml file {}. Is rust-src installed?" ,
153153 cargo_toml. display( )
154154 )
155- } ) ?
155+ } ) ?)
156156 } ;
157157
158158 let rustc_dir = match & config. rustc_source {
@@ -194,7 +194,7 @@ impl ProjectWorkspace {
194194 target : Option < & str > ,
195195 ) -> Result < ProjectWorkspace > {
196196 let sysroot = match & project_json. sysroot_src {
197- Some ( path) => Some ( Sysroot :: load ( path) ?) ,
197+ Some ( path) => Some ( Sysroot :: load ( path. clone ( ) ) ?) ,
198198 None => None ,
199199 } ;
200200 let rustc_cfg = rustc_cfg:: get ( None , target) ;
@@ -304,9 +304,9 @@ impl ProjectWorkspace {
304304 }
305305 PackageRoot { is_member, include, exclude }
306306 } )
307- . chain ( sysroot. crates ( ) . map ( |krate | PackageRoot {
307+ . chain ( sysroot. into_iter ( ) . map ( |sysroot | PackageRoot {
308308 is_member : false ,
309- include : vec ! [ sysroot[ krate ] . root. parent ( ) . to_path_buf( ) ] ,
309+ include : vec ! [ sysroot. root( ) . to_path_buf( ) ] ,
310310 exclude : Vec :: new ( ) ,
311311 } ) )
312312 . chain ( rustc. into_iter ( ) . flat_map ( |rustc| {
@@ -338,8 +338,9 @@ impl ProjectWorkspace {
338338 match self {
339339 ProjectWorkspace :: Json { project, .. } => project. n_crates ( ) ,
340340 ProjectWorkspace :: Cargo { cargo, sysroot, rustc, .. } => {
341- let rustc_package_len = rustc. as_ref ( ) . map_or ( 0 , |rc| rc. packages ( ) . len ( ) ) ;
342- cargo. packages ( ) . len ( ) + sysroot. crates ( ) . len ( ) + rustc_package_len
341+ let rustc_package_len = rustc. as_ref ( ) . map_or ( 0 , |it| it. packages ( ) . len ( ) ) ;
342+ let sysroot_package_len = sysroot. as_ref ( ) . map_or ( 0 , |it| it. crates ( ) . len ( ) ) ;
343+ cargo. packages ( ) . len ( ) + sysroot_package_len + rustc_package_len
343344 }
344345 ProjectWorkspace :: DetachedFiles { sysroot, files, .. } => {
345346 sysroot. crates ( ) . len ( ) + files. len ( )
@@ -380,7 +381,7 @@ impl ProjectWorkspace {
380381 load,
381382 cargo,
382383 build_scripts,
383- sysroot,
384+ sysroot. as_ref ( ) ,
384385 rustc,
385386 ) ,
386387 ProjectWorkspace :: DetachedFiles { files, sysroot, rustc_cfg } => {
@@ -479,13 +480,15 @@ fn cargo_to_crate_graph(
479480 load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
480481 cargo : & CargoWorkspace ,
481482 build_scripts : & WorkspaceBuildScripts ,
482- sysroot : & Sysroot ,
483+ sysroot : Option < & Sysroot > ,
483484 rustc : & Option < CargoWorkspace > ,
484485) -> CrateGraph {
485486 let _p = profile:: span ( "cargo_to_crate_graph" ) ;
486487 let mut crate_graph = CrateGraph :: default ( ) ;
487- let ( public_deps, libproc_macro) =
488- sysroot_to_crate_graph ( & mut crate_graph, sysroot, rustc_cfg. clone ( ) , load) ;
488+ let ( public_deps, libproc_macro) = match sysroot {
489+ Some ( sysroot) => sysroot_to_crate_graph ( & mut crate_graph, sysroot, rustc_cfg. clone ( ) , load) ,
490+ None => ( Vec :: new ( ) , None ) ,
491+ } ;
489492
490493 let mut cfg_options = CfgOptions :: default ( ) ;
491494 cfg_options. extend ( rustc_cfg) ;
0 commit comments