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