Skip to content

Commit 838f444

Browse files
refactor: 💡 remove wrap string (#117)
* refactor: 💡 remove wrap string 1. remove wrap string, we could use std::fmt::Write and `String` directly * fix: 🐛 ci issue
1 parent 29465f0 commit 838f444

File tree

4 files changed

+32
-37
lines changed

4 files changed

+32
-37
lines changed

.cargo/config.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[alias]
2+
lint = "clippy -- -D warnings"
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use recursive_parser::{parser::Parser, pretty_print_ast};
2+
fn main() {
3+
let css = "#id { font-size: 12px;
4+
width: 100px;
5+
@media test {
6+
.test { width: 100px; height: 200px;}
7+
}
8+
}";
9+
let root = Parser::new(css).parse().unwrap();
10+
let result = pretty_print_ast(&root);
11+
println!("{}", result);
12+
}

crates/recursive-parser/src/ast_util.rs

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
use crate::parser::Root;
12
use crate::{parser, visitor::Visit};
2-
use std::io::Result;
3-
use std::io::Write;
4-
3+
use std::fmt::Result;
4+
use std::fmt::Write;
55
#[derive(Default)]
66
pub struct AstPrinter<W: Write> {
77
level: usize,
@@ -13,7 +13,7 @@ impl<W: Write> AstPrinter<W> {
1313
Self { level, writer }
1414
}
1515

16-
pub fn print<'a>(&mut self, root: &'a parser::Root<'a>) -> Result<()> {
16+
pub fn print<'a>(&mut self, root: &'a parser::Root<'a>) -> Result {
1717
self.visit_root(root)?;
1818
Ok(())
1919
}
@@ -23,8 +23,8 @@ impl<W: Write> AstPrinter<W> {
2323
}
2424
}
2525

26-
impl<'a, W: Write> Visit<'a, Result<()>> for AstPrinter<W> {
27-
fn visit_root(&mut self, root: &parser::Root) -> Result<()> {
26+
impl<'a, W: Write> Visit<'a, Result> for AstPrinter<W> {
27+
fn visit_root(&mut self, root: &parser::Root) -> Result {
2828
writeln!(
2929
self.writer,
3030
"{}Root@{:?}",
@@ -49,7 +49,7 @@ impl<'a, W: Write> Visit<'a, Result<()>> for AstPrinter<W> {
4949
Ok(())
5050
}
5151

52-
fn visit_rule(&mut self, rule: &parser::Rule) -> Result<()> {
52+
fn visit_rule(&mut self, rule: &parser::Rule) -> Result {
5353
writeln!(
5454
self.writer,
5555
"{}Rule@{:?}",
@@ -80,7 +80,7 @@ impl<'a, W: Write> Visit<'a, Result<()>> for AstPrinter<W> {
8080
Ok(())
8181
}
8282

83-
fn visit_at_rule(&mut self, at_rule: &parser::AtRule) -> Result<()> {
83+
fn visit_at_rule(&mut self, at_rule: &parser::AtRule) -> Result {
8484
writeln!(
8585
self.writer,
8686
"{}AtRule@{:?}",
@@ -117,7 +117,7 @@ impl<'a, W: Write> Visit<'a, Result<()>> for AstPrinter<W> {
117117
Ok(())
118118
}
119119

120-
fn visit_declaration(&mut self, decl: &parser::Declaration) -> Result<()> {
120+
fn visit_declaration(&mut self, decl: &parser::Declaration) -> Result {
121121
writeln!(
122122
self.writer,
123123
"{}Declaration@{:?}",
@@ -142,27 +142,8 @@ impl<'a, W: Write> Visit<'a, Result<()>> for AstPrinter<W> {
142142
}
143143
}
144144

145-
#[derive(Debug, Default)]
146-
pub struct WrapString(pub String);
147-
impl WrapString {
148-
pub fn inner_string(self) -> String {
149-
self.0
150-
}
151-
}
152-
153-
impl From<String> for WrapString {
154-
fn from(string: String) -> Self {
155-
Self(string)
156-
}
157-
}
158-
159-
impl Write for WrapString {
160-
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
161-
self.0 += std::str::from_utf8(buf).unwrap();
162-
Ok(buf.len())
163-
}
164-
165-
fn flush(&mut self) -> std::io::Result<()> {
166-
Ok(())
167-
}
145+
pub fn pretty_print_ast(root: &Root) -> String {
146+
let mut printer = AstPrinter::new(0, String::default());
147+
printer.print(root).unwrap();
148+
printer.result()
168149
}

crates/recursive-parser/tests/basic.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use anyhow::Result;
33
mod test_ast {
44
use std::fs::read_to_string;
55

6-
use recursive_parser::{parser::Parser, AstPrinter, WrapString};
6+
use recursive_parser::{parser::Parser, AstPrinter};
77

88
use super::*;
99

@@ -31,9 +31,9 @@ mod test_ast {
3131
let expected_ast = read_to_string(expected_ast_path)?;
3232
let parser = Parser::new(&file);
3333
let root = parser.parse().unwrap();
34-
let mut printer = AstPrinter::new(0, WrapString::default());
34+
let mut printer = AstPrinter::new(0, String::default());
3535
printer.print(&root)?;
36-
let ast = printer.result().0;
36+
let ast = printer.result();
3737
similar_asserts::assert_str_eq!(ast, expected_ast);
3838
}
3939

@@ -84,9 +84,9 @@ mod test_ast {
8484
let expected_ast = read_to_string(expected_ast_path)?;
8585
let parser = Parser::new(&file);
8686
let root = parser.parse().unwrap();
87-
let mut printer = AstPrinter::new(0, WrapString::default());
87+
let mut printer = AstPrinter::new(0, String::default());
8888
printer.print(&root)?;
89-
let ast = printer.result().0;
89+
let ast = printer.result();
9090
similar_asserts::assert_str_eq!(ast, expected_ast);
9191
}
9292
Ok(())

0 commit comments

Comments
 (0)