@@ -296,6 +296,9 @@ pub struct CrateData {
296296 pub dependencies : Vec < Dependency > ,
297297 pub origin : CrateOrigin ,
298298 pub is_proc_macro : bool ,
299+ /// The working directory to run proc-macros in. This is the workspace root of the cargo workspace
300+ /// for workspace members, the crate manifest dir otherwise.
301+ pub proc_macro_cwd : Option < AbsPathBuf > ,
299302}
300303
301304#[ derive( Default , Clone , PartialEq , Eq ) ]
@@ -360,8 +363,9 @@ impl CrateGraph {
360363 cfg_options : Arc < CfgOptions > ,
361364 potential_cfg_options : Option < Arc < CfgOptions > > ,
362365 mut env : Env ,
363- is_proc_macro : bool ,
364366 origin : CrateOrigin ,
367+ is_proc_macro : bool ,
368+ proc_macro_cwd : Option < AbsPathBuf > ,
365369 ) -> CrateId {
366370 env. entries . shrink_to_fit ( ) ;
367371 let data = CrateData {
@@ -375,6 +379,7 @@ impl CrateGraph {
375379 dependencies : Vec :: new ( ) ,
376380 origin,
377381 is_proc_macro,
382+ proc_macro_cwd,
378383 } ;
379384 self . arena . alloc ( data)
380385 }
@@ -698,8 +703,9 @@ mod tests {
698703 Default :: default ( ) ,
699704 Default :: default ( ) ,
700705 Env :: default ( ) ,
701- false ,
702706 CrateOrigin :: Local { repo : None , name : None } ,
707+ false ,
708+ None ,
703709 ) ;
704710 let crate2 = graph. add_crate_root (
705711 FileId :: from_raw ( 2u32 ) ,
@@ -709,8 +715,9 @@ mod tests {
709715 Default :: default ( ) ,
710716 Default :: default ( ) ,
711717 Env :: default ( ) ,
712- false ,
713718 CrateOrigin :: Local { repo : None , name : None } ,
719+ false ,
720+ None ,
714721 ) ;
715722 let crate3 = graph. add_crate_root (
716723 FileId :: from_raw ( 3u32 ) ,
@@ -720,8 +727,9 @@ mod tests {
720727 Default :: default ( ) ,
721728 Default :: default ( ) ,
722729 Env :: default ( ) ,
723- false ,
724730 CrateOrigin :: Local { repo : None , name : None } ,
731+ false ,
732+ None ,
725733 ) ;
726734 assert ! ( graph
727735 . add_dep( crate1, Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) , crate2, ) )
@@ -745,8 +753,9 @@ mod tests {
745753 Default :: default ( ) ,
746754 Default :: default ( ) ,
747755 Env :: default ( ) ,
748- false ,
749756 CrateOrigin :: Local { repo : None , name : None } ,
757+ false ,
758+ None ,
750759 ) ;
751760 let crate2 = graph. add_crate_root (
752761 FileId :: from_raw ( 2u32 ) ,
@@ -756,8 +765,9 @@ mod tests {
756765 Default :: default ( ) ,
757766 Default :: default ( ) ,
758767 Env :: default ( ) ,
759- false ,
760768 CrateOrigin :: Local { repo : None , name : None } ,
769+ false ,
770+ None ,
761771 ) ;
762772 assert ! ( graph
763773 . add_dep( crate1, Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) , crate2, ) )
@@ -778,8 +788,9 @@ mod tests {
778788 Default :: default ( ) ,
779789 Default :: default ( ) ,
780790 Env :: default ( ) ,
781- false ,
782791 CrateOrigin :: Local { repo : None , name : None } ,
792+ false ,
793+ None ,
783794 ) ;
784795 let crate2 = graph. add_crate_root (
785796 FileId :: from_raw ( 2u32 ) ,
@@ -789,8 +800,9 @@ mod tests {
789800 Default :: default ( ) ,
790801 Default :: default ( ) ,
791802 Env :: default ( ) ,
792- false ,
793803 CrateOrigin :: Local { repo : None , name : None } ,
804+ false ,
805+ None ,
794806 ) ;
795807 let crate3 = graph. add_crate_root (
796808 FileId :: from_raw ( 3u32 ) ,
@@ -800,8 +812,9 @@ mod tests {
800812 Default :: default ( ) ,
801813 Default :: default ( ) ,
802814 Env :: default ( ) ,
803- false ,
804815 CrateOrigin :: Local { repo : None , name : None } ,
816+ false ,
817+ None ,
805818 ) ;
806819 assert ! ( graph
807820 . add_dep( crate1, Dependency :: new( CrateName :: new( "crate2" ) . unwrap( ) , crate2, ) )
@@ -822,8 +835,9 @@ mod tests {
822835 Default :: default ( ) ,
823836 Default :: default ( ) ,
824837 Env :: default ( ) ,
825- false ,
826838 CrateOrigin :: Local { repo : None , name : None } ,
839+ false ,
840+ None ,
827841 ) ;
828842 let crate2 = graph. add_crate_root (
829843 FileId :: from_raw ( 2u32 ) ,
@@ -833,8 +847,9 @@ mod tests {
833847 Default :: default ( ) ,
834848 Default :: default ( ) ,
835849 Env :: default ( ) ,
836- false ,
837850 CrateOrigin :: Local { repo : None , name : None } ,
851+ false ,
852+ None ,
838853 ) ;
839854 assert ! ( graph
840855 . add_dep(
0 commit comments