package Ġorg . mvn search . plugins . just . lang . psi Ċ Ċ import Ġcom . intellij . ext api . psi . Psi File Base Ċ import Ġcom . intellij . openapi . project . guess Project Dir Ċ import Ġcom . intellij . psi . File View Provider Ċ import Ġcom . intellij . psi . Psi Manager Ċ import Ġorg . mvn search . plugins . just . lang . Just Language Ċ import Ġorg . mvn search . plugins . just . parse Recipe Name Ċ Ċ class ĠJust File ( view Provider : ĠFile View Provider ?) Ġ: ĠPsi File Base ( view Provider !! , ĠJust Language ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget FileType () Ġ= ĠJust FileType ĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Just file " ĊĊĊĠĠĠ Ġfun Ġfind Recipe Element ( recipe : ĠString ): ĠJust Recipe Statement ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . children ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Just Recipe Statement >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipe Name Ġ= Ġit . recipe Name . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Name Ġ== Ġrecipe Ġ|| Ġrecipe Name Ġ== Ġ"@ ${ recipe }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠfindAll Recipes (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . children ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Just Recipe Statement >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . recipe Name . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Metadata ( load Dot env : ĠBoolean ): ĠJust file Metadata Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjust file Metadata Ġ= ĠJust file Metadata () ĊĠĠĠĠĠĠĠ Ġtext . lines (). forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! line . startsWith ("# ")) Ġ{ Ġ Ġ// skip Ġcomments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . startsWith (" export Ġ") Ġ&& Ġline . contains (": =" )) Ġ{ Ġ// export ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Ġ= Ġline . substring ( 7 , Ġline . indexOf (": =" )). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . env Variables . add ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( line . startsWith (" set Ġ")) Ġ{ Ġ// set ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . contains (" dotenv - load ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . dotenv Load Ġ= Ġline . contains (" dotenv - load ") Ġ&& Ġ! line . contains (" false ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( line . contains (" export ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . variables Exported Ġ= Ġ! line . contains (" false ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( line . startsWith (" alias Ġ") Ġ&& Ġline . contains (": =" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalias Recipe Name Ġ= Ġline . substring ( 6 , Ġline . indexOf (": =" )). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . recipes . add ( alias Recipe Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(!( line . startsWith (" Ġ") Ġ|| Ġline . startsWith ("\ t ")) Ġ&& Ġline . contains (" :" )) Ġ{ Ġ// recipe Ġor Ġvariable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . contains (": =" )) Ġ{ Ġ// Ġvariable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Ġ= Ġline . substring ( 0 , Ġline . indexOf (": =" )). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . variables . add ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġrecipe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . recipes . add ( parse Recipe Name ( line )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( just file Metadata . variables Exported ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . env Variables . addAll ( just file Metadata . variables ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . variables . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( load Dot env Ġ&& Ġjust file Metadata . dotenv Load ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Dir Ġ= Ġproject . guess Project Dir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dir ?. find Child (". env ") ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenv File Ġ= ĠPsi Manager . getInstance ( project ). find File ( project Dir . find Child (". env ") !! ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv File . text . lines (). forEach Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! line . startsWith ("# ") Ġ&& Ġline . contains (" =" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariable Ġ= Ġline . substring ( 0 , Ġline . indexOf (' =' )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjust file Metadata . env Variables . add ( variable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġjust file Metadata ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠJust file Metadata Ġ{ ĊĠĠĠ Ġval Ġrecipes Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġval Ġvariables Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġval Ġenv Variables Ġ= Ġmutable ListOf < String >() ĊĠĠĠ Ġvar Ġdot env Load Ġ= Ġfalse ĊĠĠĠ Ġvar Ġvariables Exported Ġ= Ġfalse Ċ } Ċ