@@ -109,14 +109,23 @@ impl Config {
109109 figment. extract ( ) . context ( "loading configuration" )
110110 }
111111
112+ fn get_extra_env ( & self ) -> FxHashMap < String , Option < String > > {
113+ let mut extra_env = FxHashMap :: default ( ) ;
114+ // RUSTUP_AUTO_INSTALL is set to 0 by rust-analyzer (https://github.com/rust-lang/rust-analyzer/issues/20719),
115+ // but we do want to allow rustup to auto-install toolchains if needed, so we set it to 1 here.
116+ extra_env. insert ( "RUSTUP_AUTO_INSTALL" . to_owned ( ) , Some ( "1" . to_owned ( ) ) ) ;
117+ extra_env. extend ( self . cargo_extra_env . clone ( ) ) ;
118+ extra_env
119+ }
120+
112121 fn sysroot ( & self , dir : & AbsPath ) -> Sysroot {
113122 let sysroot_input = self . sysroot . as_ref ( ) . map ( |p| join_path_buf ( dir, p) ) ;
114123 let sysroot_src_input = self . sysroot_src . as_ref ( ) . map ( |p| join_path_buf ( dir, p) ) ;
115124 match ( sysroot_input, sysroot_src_input) {
116- ( None , None ) => Sysroot :: discover ( dir, & self . cargo_extra_env ) ,
125+ ( None , None ) => Sysroot :: discover ( dir, & self . get_extra_env ( ) ) ,
117126 ( Some ( sysroot) , None ) => Sysroot :: discover_rust_lib_src_dir ( sysroot) ,
118127 ( None , Some ( sysroot_src) ) => {
119- Sysroot :: discover_with_src_override ( dir, & self . cargo_extra_env , sysroot_src)
128+ Sysroot :: discover_with_src_override ( dir, & self . get_extra_env ( ) , sysroot_src)
120129 }
121130 ( Some ( sysroot) , Some ( sysroot_src) ) => Sysroot :: new ( Some ( sysroot) , Some ( sysroot_src) ) ,
122131 }
@@ -167,7 +176,7 @@ impl Config {
167176 . map ( ToOwned :: to_owned)
168177 . map ( RustLibSource :: Path ) ,
169178
170- extra_env : self . cargo_extra_env . clone ( ) ,
179+ extra_env : self . get_extra_env ( ) ,
171180 extra_args : self . cargo_extra_args . clone ( ) ,
172181 extra_includes : self
173182 . extra_includes
0 commit comments