Polish dump-ast example code
diff --git a/examples/dump-ast.rs b/examples/dump-ast.rs
deleted file mode 100644
index 0e2f67b..0000000
--- a/examples/dump-ast.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-extern crate syn;
-
-use std::env;
-use std::fs::File;
-use std::io::{self, Read};
-
-fn main() {
- let mut args = env::args();
- let _ = args.next(); // executable name
- let filename = args.next().unwrap_or_else(|| {
- panic!("USAGE: dump-ast FILENAME");
- });
- if args.next().is_some() {
- panic!("dump-ast only takes one argument");
- }
-
- let mut src = String::new();
- if filename != "-" {
- let mut file = File::open(&filename).expect("Unable to open source file");
- file.read_to_string(&mut src)
- .expect("Unable to read input file");
- } else {
- io::stdin()
- .read_to_string(&mut src)
- .expect("Unable to read stdin");
- }
-
- let ast = syn::parse_file(&src).expect("Unable to parse file");
- println!("{:#?}", ast);
-}
diff --git a/examples/dump-syntax/Cargo.toml b/examples/dump-syntax/Cargo.toml
new file mode 100644
index 0000000..39d9622
--- /dev/null
+++ b/examples/dump-syntax/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "dump-syntax"
+version = "0.0.0"
+authors = ["David Tolnay <dtolnay@gmail.com>"]
+publish = false
+
+[dependencies]
+syn = { path = "../..", features = ["full", "extra-traits"] }
+
+[[bin]]
+name = "dump-syntax"
+path = "main.rs"
diff --git a/examples/dump-syntax/README.md b/examples/dump-syntax/README.md
new file mode 100644
index 0000000..3b23736
--- /dev/null
+++ b/examples/dump-syntax/README.md
@@ -0,0 +1,28 @@
+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(
+ Bang
+ ),
+ bracket_token: Bracket,
+ path: Path {
+ leading_colon: None,
+ segments: [
+ ...
+}
+```
diff --git a/examples/dump-syntax/main.rs b/examples/dump-syntax/main.rs
new file mode 100644
index 0000000..584fe3c
--- /dev/null
+++ b/examples/dump-syntax/main.rs
@@ -0,0 +1,46 @@
+//! 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);
+}