/* Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ċ Ġ* Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . rust Slow Tests . lang . resolve Ċ Ċ import Ġcom . intellij . util . Throwable Runnable Ċ import Ġorg . rust . Expand Macros Ċ import Ġorg . rust . Min Rust c Version Ċ import Ġorg . rust . cargo . R sWith Tool chain TestBase Ċ import Ġorg . rust . cargo . project . model . impl . test Cargo Projects Ċ import Ġorg . rust . cargo . toolchain . w sl . Rs W sl Tool chain Ċ import Ġorg . rust . file Tree Ċ import Ġorg . rust . ide . experiments . Rs Experiment s Ċ import Ġorg . rust . lang . core . macros . Macro Expansion Scope Ċ import Ġorg . rust . lang . core . psi . Rs MethodCall Ċ import Ġorg . rust . openapi ext . Rs Path Manager Ċ import Ġorg . rust . openapi ext . path As Path Ċ import Ġorg . rust . openapi ext . run With Enabled Features Ċ Ċ @ Min Rust c Version (" 1 . 4 6 . 0 ") Ċ @ Expand Macros ( Macro Expansion Scope . WORK SPACE ) Ċ class ĠRs Proc Macro Expansion Resolve IntegrationTest Ġ: ĠR sWith Tool chain TestBase () Ġ{ ĊĠĠĠ Ġfun Ġ` test Ġ 2 Ġcargo Ġprojects Ġ( proc Ġmacro Ġis Ġa Ġseparate Ġcargo Ġproject )` () Ġ= Ġrun With Proc Macros Enabled Ġ{ ĊĠĠĠĠĠĠĠ Ġfile Tree Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir (" my _ proc _ macro ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ml (" Cargo . toml ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ package ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" my _ proc _ macro " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 1 . 0 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedition Ġ= Ġ" 2 0 1 8 " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ lib ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproc - macro Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ dependencies ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdir (" src ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrust (" lib . rs ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextern Ġcrate Ġproc _ macro ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Ġproc _ macro :: Token Stream ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ#[ proc _ macro ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpub Ġfn Ġmy _ macro ( input : ĠToken Stream ) Ġ-> ĠToken Stream Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir (" my lib ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto ml (" Cargo . toml ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ package ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" my lib " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 1 . 0 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedition Ġ= Ġ" 2 0 1 8 " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ dependencies ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy _ proc _ macro Ġ= Ġ{ Ġpath Ġ= Ġ"../ my _ proc _ macro " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdir (" src ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrust (" lib . rs ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Ġmy _ proc _ macro :: my _ macro ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstruct ĠFoo ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimpl ĠFoo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn Ġbar (& self ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĠĠĠĠ Ġ// X ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy _ macro ! Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn Ġfoo () Ġ-> ĠFoo Ġ{ ĠFoo Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfoo (). bar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĠĠĠĠĠĠ Ġ// ^ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpr j Ġ= Ġcreate ( project , Ġcargo Project Directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . test Cargo Projects . attach Cargo Projects ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcargo Project Directory . path As Path . resolve (" my _ proc _ macro / Cargo . toml "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcargo Project Directory . path As Path . resolve (" my lib / Cargo . toml ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpr j . check Reference Is Resolved < Rs MethodCall >(" my lib / src / lib . rs ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ` test Ġfrom Ġcr ates _ io `() Ġ= Ġrun With Proc Macros Enabled Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Project Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto ml (" Cargo . toml ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ package ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" my lib " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 1 . 0 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedition Ġ= Ġ" 2 0 1 8 " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ[ dependencies ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproc - macro - id Ġ= Ġ"= 1 . 0 . 1 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdir (" src ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrust (" lib . rs ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Ġproc _ macro _ id :: id ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstruct ĠFoo ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimpl ĠFoo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn Ġbar (& self ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĠĠĠĠ Ġ// X ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ! Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn Ġfoo () Ġ-> ĠFoo Ġ{ ĠFoo Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfoo (). bar () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĠĠĠĠĠĠ Ġ// ^ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. check Reference Is Resolved < Rs MethodCall >(" src / lib . rs ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun Test Runnable ( test Runnable : ĠThrowable Runnable < Throwable >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Rs Path Manager . native Helper ( rust up Fixture . toolchain Ġis ĠRs W sl Tool chain ) Ġ== Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . getenv (" CI ") Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" SKIP Ġ\"$ name \": Ġno Ġnative - helper Ġexecutable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . run Test Runnable ( test Runnable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġrun With Proc Macros Enabled ( action : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun With Enabled Features ( Rs Experiment s . EVAL U ATE _ BUILD _ SCRIP TS , ĠRs Experiment s . PROC _ MAC ROS ) Ġ{ Ġaction () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ