summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/clippy_lints/src/items_after_statements.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/clippy/clippy_lints/src/items_after_statements.rs')
-rw-r--r--src/tools/clippy/clippy_lints/src/items_after_statements.rs31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/tools/clippy/clippy_lints/src/items_after_statements.rs b/src/tools/clippy/clippy_lints/src/items_after_statements.rs
index 46d439b44..a7ec57e28 100644
--- a/src/tools/clippy/clippy_lints/src/items_after_statements.rs
+++ b/src/tools/clippy/clippy_lints/src/items_after_statements.rs
@@ -1,8 +1,8 @@
//! lint when items are used after statements
-use clippy_utils::diagnostics::span_lint;
-use rustc_ast::ast::{Block, ItemKind, StmtKind};
-use rustc_lint::{EarlyContext, EarlyLintPass, LintContext};
+use clippy_utils::diagnostics::span_lint_hir;
+use rustc_hir::{Block, ItemKind, StmtKind};
+use rustc_lint::{LateContext, LateLintPass, LintContext};
use rustc_middle::lint::in_external_macro;
use rustc_session::{declare_lint_pass, declare_tool_lint};
@@ -52,33 +52,34 @@ declare_clippy_lint! {
declare_lint_pass!(ItemsAfterStatements => [ITEMS_AFTER_STATEMENTS]);
-impl EarlyLintPass for ItemsAfterStatements {
- fn check_block(&mut self, cx: &EarlyContext<'_>, item: &Block) {
- if in_external_macro(cx.sess(), item.span) {
+impl LateLintPass<'_> for ItemsAfterStatements {
+ fn check_block(&mut self, cx: &LateContext<'_>, block: &Block<'_>) {
+ if in_external_macro(cx.sess(), block.span) {
return;
}
- // skip initial items and trailing semicolons
- let stmts = item
+ // skip initial items
+ let stmts = block
.stmts
.iter()
- .map(|stmt| &stmt.kind)
- .skip_while(|s| matches!(**s, StmtKind::Item(..) | StmtKind::Empty));
+ .skip_while(|stmt| matches!(stmt.kind, StmtKind::Item(..)));
// lint on all further items
for stmt in stmts {
- if let StmtKind::Item(ref it) = *stmt {
- if in_external_macro(cx.sess(), it.span) {
+ if let StmtKind::Item(item_id) = stmt.kind {
+ let item = cx.tcx.hir().item(item_id);
+ if in_external_macro(cx.sess(), item.span) || !item.span.eq_ctxt(block.span) {
return;
}
- if let ItemKind::MacroDef(..) = it.kind {
+ if let ItemKind::Macro(..) = item.kind {
// do not lint `macro_rules`, but continue processing further statements
continue;
}
- span_lint(
+ span_lint_hir(
cx,
ITEMS_AFTER_STATEMENTS,
- it.span,
+ item.hir_id(),
+ item.span,
"adding items after statements is confusing, since items exist from the \
start of the scope",
);