Skip to content

Commit a458569

Browse files
committed
Rewrite ignore to use match
This rewrites this to use a match instead of nested `if`, and also to reduce duplication by using a macro.
1 parent 6792a75 commit a458569

File tree

1 file changed

+29
-27
lines changed

1 file changed

+29
-27
lines changed

parser/src/ignore_block.rs

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,40 +12,42 @@ impl IgnoreBlocks {
1212
let mut ignore = Vec::new();
1313
let mut parser = Parser::new(s).into_offset_iter();
1414
while let Some((event, range)) = parser.next() {
15-
if let Event::Start(Tag::CodeBlock(_)) = event {
16-
let start = range.start;
17-
while let Some((event, range)) = parser.next() {
18-
if let Event::End(TagEnd::CodeBlock) = event {
19-
ignore.push(start..range.end);
20-
break;
21-
}
22-
}
23-
} else if let Event::Start(Tag::BlockQuote(_)) = event {
24-
let start = range.start;
25-
let mut count = 1;
26-
while let Some((event, range)) = parser.next() {
27-
if let Event::Start(Tag::BlockQuote(_)) = event {
28-
count += 1;
29-
} else if let Event::End(TagEnd::BlockQuote(_)) = event {
30-
count -= 1;
31-
if count == 0 {
15+
macro_rules! ignore_till_end {
16+
($p:pat) => {
17+
let start = range.start;
18+
while let Some((event, range)) = parser.next() {
19+
if let Event::End($p) = event {
3220
ignore.push(start..range.end);
3321
break;
3422
}
3523
}
24+
};
25+
}
26+
match event {
27+
Event::Start(Tag::CodeBlock(_)) => {
28+
ignore_till_end!(TagEnd::CodeBlock);
3629
}
37-
} else if let Event::Start(Tag::HtmlBlock) = event {
38-
let start = range.start;
39-
while let Some((event, range)) = parser.next() {
40-
if let Event::End(TagEnd::HtmlBlock) = event {
41-
ignore.push(start..range.end);
42-
break;
30+
Event::Start(Tag::BlockQuote(_)) => {
31+
let start = range.start;
32+
let mut count = 1;
33+
while let Some((event, range)) = parser.next() {
34+
if let Event::Start(Tag::BlockQuote(_)) = event {
35+
count += 1;
36+
} else if let Event::End(TagEnd::BlockQuote(_)) = event {
37+
count -= 1;
38+
if count == 0 {
39+
ignore.push(start..range.end);
40+
break;
41+
}
42+
}
4343
}
4444
}
45-
} else if let Event::InlineHtml(_) = event {
46-
ignore.push(range);
47-
} else if let Event::Code(_) = event {
48-
ignore.push(range);
45+
Event::Start(Tag::HtmlBlock) => {
46+
ignore_till_end!(TagEnd::HtmlBlock);
47+
}
48+
Event::InlineHtml(_) => ignore.push(range),
49+
Event::Code(_) => ignore.push(range),
50+
_ => {}
4951
}
5052
}
5153

0 commit comments

Comments
 (0)