Skip to content

Commit cf48d3a

Browse files
committed
Add trim/0, ltrim/0 and rtrim/0
Trims leading and trailing whitespace. Was added to jq in jqlang/jq#3056
1 parent babc05c commit cf48d3a

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ Here is an overview that summarises:
263263
- [x] String <-> integers (`explode`, `implode`)
264264
- [x] String normalisation (`ascii_downcase`, `ascii_upcase`)
265265
- [x] String prefix/postfix (`startswith`, `endswith`, `ltrimstr`, `rtrimstr`)
266+
- [x] String whitespace trimming (`trim`, `ltrim`, `rtrim`)
266267
- [x] String splitting (`split("foo")`)
267268
- [x] Array filters (`reverse`, `sort`, `sort_by(-.)`, `group_by`, `min_by`, `max_by`)
268269
- [x] Stream consumers (`first`, `last`, `range`, `fold`)

jaq-std/src/lib.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,15 @@ fn base_run<V: ValT, F: FilterT<V = V>>() -> Box<[Filter<RunPtr<V, F>>]> {
388388
.map_or_else(|| v.clone(), |s| V::from(s.to_owned())))
389389
})
390390
}),
391+
("trim", v(0), |_, cv| {
392+
ow!(Ok(cv.1.try_as_str()?.trim().to_string().into()))
393+
}),
394+
("ltrim", v(0), |_, cv| {
395+
ow!(Ok(cv.1.try_as_str()?.trim_start().to_string().into()))
396+
}),
397+
("rtrim", v(0), |_, cv| {
398+
ow!(Ok(cv.1.try_as_str()?.trim_end().to_string().into()))
399+
}),
391400
("escape_csv", v(0), |_, cv| {
392401
ow!(Ok(cv.1.try_as_str()?.replace('"', "\"\"").into()))
393402
}),

jaq-std/tests/funs.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,3 +230,39 @@ fn rtrimstr() {
230230
give(json!("foobar"), r#"rtrimstr("foo")"#, json!("foobar"));
231231
give(json!("اَلْعَرَبِيَّةُ"), r#"rtrimstr("ا")"#, json!("اَلْعَرَبِيَّةُ"));
232232
}
233+
234+
#[test]
235+
fn trim() {
236+
give(json!(""), "trim", json!(""));
237+
give(json!(" "), "trim", json!(""));
238+
give(json!(" "), "trim", json!(""));
239+
give(json!("foo"), "trim", json!("foo"));
240+
give(json!(" foo "), "trim", json!("foo"));
241+
give(json!(" foo "), "trim", json!("foo"));
242+
give(json!("foo "), "trim", json!("foo"));
243+
give(json!(" اَلْعَرَبِيَّةُ "), "trim", json!("اَلْعَرَبِيَّةُ"));
244+
}
245+
246+
#[test]
247+
fn ltrim() {
248+
give(json!(""), "ltrim", json!(""));
249+
give(json!(" "), "ltrim", json!(""));
250+
give(json!(" "), "ltrim", json!(""));
251+
give(json!("foo"), "ltrim", json!("foo"));
252+
give(json!(" foo "), "ltrim", json!("foo "));
253+
give(json!(" foo "), "ltrim", json!("foo "));
254+
give(json!("foo "), "ltrim", json!("foo "));
255+
give(json!(" اَلْعَرَبِيَّةُ "), "ltrim", json!("اَلْعَرَبِيَّةُ "));
256+
}
257+
258+
#[test]
259+
fn rtrim() {
260+
give(json!(""), "rtrim", json!(""));
261+
give(json!(" "), "rtrim", json!(""));
262+
give(json!(" "), "rtrim", json!(""));
263+
give(json!("foo"), "rtrim", json!("foo"));
264+
give(json!(" foo "), "rtrim", json!(" foo"));
265+
give(json!(" foo "), "rtrim", json!(" foo"));
266+
give(json!(" foo"), "rtrim", json!(" foo"));
267+
give(json!(" اَلْعَرَبِيَّةُ "), "rtrim", json!(" اَلْعَرَبِيَّةُ"));
268+
}

0 commit comments

Comments
 (0)