@@ -27,6 +27,7 @@ impl Arguments {
27
27
pub enum Command {
28
28
ReplMode ( Arguments ) ,
29
29
QueryMode ( String , Arguments ) ,
30
+ ScriptMode ( String , Arguments ) ,
30
31
Help ,
31
32
Version ,
32
33
Error ( String ) ,
@@ -44,6 +45,7 @@ pub fn parse_arguments(args: &[String]) -> Command {
44
45
}
45
46
46
47
let mut optional_query: Option < String > = None ;
48
+ let mut optional_script_file: Option < String > = None ;
47
49
let mut arguments = Arguments :: new ( ) ;
48
50
49
51
let mut arg_index = 1 ;
@@ -95,6 +97,16 @@ pub fn parse_arguments(args: &[String]) -> Command {
95
97
optional_query = Some ( args[ arg_index] . to_string ( ) ) ;
96
98
arg_index += 1 ;
97
99
}
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
+ }
98
110
"--analysis" | "-a" => {
99
111
arguments. analysis = true ;
100
112
arg_index += 1 ;
@@ -147,7 +159,9 @@ pub fn parse_arguments(args: &[String]) -> Command {
147
159
return Command :: Error ( "Must provide one or more C/C++ files" . to_string ( ) ) ;
148
160
}
149
161
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 {
151
165
Command :: QueryMode ( query, arguments)
152
166
} else {
153
167
Command :: ReplMode ( arguments)
0 commit comments