@@ -27,6 +27,7 @@ impl Arguments {
2727pub enum Command {
2828 ReplMode ( Arguments ) ,
2929 QueryMode ( String , Arguments ) ,
30+ ScriptMode ( String , Arguments ) ,
3031 Help ,
3132 Version ,
3233 Error ( String ) ,
@@ -44,6 +45,7 @@ pub fn parse_arguments(args: &[String]) -> Command {
4445 }
4546
4647 let mut optional_query: Option < String > = None ;
48+ let mut optional_script_file: Option < String > = None ;
4749 let mut arguments = Arguments :: new ( ) ;
4850
4951 let mut arg_index = 1 ;
@@ -95,6 +97,16 @@ pub fn parse_arguments(args: &[String]) -> Command {
9597 optional_query = Some ( args[ arg_index] . to_string ( ) ) ;
9698 arg_index += 1 ;
9799 }
100+ "--script" | "-s" => {
101+ arg_index += 1 ;
102+ if arg_index >= args_len {
103+ let message = format ! ( "Argument {} must be followed by the file" , arg) ;
104+ return Command :: Error ( message) ;
105+ }
106+
107+ optional_script_file = Some ( args[ arg_index] . to_string ( ) ) ;
108+ arg_index += 1 ;
109+ }
98110 "--analysis" | "-a" => {
99111 arguments. analysis = true ;
100112 arg_index += 1 ;
@@ -147,7 +159,9 @@ pub fn parse_arguments(args: &[String]) -> Command {
147159 return Command :: Error ( "Must provide one or more C/C++ files" . to_string ( ) ) ;
148160 }
149161
150- if let Some ( query) = optional_query {
162+ if let Some ( script_file) = optional_script_file {
163+ Command :: ScriptMode ( script_file, arguments)
164+ } else if let Some ( query) = optional_query {
151165 Command :: QueryMode ( query, arguments)
152166 } else {
153167 Command :: ReplMode ( arguments)
0 commit comments