File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -37,14 +37,18 @@ pub struct Cli {
3737}
3838
3939type ArgVec = Vec < String > ;
40- fn parse_arguments ( args : ArgVec ) -> Cli {
41- Cli :: parse_from ( args)
42- // TODO exclusivity checking for --lex, --codegen, etc.
40+ fn parse_arguments ( args : ArgVec ) -> Result < Cli , Error > {
41+ let cli = Cli :: parse_from ( args) ;
42+ if cli. lex as i32 + cli. codegen as i32 + cli. tacky as i32 + cli. asm_only as i32 > 1 {
43+ return Err ( "At most 1 of --lex, --codegen, --tacky, --asm-only may be passed" . to_string ( ) ) ;
44+ } else {
45+ return Ok ( cli) ;
46+ }
4347}
4448
4549pub fn driver_main ( args : & mut env:: Args ) -> Result < ( ) , Error > {
4650 let args: ArgVec = args. collect ( ) ;
47- let cli = parse_arguments ( args) ;
51+ let cli = parse_arguments ( args) ? ;
4852 dbg ! ( cli) ;
4953 Ok ( ( ) )
5054}
@@ -55,8 +59,20 @@ mod tests {
5559
5660 #[ test]
5761 fn arg_parser ( ) {
58- // TODO test extra arg parsing logic
59- let cli = parse_arguments ( vec ! [ "" . to_string( ) , "file" . to_string( ) ] ) ;
62+ let cli = parse_arguments ( vec ! [ "" . to_string( ) , "file" . to_string( ) ] ) . unwrap ( ) ;
6063 assert_eq ! ( cli. input_file, "file" ) ;
6164 }
65+ #[ test]
66+ fn arg_parser_neg ( ) {
67+ assert ! (
68+ parse_arguments( vec![
69+ "" . to_string( ) ,
70+ "file" . to_string( ) ,
71+ "--lex" . to_string( ) ,
72+ "--codegen" . to_string( )
73+ ] )
74+ . is_err( )
75+ ) ;
76+ }
77+ // TODO can I test clap errors properly? Should I?
6278}
You can’t perform that action at this time.
0 commit comments