about summary refs log tree commit diff
diff options
context:
space:
mode:
authorKisaragi Marine <kisaragi.effective@gmail.com>2023-06-14 12:23:02 +0900
committerKisaragi Marine <kisaragi.effective@gmail.com>2023-06-14 12:31:49 +0900
commit062b2099044ed1d65f6100d0d0ca8cd76102246e (patch)
treee80334ca3eb9bf2768ee1ff530df8546376f0b6f
parenteefc2a0ac4e72d5532f9e0d9bd76971bdac3f597 (diff)
downloadrust-062b2099044ed1d65f6100d0d0ca8cd76102246e.tar.gz
rust-062b2099044ed1d65f6100d0d0ca8cd76102246e.zip
Ignore `main()` in `no_test` code fences
-rw-r--r--clippy_lints/src/doc.rs5
-rw-r--r--tests/ui/doc/needless_doctest_main.rs19
2 files changed, 23 insertions, 1 deletions
diff --git a/clippy_lints/src/doc.rs b/clippy_lints/src/doc.rs
index 384aca7fead..0617c3ea5e9 100644
--- a/clippy_lints/src/doc.rs
+++ b/clippy_lints/src/doc.rs
@@ -571,6 +571,7 @@ fn check_doc<'a, Events: Iterator<Item = (pulldown_cmark::Event<'a>, Range<usize
     let mut in_link = None;
     let mut in_heading = false;
     let mut is_rust = false;
+    let mut no_test = false;
     let mut edition = None;
     let mut ticks_unbalanced = false;
     let mut text_to_check: Vec<(CowStr<'_>, Span)> = Vec::new();
@@ -584,6 +585,8 @@ fn check_doc<'a, Events: Iterator<Item = (pulldown_cmark::Event<'a>, Range<usize
                         if item == "ignore" {
                             is_rust = false;
                             break;
+                        } else if item == "no_test" {
+                            no_test = true;
                         }
                         if let Some(stripped) = item.strip_prefix("edition") {
                             is_rust = true;
@@ -648,7 +651,7 @@ fn check_doc<'a, Events: Iterator<Item = (pulldown_cmark::Event<'a>, Range<usize
                 headers.errors |= in_heading && trimmed_text == "Errors";
                 headers.panics |= in_heading && trimmed_text == "Panics";
                 if in_code {
-                    if is_rust {
+                    if is_rust && !no_test {
                         let edition = edition.unwrap_or_else(|| cx.tcx.sess.edition());
                         check_code(cx, &text, edition, span);
                     }
diff --git a/tests/ui/doc/needless_doctest_main.rs b/tests/ui/doc/needless_doctest_main.rs
new file mode 100644
index 00000000000..fb32aac9449
--- /dev/null
+++ b/tests/ui/doc/needless_doctest_main.rs
@@ -0,0 +1,19 @@
+#![warn(clippy::needless_doctest_main)]
+//! issue 10491:
+//! ```rust,no_test
+//! use std::collections::HashMap;
+//!
+//! fn main() {
+//!     let mut m = HashMap::new();
+//!     m.insert(1u32, 2u32);
+//! }
+//! ```
+//!
+
+/// some description here
+/// ```rust,no_test
+/// fn main() {
+///     foo()
+/// }
+/// ```
+fn foo() {}