mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-14 17:07:17 +00:00
Auto merge of #6176 - achris:issues/578, r=phansch
Lint items after statements in local macro expansions The items_after_statements lint was skipping all expansions. Instead we should still lint local macros. Fixes #578 --- *Please keep the line below* changelog: The items_after_statements now applies to local macro expansions
This commit is contained in:
commit
ee9da9a194
3 changed files with 22 additions and 5 deletions
|
@ -2,7 +2,8 @@
|
|||
|
||||
use crate::utils::span_lint;
|
||||
use rustc_ast::ast::{Block, ItemKind, StmtKind};
|
||||
use rustc_lint::{EarlyContext, EarlyLintPass};
|
||||
use rustc_lint::{EarlyContext, EarlyLintPass, LintContext};
|
||||
use rustc_middle::lint::in_external_macro;
|
||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||
|
||||
declare_clippy_lint! {
|
||||
|
@ -53,7 +54,7 @@ declare_lint_pass!(ItemsAfterStatements => [ITEMS_AFTER_STATEMENTS]);
|
|||
|
||||
impl EarlyLintPass for ItemsAfterStatements {
|
||||
fn check_block(&mut self, cx: &EarlyContext<'_>, item: &Block) {
|
||||
if item.span.from_expansion() {
|
||||
if in_external_macro(cx.sess(), item.span) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -67,7 +68,7 @@ impl EarlyLintPass for ItemsAfterStatements {
|
|||
// lint on all further items
|
||||
for stmt in stmts {
|
||||
if let StmtKind::Item(ref it) = *stmt {
|
||||
if it.span.from_expansion() {
|
||||
if in_external_macro(cx.sess(), it.span) {
|
||||
return;
|
||||
}
|
||||
if let ItemKind::MacroDef(..) = it.kind {
|
||||
|
|
|
@ -28,7 +28,10 @@ fn mac() {
|
|||
// do not lint this, because it needs to be after `a`
|
||||
macro_rules! b {
|
||||
() => {{
|
||||
a = 6
|
||||
a = 6;
|
||||
fn say_something() {
|
||||
println!("something");
|
||||
}
|
||||
}};
|
||||
}
|
||||
b!();
|
||||
|
|
|
@ -16,5 +16,18 @@ LL | | println!("foo");
|
|||
LL | | }
|
||||
| |_____^
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: adding items after statements is confusing, since items exist from the start of the scope
|
||||
--> $DIR/item_after_statement.rs:32:13
|
||||
|
|
||||
LL | / fn say_something() {
|
||||
LL | | println!("something");
|
||||
LL | | }
|
||||
| |_____________^
|
||||
...
|
||||
LL | b!();
|
||||
| ----- in this macro invocation
|
||||
|
|
||||
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
Loading…
Reference in a new issue