Skip to content

Commit 6423090

Browse files
author
Leo Pourcelot
committed
Used consume_clojure_whitespaces instead of ws macro
`consume_clojure_whitespaces` allows to treat `,` as whitespaces, as defined in the Clojure specifications.
1 parent ec32533 commit 6423090

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

src/reader.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,7 @@ pub fn try_read_symbol(input: &[u8]) -> IResult<&[u8],Value> {
113113
/// Example Successes:
114114
/// "this is pretty straightforward" => Value::String("this is pretty straightforward")
115115
pub fn try_read_string(input: &[u8]) -> IResult<&[u8],Value> {
116-
named!(quotation,
117-
ws!(tag!("\"")));
116+
named!(quotation, preceded!(consume_clojure_whitespaces, tag!("\"")));
118117
let (rest_input,_) = quotation(input)?;
119118
to_value_parser(
120119
map_res(
@@ -129,10 +128,8 @@ pub fn try_read_string(input: &[u8]) -> IResult<&[u8],Value> {
129128
/// Example Successes:
130129
/// {:a 1} => Value::PersistentListMap {PersistentListMap { MapEntry { :a, 1} .. ]})
131130
pub fn try_read_map(input: &[u8]) -> IResult<&[u8],Value> {
132-
named!(lbracep,
133-
ws!(tag!("{")));
134-
named!(rbracep,
135-
ws!(tag!("}")));
131+
named!(lbracep, preceded!(consume_clojure_whitespaces, tag!("{")));
132+
named!(rbracep, preceded!(consume_clojure_whitespaces, tag!("}")));
136133
let (map_inner_input,_) = lbracep(input)?;
137134
let mut map_as_vec : Vec<MapEntry> = vec![];
138135
let mut rest_input = map_inner_input;
@@ -152,17 +149,15 @@ pub fn try_read_map(input: &[u8]) -> IResult<&[u8],Value> {
152149
}
153150
}
154151

155-
// @TODO remove ws!, use nom functions in place of macro
152+
// @TODO use nom functions in place of macro
156153
/// Tries to parse &[u8] into Value::PersistentVector
157154
/// Example Successes:
158155
/// [1 2 3] => Value::PersistentVector(PersistentVector { vals: [Rc(Value::I32(1) ... ]})
159156
/// [1 2 [5 10 15] 3]
160157
/// => Value::PersistentVector(PersistentVector { vals: [Rc(Value::I32(1) .. Rc(Value::PersistentVector..)]})
161158
pub fn try_read_vector(input: &[u8]) -> IResult<&[u8],Value> {
162-
named!(lbracketp,
163-
ws!(tag!("[")));
164-
named!(rbracketp,
165-
ws!(tag!("]")));
159+
named!(lbracketp, preceded!(consume_clojure_whitespaces, tag!("[")));
160+
named!(rbracketp, preceded!(consume_clojure_whitespaces, tag!("]")));
166161
let (vector_inner_input,_) = lbracketp(input)?;
167162
let mut vector_as_vec = vec![];
168163
// What's left of our input as we read more of our PersistentVector
@@ -196,11 +191,9 @@ pub fn try_read_vector(input: &[u8]) -> IResult<&[u8],Value> {
196191
}
197192

198193
pub fn try_read_list(input: &[u8]) -> IResult<&[u8],Value> {
199-
named!(lparenp,
200-
ws!(tag!("(")));
201-
named!(rparenp,
202-
ws!(tag!(")")));
203-
194+
named!(lparenp, preceded!(consume_clojure_whitespaces, tag!("(")));
195+
named!(rparenp, preceded!(consume_clojure_whitespaces, tag!(")")));
196+
204197
let (list_inner_input,_) = lparenp(input)?;
205198
let mut list_as_vec = vec![];
206199
let mut rest_input = list_inner_input;

0 commit comments

Comments
 (0)