From 457aa7d1befc00408414e10ac31dd28115a48fb7 Mon Sep 17 00:00:00 2001 From: Boshen Date: Thu, 16 Feb 2023 14:46:10 +0800 Subject: [PATCH] feat(printer): add printer example --- Cargo.lock | 1 + crates/oxc_printer/Cargo.toml | 3 +++ crates/oxc_printer/examples/simple.rs | 33 +++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 crates/oxc_printer/examples/simple.rs diff --git a/Cargo.lock b/Cargo.lock index 0b5d35136..84d723c16 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -610,6 +610,7 @@ version = "0.0.0" dependencies = [ "oxc_allocator", "oxc_ast", + "oxc_parser", ] [[package]] diff --git a/crates/oxc_printer/Cargo.toml b/crates/oxc_printer/Cargo.toml index 8907063e8..2b099390e 100644 --- a/crates/oxc_printer/Cargo.toml +++ b/crates/oxc_printer/Cargo.toml @@ -12,3 +12,6 @@ version.workspace = true [dependencies] oxc_allocator = { path = "../oxc_allocator" } oxc_ast = { path = "../oxc_ast" } + +[dev_dependencies] +oxc_parser = { path = "../oxc_parser" } diff --git a/crates/oxc_printer/examples/simple.rs b/crates/oxc_printer/examples/simple.rs new file mode 100644 index 000000000..eeda0e39e --- /dev/null +++ b/crates/oxc_printer/examples/simple.rs @@ -0,0 +1,33 @@ +use std::{env, path::Path}; + +use oxc_allocator::Allocator; +use oxc_ast::SourceType; +use oxc_parser::Parser; +use oxc_printer::{Printer, PrinterOptions}; + +// Instruction: +// create a `test.js`, +// run `cargo run -p oxc_printer --example simple` +// or `cargo watch -x "run -p oxc_printer --example simple"` + +fn main() { + let name = env::args().nth(1).unwrap_or_else(|| "test.js".to_string()); + let path = Path::new(&name); + let file = std::fs::read(path).expect("{name} not found"); + let allocator = Allocator::default(); + let source_text = String::from_utf8(file).expect("utf8"); + let source_type = SourceType::from_path(path).unwrap(); + let ret = Parser::new(&allocator, &source_text, source_type).parse(); + + if !ret.errors.is_empty() { + println!("Parse Failed."); + for error in &ret.errors { + println!("{error:?}"); + } + return; + } + + let printer_options = PrinterOptions::default(); + let printed = Printer::new(source_text.len(), printer_options).build(&ret.program); + println!("{printed}"); +}