diff options
| author | Samuel Moelius <samuel.moelius@trailofbits.com> | 2024-03-04 21:56:11 +0000 |
|---|---|---|
| committer | Samuel Moelius <samuel.moelius@trailofbits.com> | 2024-03-04 22:00:24 +0000 |
| commit | cc4c8db0fd9e85ba0f686eb938e97e8c9d987ca4 (patch) | |
| tree | 8c2243c34573de13bdc9bf81029f43c109b0efd0 | |
| parent | 5214ab557f5571afcb064c3d8b9b41485ebebe60 (diff) | |
| download | rust-cc4c8db0fd9e85ba0f686eb938e97e8c9d987ca4.tar.gz rust-cc4c8db0fd9e85ba0f686eb938e97e8c9d987ca4.zip | |
Handle plural acronyms in `doc_markdown`
| -rw-r--r-- | clippy_lints/src/doc/markdown.rs | 9 | ||||
| -rw-r--r-- | tests/ui/doc/doc-fixable.fixed | 5 | ||||
| -rw-r--r-- | tests/ui/doc/doc-fixable.rs | 5 | ||||
| -rw-r--r-- | tests/ui/doc/doc-fixable.stderr | 13 |
4 files changed, 30 insertions, 2 deletions
diff --git a/clippy_lints/src/doc/markdown.rs b/clippy_lints/src/doc/markdown.rs index a58219c2946..3bedd425141 100644 --- a/clippy_lints/src/doc/markdown.rs +++ b/clippy_lints/src/doc/markdown.rs @@ -60,7 +60,14 @@ fn check_word(cx: &LateContext<'_>, word: &str, span: Span) { return false; } - let s = s.strip_suffix('s').unwrap_or(s); + let s = if let Some(prefix) = s.strip_suffix("es") + && prefix.chars().all(|c| c.is_ascii_uppercase()) + && matches!(prefix.chars().last(), Some('S' | 'X')) + { + prefix + } else { + s.strip_suffix('s').unwrap_or(s) + }; s.chars().all(char::is_alphanumeric) && s.chars().filter(|&c| c.is_uppercase()).take(2).count() > 1 diff --git a/tests/ui/doc/doc-fixable.fixed b/tests/ui/doc/doc-fixable.fixed index 16f7bafd44b..178d4a1aa2b 100644 --- a/tests/ui/doc/doc-fixable.fixed +++ b/tests/ui/doc/doc-fixable.fixed @@ -230,3 +230,8 @@ fn issue_11568() {} /// There is no try (`do()` or `do_not()`). fn parenthesized_word() {} + +/// `ABes` +/// OSes +/// UXes +fn plural_acronym_test() {} diff --git a/tests/ui/doc/doc-fixable.rs b/tests/ui/doc/doc-fixable.rs index 4058b2bad74..01edb44c64c 100644 --- a/tests/ui/doc/doc-fixable.rs +++ b/tests/ui/doc/doc-fixable.rs @@ -230,3 +230,8 @@ fn issue_11568() {} /// There is no try (do() or do_not()). fn parenthesized_word() {} + +/// ABes +/// OSes +/// UXes +fn plural_acronym_test() {} diff --git a/tests/ui/doc/doc-fixable.stderr b/tests/ui/doc/doc-fixable.stderr index 7db9ff2b83b..ac876306b39 100644 --- a/tests/ui/doc/doc-fixable.stderr +++ b/tests/ui/doc/doc-fixable.stderr @@ -341,5 +341,16 @@ help: try LL | /// There is no try (do() or `do_not()`). | ~~~~~~~~~~ -error: aborting due to 31 previous errors +error: item in documentation is missing backticks + --> tests/ui/doc/doc-fixable.rs:234:5 + | +LL | /// ABes + | ^^^^ + | +help: try + | +LL | /// `ABes` + | ~~~~~~ + +error: aborting due to 32 previous errors |
