@@ -24,7 +24,7 @@ use ide_db::{
2424use itertools:: Itertools ;
2525use load_cargo:: { load_proc_macro, ProjectFolders } ;
2626use proc_macro_api:: ProcMacroServer ;
27- use project_model:: { ProjectWorkspace , Sysroot , WorkspaceBuildScripts } ;
27+ use project_model:: { ProjectWorkspace , WorkspaceBuildScripts } ;
2828use rustc_hash:: FxHashSet ;
2929use stdx:: { format_to, thread:: ThreadIntent } ;
3030use triomphe:: Arc ;
@@ -468,16 +468,20 @@ impl GlobalState {
468468 None => ws. find_sysroot_proc_macro_srv ( ) ?,
469469 } ;
470470
471- let env = match ws {
472- ProjectWorkspace :: Cargo { cargo_config_extra_env, .. } => {
473- cargo_config_extra_env
474- . iter ( )
475- . chain ( self . config . extra_env ( ) )
476- . map ( |( a, b) | ( a. clone ( ) , b. clone ( ) ) )
477- . collect ( )
478- }
479- _ => Default :: default ( ) ,
480- } ;
471+ let env =
472+ match ws {
473+ ProjectWorkspace :: Cargo { cargo_config_extra_env, sysroot, .. } => {
474+ cargo_config_extra_env
475+ . iter ( )
476+ . chain ( self . config . extra_env ( ) )
477+ . map ( |( a, b) | ( a. clone ( ) , b. clone ( ) ) )
478+ . chain ( sysroot. as_ref ( ) . map ( |it| {
479+ ( "RUSTUP_TOOLCHAIN" . to_owned ( ) , it. root ( ) . to_string ( ) )
480+ } ) )
481+ . collect ( )
482+ }
483+ _ => Default :: default ( ) ,
484+ } ;
481485 tracing:: info!( "Using proc-macro server at {path}" ) ;
482486
483487 ProcMacroServer :: spawn ( path. clone ( ) , & env) . map_err ( |err| {
@@ -620,7 +624,7 @@ impl GlobalState {
620624 0 ,
621625 Box :: new( move |msg| sender. send( msg) . unwrap( ) ) ,
622626 config,
623- toolchain :: cargo ( ) ,
627+ None ,
624628 self . config. root_path( ) . clone( ) ,
625629 ) ] ,
626630 flycheck:: InvocationStrategy :: PerWorkspace => {
@@ -631,7 +635,7 @@ impl GlobalState {
631635 ProjectWorkspace :: Cargo { cargo, sysroot, .. } => Some ( (
632636 id,
633637 cargo. workspace_root ( ) ,
634- Sysroot :: discover_tool ( sysroot. as_ref ( ) . ok ( ) , toolchain :: Tool :: Cargo ) ,
638+ sysroot. as_ref ( ) . ok ( ) . map ( |sysroot| sysroot . root ( ) . to_owned ( ) ) ,
635639 ) ) ,
636640 ProjectWorkspace :: Json { project, sysroot, .. } => {
637641 // Enable flychecks for json projects if a custom flycheck command was supplied
@@ -640,23 +644,20 @@ impl GlobalState {
640644 FlycheckConfig :: CustomCommand { .. } => Some ( (
641645 id,
642646 project. path ( ) ,
643- Sysroot :: discover_tool (
644- sysroot. as_ref ( ) . ok ( ) ,
645- toolchain:: Tool :: Cargo ,
646- ) ,
647+ sysroot. as_ref ( ) . ok ( ) . map ( |sysroot| sysroot. root ( ) . to_owned ( ) ) ,
647648 ) ) ,
648649 _ => None ,
649650 }
650651 }
651652 ProjectWorkspace :: DetachedFiles { .. } => None ,
652653 } )
653- . map ( |( id, root, cargo ) | {
654+ . map ( |( id, root, sysroot_root ) | {
654655 let sender = sender. clone ( ) ;
655656 FlycheckHandle :: spawn (
656657 id,
657658 Box :: new ( move |msg| sender. send ( msg) . unwrap ( ) ) ,
658659 config. clone ( ) ,
659- cargo . unwrap_or_else ( |_| toolchain :: cargo ( ) ) ,
660+ sysroot_root ,
660661 root. to_path_buf ( ) ,
661662 )
662663 } )
0 commit comments