@@ -24,7 +24,7 @@ use ide_db::{
24
24
use itertools:: Itertools ;
25
25
use load_cargo:: { load_proc_macro, ProjectFolders } ;
26
26
use proc_macro_api:: ProcMacroServer ;
27
- use project_model:: { ProjectWorkspace , Sysroot , WorkspaceBuildScripts } ;
27
+ use project_model:: { ProjectWorkspace , WorkspaceBuildScripts } ;
28
28
use rustc_hash:: FxHashSet ;
29
29
use stdx:: { format_to, thread:: ThreadIntent } ;
30
30
use triomphe:: Arc ;
@@ -468,16 +468,20 @@ impl GlobalState {
468
468
None => ws. find_sysroot_proc_macro_srv ( ) ?,
469
469
} ;
470
470
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
+ } ;
481
485
tracing:: info!( "Using proc-macro server at {path}" ) ;
482
486
483
487
ProcMacroServer :: spawn ( path. clone ( ) , & env) . map_err ( |err| {
@@ -620,7 +624,7 @@ impl GlobalState {
620
624
0 ,
621
625
Box :: new( move |msg| sender. send( msg) . unwrap( ) ) ,
622
626
config,
623
- toolchain :: cargo ( ) ,
627
+ None ,
624
628
self . config. root_path( ) . clone( ) ,
625
629
) ] ,
626
630
flycheck:: InvocationStrategy :: PerWorkspace => {
@@ -631,7 +635,7 @@ impl GlobalState {
631
635
ProjectWorkspace :: Cargo { cargo, sysroot, .. } => Some ( (
632
636
id,
633
637
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 ( ) ) ,
635
639
) ) ,
636
640
ProjectWorkspace :: Json { project, sysroot, .. } => {
637
641
// Enable flychecks for json projects if a custom flycheck command was supplied
@@ -640,23 +644,20 @@ impl GlobalState {
640
644
FlycheckConfig :: CustomCommand { .. } => Some ( (
641
645
id,
642
646
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 ( ) ) ,
647
648
) ) ,
648
649
_ => None ,
649
650
}
650
651
}
651
652
ProjectWorkspace :: DetachedFiles { .. } => None ,
652
653
} )
653
- . map ( |( id, root, cargo ) | {
654
+ . map ( |( id, root, sysroot_root ) | {
654
655
let sender = sender. clone ( ) ;
655
656
FlycheckHandle :: spawn (
656
657
id,
657
658
Box :: new ( move |msg| sender. send ( msg) . unwrap ( ) ) ,
658
659
config. clone ( ) ,
659
- cargo . unwrap_or_else ( |_| toolchain :: cargo ( ) ) ,
660
+ sysroot_root ,
660
661
root. to_path_buf ( ) ,
661
662
)
662
663
} )
0 commit comments