Skip to content

Commit

Permalink
used_underscore_items will not lint exteranl item
Browse files Browse the repository at this point in the history
  • Loading branch information
WeiTheShinobi committed Aug 25, 2024
1 parent b615c82 commit d40e04a
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 19 deletions.
8 changes: 7 additions & 1 deletion clippy_lints/src/misc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use clippy_utils::{
};
use rustc_errors::Applicability;
use rustc_hir::def::Res;
use rustc_hir::def_id::LOCAL_CRATE;
use rustc_hir::intravisit::FnKind;
use rustc_hir::{
BinOpKind, BindingMode, Body, ByRef, Expr, ExprKind, FnDecl, Mutability, PatKind, QPath, Stmt, StmtKind,
Expand Down Expand Up @@ -281,9 +282,14 @@ fn used_underscore_items<'tcx>(cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
},
_ => return,
};

let name = ident.name.as_str();
let definition_span = cx.tcx.def_span(def_id);
if name.starts_with('_') && !name.starts_with("__") && !definition_span.from_expansion() {
if name.starts_with('_')
&& !name.starts_with("__")
&& !definition_span.from_expansion()
&& def_id.krate == LOCAL_CRATE
{
span_lint_and_then(
cx,
USED_UNDERSCORE_ITEMS,
Expand Down
7 changes: 7 additions & 0 deletions tests/ui/auxiliary/external_item.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
pub struct _ExternalStruct {}

impl _ExternalStruct {
pub fn _foo(self) {}
}

pub fn _exernal_foo() {}
12 changes: 12 additions & 0 deletions tests/ui/used_underscore_items.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
//@aux-build:external_item.rs
#![allow(unused)]
#![warn(clippy::used_underscore_items)]

extern crate external_item;

// should not lint macro
macro_rules! macro_wrap_func {
() => {
Expand Down Expand Up @@ -49,3 +52,12 @@ fn main() {
let foo_struct2 = a::b::c::_FooStruct2 {};
foo_struct2._method_call();
}

// should not lint exteranl crate.
// user cannot control how others name their items
fn external_item_call() {
let foo_struct3 = external_item::_ExternalStruct {};
foo_struct3._foo();

external_item::_exernal_foo();
}
36 changes: 18 additions & 18 deletions tests/ui/used_underscore_items.stderr
Original file line number Diff line number Diff line change
@@ -1,109 +1,109 @@
error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:40:5
--> tests/ui/used_underscore_items.rs:43:5
|
LL | _foo1();
| ^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:19:1
--> tests/ui/used_underscore_items.rs:22:1
|
LL | fn _foo1() {}
| ^^^^^^^^^^
= note: `-D clippy::used-underscore-items` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::used_underscore_items)]`

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:41:13
--> tests/ui/used_underscore_items.rs:44:13
|
LL | let _ = _foo2();
| ^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:21:1
--> tests/ui/used_underscore_items.rs:24:1
|
LL | fn _foo2() -> i32 {
| ^^^^^^^^^^^^^^^^^

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:42:5
--> tests/ui/used_underscore_items.rs:45:5
|
LL | a::b::c::_foo3();
| ^^^^^^^^^^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:28:13
--> tests/ui/used_underscore_items.rs:31:13
|
LL | pub fn _foo3() {}
| ^^^^^^^^^^^^^^

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:43:14
--> tests/ui/used_underscore_items.rs:46:14
|
LL | let _ = &_FooStruct {};
| ^^^^^^^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:13:1
--> tests/ui/used_underscore_items.rs:16:1
|
LL | struct _FooStruct {}
| ^^^^^^^^^^^^^^^^^

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:44:13
--> tests/ui/used_underscore_items.rs:47:13
|
LL | let _ = _FooStruct {};
| ^^^^^^^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:13:1
--> tests/ui/used_underscore_items.rs:16:1
|
LL | struct _FooStruct {}
| ^^^^^^^^^^^^^^^^^

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:46:22
--> tests/ui/used_underscore_items.rs:49:22
|
LL | let foo_struct = _FooStruct {};
| ^^^^^^^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:13:1
--> tests/ui/used_underscore_items.rs:16:1
|
LL | struct _FooStruct {}
| ^^^^^^^^^^^^^^^^^

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:47:5
--> tests/ui/used_underscore_items.rs:50:5
|
LL | foo_struct._method_call();
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:16:5
--> tests/ui/used_underscore_items.rs:19:5
|
LL | fn _method_call(self) {}
| ^^^^^^^^^^^^^^^^^^^^^

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:49:23
--> tests/ui/used_underscore_items.rs:52:23
|
LL | let foo_struct2 = a::b::c::_FooStruct2 {};
| ^^^^^^^^^^^^^^^^^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:30:13
--> tests/ui/used_underscore_items.rs:33:13
|
LL | pub struct _FooStruct2 {}
| ^^^^^^^^^^^^^^^^^^^^^^

error: used underscore-prefixed item
--> tests/ui/used_underscore_items.rs:50:5
--> tests/ui/used_underscore_items.rs:53:5
|
LL | foo_struct2._method_call();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
note: item is defined here
--> tests/ui/used_underscore_items.rs:33:17
--> tests/ui/used_underscore_items.rs:36:17
|
LL | pub fn _method_call(self) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^
Expand Down

0 comments on commit d40e04a

Please sign in to comment.