| //! Parse a Rust source file into a `syn::File` and print out a debug |
| //! representation of the syntax tree. |
| //! |
| //! Use the following command from this directory to test this program by |
| //! running it on its own source code: |
| //! |
| //! cargo run -- main.rs |
| //! |
| //! The output will begin with: |
| //! |
| //! File { |
| //! shebang: None, |
| //! attrs: [ |
| //! Attribute { |
| //! pound_token: Pound, |
| //! style: Inner( |
| //! ... |
| //! } |
| |
| extern crate syn; |
| |
| use std::env; |
| use std::fs::File; |
| use std::io::Read; |
| use std::process; |
| |
| fn main() { |
| let mut args = env::args(); |
| let _ = args.next(); // executable name |
| |
| let filename = match (args.next(), args.next()) { |
| (Some(filename), None) => filename, |
| _ => { |
| eprintln!("Usage: dump-syntax path/to/filename.rs"); |
| process::exit(1); |
| } |
| }; |
| |
| let mut file = File::open(&filename).expect("Unable to open file"); |
| |
| let mut src = String::new(); |
| file.read_to_string(&mut src).expect("Unable to read file"); |
| |
| let syntax = syn::parse_file(&src).expect("Unable to parse file"); |
| println!("{:#?}", syntax); |
| } |