Skip to content

Commit 5d10538

Browse files
committed
Auto merge of rust-lang#12809 - GuillaumeGomez:missing-backticks-fix, r=y21
Correctly handle closing parens in `missing_backticks` doc lint Fixes rust-lang#12795. changelog: Correctly handle closing parens in `doc_markdown` lint
2 parents 674c641 + 4f98cc6 commit 5d10538

File tree

4 files changed

+86
-0
lines changed

4 files changed

+86
-0
lines changed

clippy_lints/src/doc/markdown.rs

+20
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub fn check(
3030
word = tmp_word;
3131
}
3232

33+
let original_len = word.len();
3334
word = word.trim_start_matches(trim_pattern);
3435

3536
// Remove leading or trailing single `:` which may be part of a sentence.
@@ -44,6 +45,25 @@ pub fn check(
4445
continue;
4546
}
4647

48+
// Ensure that all reachable matching closing parens are included as well.
49+
let size_diff = original_len - word.len();
50+
let mut open_parens = 0;
51+
let mut close_parens = 0;
52+
for c in word.chars() {
53+
if c == '(' {
54+
open_parens += 1;
55+
} else if c == ')' {
56+
close_parens += 1;
57+
}
58+
}
59+
while close_parens < open_parens
60+
&& let Some(tmp_word) = orig_word.get(size_diff..=(word.len() + size_diff))
61+
&& tmp_word.ends_with(')')
62+
{
63+
word = tmp_word;
64+
close_parens += 1;
65+
}
66+
4767
// Adjust for the current word
4868
let offset = word.as_ptr() as usize - text.as_ptr() as usize;
4969
let span = Span::new(

tests/ui/doc/issue_12795.fixed

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#![warn(clippy::doc_markdown)]
2+
3+
//! A comment with `a_b(x)` and `a_c` in it and (`a_b((c))` ) too and (maybe `a_b((c))`)
4+
//~^ ERROR: item in documentation is missing backticks
5+
//~| ERROR: item in documentation is missing backticks
6+
//~| ERROR: item in documentation is missing backticks
7+
//~| ERROR: item in documentation is missing backticks
8+
9+
pub fn main() {}

tests/ui/doc/issue_12795.rs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#![warn(clippy::doc_markdown)]
2+
3+
//! A comment with a_b(x) and a_c in it and (a_b((c)) ) too and (maybe a_b((c)))
4+
//~^ ERROR: item in documentation is missing backticks
5+
//~| ERROR: item in documentation is missing backticks
6+
//~| ERROR: item in documentation is missing backticks
7+
//~| ERROR: item in documentation is missing backticks
8+
9+
pub fn main() {}

tests/ui/doc/issue_12795.stderr

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
error: item in documentation is missing backticks
2+
--> tests/ui/doc/issue_12795.rs:3:20
3+
|
4+
LL | //! A comment with a_b(x) and a_c in it and (a_b((c)) ) too and (maybe a_b((c)))
5+
| ^^^^^^
6+
|
7+
= note: `-D clippy::doc-markdown` implied by `-D warnings`
8+
= help: to override `-D warnings` add `#[allow(clippy::doc_markdown)]`
9+
help: try
10+
|
11+
LL | //! A comment with `a_b(x)` and a_c in it and (a_b((c)) ) too and (maybe a_b((c)))
12+
| ~~~~~~~~
13+
14+
error: item in documentation is missing backticks
15+
--> tests/ui/doc/issue_12795.rs:3:31
16+
|
17+
LL | //! A comment with a_b(x) and a_c in it and (a_b((c)) ) too and (maybe a_b((c)))
18+
| ^^^
19+
|
20+
help: try
21+
|
22+
LL | //! A comment with a_b(x) and `a_c` in it and (a_b((c)) ) too and (maybe a_b((c)))
23+
| ~~~~~
24+
25+
error: item in documentation is missing backticks
26+
--> tests/ui/doc/issue_12795.rs:3:46
27+
|
28+
LL | //! A comment with a_b(x) and a_c in it and (a_b((c)) ) too and (maybe a_b((c)))
29+
| ^^^^^^^^
30+
|
31+
help: try
32+
|
33+
LL | //! A comment with a_b(x) and a_c in it and (`a_b((c))` ) too and (maybe a_b((c)))
34+
| ~~~~~~~~~~
35+
36+
error: item in documentation is missing backticks
37+
--> tests/ui/doc/issue_12795.rs:3:72
38+
|
39+
LL | //! A comment with a_b(x) and a_c in it and (a_b((c)) ) too and (maybe a_b((c)))
40+
| ^^^^^^^^
41+
|
42+
help: try
43+
|
44+
LL | //! A comment with a_b(x) and a_c in it and (a_b((c)) ) too and (maybe `a_b((c))`)
45+
| ~~~~~~~~~~
46+
47+
error: aborting due to 4 previous errors
48+

0 commit comments

Comments
 (0)