Skip to content

Commit 5709a59

Browse files
authored
Fix pretty for chain of compose and exclude (#1217)
Adding test for pretty print of exclude When used with compose, the results weren't that nice. Change: exclude-of-compose
1 parent 3b41ec9 commit 5709a59

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

josh-core/src/filter/opt.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -235,22 +235,30 @@ fn common_pre(filters: &Vec<Filter>) -> Option<(Filter, Vec<Filter>)> {
235235

236236
fn common_post(filters: &Vec<Filter>) -> Option<(Filter, Vec<Filter>)> {
237237
let mut rest = vec![];
238-
let mut c: Option<Filter> = None;
238+
let mut common_post: Option<Filter> = None;
239239
for f in filters {
240240
let (a, b) = last_chain(to_filter(Op::Nop), *f);
241241
{
242242
rest.push(a);
243-
if c.is_none() {
244-
c = Some(b);
243+
if common_post.is_none() {
244+
common_post = Some(b);
245245
}
246-
if c != Some(b) {
246+
if common_post != Some(b) {
247247
return None;
248248
}
249249
}
250250
}
251-
match c.map(to_op) {
252-
Some(Op::Prefix(_)) => c.map(|c| (c, rest)),
253-
_ => None,
251+
252+
if let Some(c) = common_post {
253+
if invert(c).ok() == common_post {
254+
common_post.map(|c| (c, rest))
255+
} else if let Op::Prefix(_) = to_op(c) {
256+
common_post.map(|c| (c, rest))
257+
} else {
258+
None
259+
}
260+
} else {
261+
None
254262
}
255263
}
256264

tests/filter/pretty_print.t

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,33 @@
5555
::a/
5656
::b/
5757
]
58+
$ josh-filter -p :[::a,::b]:/c
59+
:[
60+
::a:/c
61+
::b:/c
62+
]
63+
$ josh-filter -p :[::a,::b]::c
64+
:[
65+
::a
66+
::b
67+
]::c
68+
Exclude of compose should not be split out
69+
$ josh-filter -p :[:/a:prefix=a,:/b:prefix=b]:exclude[::a/a,::b/b]
70+
:[
71+
::a/
72+
::b/
73+
]:exclude[
74+
::a/a
75+
::b/b
76+
]
77+
$ josh-filter --reverse -p :[:/a:prefix=a,:/b:prefix=b]:exclude[::a/a,::b/b]
78+
:exclude[
79+
::a/a
80+
::b/b
81+
]:[
82+
::a/
83+
::b/
84+
]
5885
$ josh-filter -p :prefix=a/b:prefix=c
5986
:prefix=c/a/b
6087
$ josh-filter --reverse -p :prefix=a/b:prefix=c

0 commit comments

Comments
 (0)