mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-09-21 07:01:54 +00:00
Auto merge of #3627 - detrumi:use_self_local_macro, r=phansch
Trigger `use_self` lint in local macros Closes #2098 The test currently only covers local macros. #2098 suggested this: > You could add the macro in question into the `mini_macro` subcrate But that doesn't work for a `macro_rules`: ``` error: cannot export macro_rules! macros from a `proc-macro` crate type currently ``` So I suggest leaving out the test for external macros, as using `in_external_macro` seems straigtforward enough. Alternatives would be to use to add an additional crate (overkill if you ask me), or test with a `proc-macro`.
This commit is contained in:
commit
d264e406be
3 changed files with 38 additions and 4 deletions
|
@ -7,12 +7,12 @@
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
use crate::utils::{in_macro, span_lint_and_sugg};
|
use crate::utils::span_lint_and_sugg;
|
||||||
use if_chain::if_chain;
|
use if_chain::if_chain;
|
||||||
use rustc::hir::def::{CtorKind, Def};
|
use rustc::hir::def::{CtorKind, Def};
|
||||||
use rustc::hir::intravisit::{walk_path, walk_ty, NestedVisitorMap, Visitor};
|
use rustc::hir::intravisit::{walk_path, walk_ty, NestedVisitorMap, Visitor};
|
||||||
use rustc::hir::*;
|
use rustc::hir::*;
|
||||||
use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass};
|
use rustc::lint::{in_external_macro, LateContext, LateLintPass, LintArray, LintContext, LintPass};
|
||||||
use rustc::ty;
|
use rustc::ty;
|
||||||
use rustc::{declare_tool_lint, lint_array};
|
use rustc::{declare_tool_lint, lint_array};
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
|
@ -172,7 +172,7 @@ fn check_trait_method_impl_decl<'a, 'tcx: 'a>(
|
||||||
|
|
||||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UseSelf {
|
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UseSelf {
|
||||||
fn check_item(&mut self, cx: &LateContext<'a, 'tcx>, item: &'tcx Item) {
|
fn check_item(&mut self, cx: &LateContext<'a, 'tcx>, item: &'tcx Item) {
|
||||||
if in_macro(item.span) {
|
if in_external_macro(cx.sess(), item.span) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if_chain! {
|
if_chain! {
|
||||||
|
|
|
@ -226,6 +226,22 @@ mod tuple_structs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod macros {
|
||||||
|
macro_rules! use_self_expand {
|
||||||
|
() => {
|
||||||
|
fn new() -> Foo {
|
||||||
|
Foo {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Foo {}
|
||||||
|
|
||||||
|
impl Foo {
|
||||||
|
use_self_expand!(); // Should lint in local macros
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mod issue3410 {
|
mod issue3410 {
|
||||||
|
|
||||||
struct A;
|
struct A;
|
||||||
|
|
|
@ -132,5 +132,23 @@ error: unnecessary structure name repetition
|
||||||
LL | TS(0)
|
LL | TS(0)
|
||||||
| ^^ help: use the applicable keyword: `Self`
|
| ^^ help: use the applicable keyword: `Self`
|
||||||
|
|
||||||
error: aborting due to 22 previous errors
|
error: unnecessary structure name repetition
|
||||||
|
--> $DIR/use_self.rs:232:25
|
||||||
|
|
|
||||||
|
LL | fn new() -> Foo {
|
||||||
|
| ^^^ help: use the applicable keyword: `Self`
|
||||||
|
...
|
||||||
|
LL | use_self_expand!(); // Should lint in local macros
|
||||||
|
| ------------------- in this macro invocation
|
||||||
|
|
||||||
|
error: unnecessary structure name repetition
|
||||||
|
--> $DIR/use_self.rs:233:17
|
||||||
|
|
|
||||||
|
LL | Foo {}
|
||||||
|
| ^^^ help: use the applicable keyword: `Self`
|
||||||
|
...
|
||||||
|
LL | use_self_expand!(); // Should lint in local macros
|
||||||
|
| ------------------- in this macro invocation
|
||||||
|
|
||||||
|
error: aborting due to 24 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue