@@ -74,72 +74,86 @@ impl<'src, 'run> Evaluator<'src, 'run> {
7474
7575 for ( _name, set) in sets {
7676 match set. value {
77- Setting :: AllowDuplicateRecipes ( allow_duplicate_recipes ) => {
78- settings. allow_duplicate_recipes = allow_duplicate_recipes ;
77+ Setting :: AllowDuplicateRecipes ( value ) => {
78+ settings. allow_duplicate_recipes = value ;
7979 }
80- Setting :: AllowDuplicateVariables ( allow_duplicate_variables ) => {
81- settings. allow_duplicate_variables = allow_duplicate_variables ;
80+ Setting :: AllowDuplicateVariables ( value ) => {
81+ settings. allow_duplicate_variables = value ;
8282 }
83- Setting :: DotenvFilename ( filename ) => {
84- settings. dotenv_filename = Some ( filename . cooked ) ;
83+ Setting :: DotenvFilename ( value ) => {
84+ settings. dotenv_filename = Some ( self . evaluate_expression ( & value ) ? ) ;
8585 }
86- Setting :: DotenvLoad ( dotenv_load ) => {
87- settings. dotenv_load = dotenv_load ;
86+ Setting :: DotenvLoad ( value ) => {
87+ settings. dotenv_load = value ;
8888 }
89- Setting :: DotenvPath ( path ) => {
90- settings. dotenv_path = Some ( path . cooked . into ( ) ) ;
89+ Setting :: DotenvPath ( value ) => {
90+ settings. dotenv_path = Some ( self . evaluate_expression ( & value ) ? . into ( ) ) ;
9191 }
92- Setting :: DotenvOverride ( dotenv_overrride ) => {
93- settings. dotenv_override = dotenv_overrride ;
92+ Setting :: DotenvOverride ( value ) => {
93+ settings. dotenv_override = value ;
9494 }
95- Setting :: DotenvRequired ( dotenv_required ) => {
96- settings. dotenv_required = dotenv_required ;
95+ Setting :: DotenvRequired ( value ) => {
96+ settings. dotenv_required = value ;
9797 }
98- Setting :: Export ( export ) => {
99- settings. export = export ;
98+ Setting :: Export ( value ) => {
99+ settings. export = value ;
100100 }
101- Setting :: Fallback ( fallback ) => {
102- settings. fallback = fallback ;
101+ Setting :: Fallback ( value ) => {
102+ settings. fallback = value ;
103103 }
104- Setting :: IgnoreComments ( ignore_comments ) => {
105- settings. ignore_comments = ignore_comments ;
104+ Setting :: IgnoreComments ( value ) => {
105+ settings. ignore_comments = value ;
106106 }
107- Setting :: NoExitMessage ( no_exit_message ) => {
108- settings. no_exit_message = no_exit_message ;
107+ Setting :: NoExitMessage ( value ) => {
108+ settings. no_exit_message = value ;
109109 }
110- Setting :: PositionalArguments ( positional_arguments ) => {
111- settings. positional_arguments = positional_arguments ;
110+ Setting :: PositionalArguments ( value ) => {
111+ settings. positional_arguments = value ;
112112 }
113- Setting :: Quiet ( quiet ) => {
114- settings. quiet = quiet ;
113+ Setting :: Quiet ( value ) => {
114+ settings. quiet = value ;
115115 }
116- Setting :: ScriptInterpreter ( script_interpreter ) => {
117- settings. script_interpreter = Some ( script_interpreter ) ;
116+ Setting :: ScriptInterpreter ( value ) => {
117+ settings. script_interpreter = Some ( self . evaluate_intepreter ( & value ) ? ) ;
118118 }
119- Setting :: Shell ( shell ) => {
120- settings. shell = Some ( shell ) ;
119+ Setting :: Shell ( value ) => {
120+ settings. shell = Some ( self . evaluate_intepreter ( & value ) ? ) ;
121121 }
122- Setting :: Unstable ( unstable ) => {
123- settings. unstable = unstable ;
122+ Setting :: Unstable ( value ) => {
123+ settings. unstable = value ;
124124 }
125- Setting :: WindowsPowerShell ( windows_powershell ) => {
126- settings. windows_powershell = windows_powershell ;
125+ Setting :: WindowsPowerShell ( value ) => {
126+ settings. windows_powershell = value ;
127127 }
128- Setting :: WindowsShell ( windows_shell ) => {
129- settings. windows_shell = Some ( windows_shell ) ;
128+ Setting :: WindowsShell ( value ) => {
129+ settings. windows_shell = Some ( self . evaluate_intepreter ( & value ) ? ) ;
130130 }
131- Setting :: Tempdir ( tempdir ) => {
132- settings. tempdir = Some ( tempdir . cooked ) ;
131+ Setting :: Tempdir ( value ) => {
132+ settings. tempdir = Some ( self . evaluate_expression ( & value ) ? ) ;
133133 }
134- Setting :: WorkingDirectory ( working_directory ) => {
135- settings. working_directory = Some ( self . evaluate_expression ( & working_directory ) ?. into ( ) ) ;
134+ Setting :: WorkingDirectory ( value ) => {
135+ settings. working_directory = Some ( self . evaluate_expression ( & value ) ?. into ( ) ) ;
136136 }
137137 }
138138 }
139139
140140 Ok ( settings)
141141 }
142142
143+ pub ( crate ) fn evaluate_intepreter (
144+ & mut self ,
145+ interpreter : & Interpreter < Expression < ' src > > ,
146+ ) -> RunResult < ' src , Interpreter < String > > {
147+ Ok ( Interpreter {
148+ command : self . evaluate_expression ( & interpreter. command ) ?,
149+ arguments : interpreter
150+ . arguments
151+ . iter ( )
152+ . map ( |argument| self . evaluate_expression ( argument) )
153+ . collect :: < RunResult < Vec < String > > > ( ) ?,
154+ } )
155+ }
156+
143157 pub ( crate ) fn evaluate_assignments (
144158 config : & ' run Config ,
145159 dotenv : & ' run BTreeMap < String , String > ,
0 commit comments