about summary refs log tree commit diff
diff options
context:
space:
mode:
authoryanglsh <yanglsh@shanghaitech.edu.cn>2024-12-28 00:19:20 -0700
committeryanglsh <yanglsh@shanghaitech.edu.cn>2025-03-01 20:35:18 +0800
commit91d20cbb82f041a31f747788567f884023cc322b (patch)
tree496f58b277b85f1bf52d93f4d08b2235ec4702b5
parentd395646a60f91ff40baebc9f0cd032cb182ea916 (diff)
downloadrust-91d20cbb82f041a31f747788567f884023cc322b.tar.gz
rust-91d20cbb82f041a31f747788567f884023cc322b.zip
Use inner span in `undocumented_unsafe_blocks`
-rw-r--r--clippy_lints/src/undocumented_unsafe_blocks.rs19
-rw-r--r--tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.default.stderr10
-rw-r--r--tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.disabled.stderr10
-rw-r--r--tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs1
4 files changed, 29 insertions, 11 deletions
diff --git a/clippy_lints/src/undocumented_unsafe_blocks.rs b/clippy_lints/src/undocumented_unsafe_blocks.rs
index 917e7919c12..cfb7246f2d2 100644
--- a/clippy_lints/src/undocumented_unsafe_blocks.rs
+++ b/clippy_lints/src/undocumented_unsafe_blocks.rs
@@ -606,15 +606,32 @@ fn span_from_macro_expansion_has_safety_comment(cx: &LateContext<'_>, span: Span
 
 fn get_body_search_span(cx: &LateContext<'_>) -> Option<Span> {
     let body = cx.enclosing_body?;
+    let mut maybe_mod_item = None;
+
     for (_, parent_node) in cx.tcx.hir_parent_iter(body.hir_id) {
         match parent_node {
             Node::Crate(mod_) => return Some(mod_.spans.inner_span),
+            Node::Item(hir::Item {
+                kind: ItemKind::Mod(mod_),
+                span,
+                ..
+            }) => {
+                return maybe_mod_item
+                    .and_then(|item| comment_start_before_item_in_mod(cx, mod_, *span, &item))
+                    .map(|comment_start| mod_.spans.inner_span.with_lo(comment_start))
+                    .or(Some(*span));
+            },
             node if let Some((span, _)) = span_and_hid_of_item_alike_node(&node)
                 && !is_const_or_static(&node) =>
             {
                 return Some(span);
             },
-            _ => {},
+            Node::Item(item) => {
+                maybe_mod_item = Some(*item);
+            },
+            _ => {
+                maybe_mod_item = None;
+            },
         }
     }
     None
diff --git a/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.default.stderr b/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.default.stderr
index d3585322bb9..1773babbfcf 100644
--- a/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.default.stderr
+++ b/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.default.stderr
@@ -311,7 +311,7 @@ LL |             let bar = unsafe {};
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:592:52
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:638:52
    |
 LL |         const NO_SAFETY_IN_TRAIT_BUT_IN_IMPL: u8 = unsafe { 0 };
    |                                                    ^^^^^^^^^^^^
@@ -319,7 +319,7 @@ LL |         const NO_SAFETY_IN_TRAIT_BUT_IN_IMPL: u8 = unsafe { 0 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:601:41
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:647:41
    |
 LL |         const NO_SAFETY_IN_TRAIT: i32 = unsafe { 1 };
    |                                         ^^^^^^^^^^^^
@@ -327,7 +327,7 @@ LL |         const NO_SAFETY_IN_TRAIT: i32 = unsafe { 1 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:611:42
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:657:42
    |
 LL |         const HAS_SAFETY_IN_TRAIT: i32 = unsafe { 3 };
    |                                          ^^^^^^^^^^^^
@@ -335,7 +335,7 @@ LL |         const HAS_SAFETY_IN_TRAIT: i32 = unsafe { 3 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:616:40
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:662:40
    |
 LL |         const NO_SAFETY_IN_IMPL: i32 = unsafe { 1 };
    |                                        ^^^^^^^^^^^^
@@ -343,7 +343,7 @@ LL |         const NO_SAFETY_IN_IMPL: i32 = unsafe { 1 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:627:9
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:673:9
    |
 LL |         unsafe { here_is_another_variable_with_long_name };
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.disabled.stderr b/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.disabled.stderr
index 9ded7fb407a..494da37a5fb 100644
--- a/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.disabled.stderr
+++ b/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.disabled.stderr
@@ -391,7 +391,7 @@ LL |     unsafe {}
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:592:52
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:638:52
    |
 LL |         const NO_SAFETY_IN_TRAIT_BUT_IN_IMPL: u8 = unsafe { 0 };
    |                                                    ^^^^^^^^^^^^
@@ -399,7 +399,7 @@ LL |         const NO_SAFETY_IN_TRAIT_BUT_IN_IMPL: u8 = unsafe { 0 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:601:41
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:647:41
    |
 LL |         const NO_SAFETY_IN_TRAIT: i32 = unsafe { 1 };
    |                                         ^^^^^^^^^^^^
@@ -407,7 +407,7 @@ LL |         const NO_SAFETY_IN_TRAIT: i32 = unsafe { 1 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:611:42
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:657:42
    |
 LL |         const HAS_SAFETY_IN_TRAIT: i32 = unsafe { 3 };
    |                                          ^^^^^^^^^^^^
@@ -415,7 +415,7 @@ LL |         const HAS_SAFETY_IN_TRAIT: i32 = unsafe { 3 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:616:40
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:662:40
    |
 LL |         const NO_SAFETY_IN_IMPL: i32 = unsafe { 1 };
    |                                        ^^^^^^^^^^^^
@@ -423,7 +423,7 @@ LL |         const NO_SAFETY_IN_IMPL: i32 = unsafe { 1 };
    = help: consider adding a safety comment on the preceding line
 
 error: unsafe block missing a safety comment
-  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:627:9
+  --> tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs:673:9
    |
 LL |         unsafe { here_is_another_variable_with_long_name };
    |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs b/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs
index 582f31f3bba..e6002c2d22e 100644
--- a/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs
+++ b/tests/ui-toml/undocumented_unsafe_blocks/undocumented_unsafe_blocks.rs
@@ -671,6 +671,7 @@ fn issue_13024() {
     // SAFETY: good
     just_a_simple_variable_with_a_very_long_name_that_has_seventy_eight_characters =
         unsafe { here_is_another_variable_with_long_name };
+    //~^ undocumented_unsafe_blocks
 }
 
 fn main() {}