@@ -41,16 +41,42 @@ fn format_ast(ast: &AST) -> String {
4141}
4242 */
4343
44+ const VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
45+
4446fn main ( ) {
4547 let args: Vec < String > = env:: args ( ) . collect ( ) ;
4648
4749 if args. len ( ) < 2 {
48- eprintln ! ( "Usage: {} <path_to_wave_file>" , args[ 0 ] ) ;
50+ eprintln ! ( "Usage: wave <command> [arguments]" ) ;
51+ eprintln ! ( "Commands:" ) ;
52+ eprintln ! ( " run <file> Execute the specified Wave file" ) ;
53+ eprintln ! ( " --version Show the CLI version" ) ;
4954 process:: exit ( 1 ) ;
5055 }
5156
52- let file_path = & args[ 1 ] ;
57+ match args[ 1 ] . as_str ( ) {
58+ "--version" => {
59+ println ! ( "v{}" , VERSION ) ;
60+ return ;
61+ }
62+ "run" => {
63+ if args. len ( ) < 3 {
64+ eprintln ! ( "Usage: wave run <file>" ) ;
65+ process:: exit ( 1 ) ;
66+ }
67+
68+ let file_path = & args[ 2 ] ;
69+ run_wave_file ( file_path) ;
70+ }
71+ _ => {
72+ eprintln ! ( "Unknown command: {}" , args[ 1 ] ) ;
73+ eprintln ! ( "Use 'wave --version' or 'wave run <file>'" ) ;
74+ process:: exit ( 1 ) ;
75+ }
76+ }
77+ }
5378
79+ fn run_wave_file ( file_path : & str ) {
5480 let code = match fs:: read_to_string ( file_path) {
5581 Ok ( content) => content,
5682 Err ( err) => {
@@ -64,7 +90,8 @@ fn main() {
6490 let tokens = lexer. tokenize ( ) ;
6591 eprintln ! ( "Tokens: {}" , format_tokens( & tokens) ) ;
6692
67- let function_name = tokens. iter ( )
93+ let function_name = tokens
94+ . iter ( )
6895 . find ( |token| matches ! ( token. token_type, TokenType :: IDENTIFIER ( _) ) )
6996 . map ( |token| token. lexeme . clone ( ) )
7097 . unwrap_or_default ( ) ;
0 commit comments