1
1
use clippy_utils:: diagnostics:: { multispan_sugg_with_applicability, span_lint_and_then} ;
2
2
use rustc_errors:: Applicability ;
3
3
use rustc_hir:: { Block , Expr , ExprKind , Stmt , StmtKind } ;
4
- use rustc_lint:: { LateContext , LateLintPass } ;
4
+ use rustc_lint:: { LateContext , LateLintPass , LintContext } ;
5
5
use rustc_session:: { declare_lint_pass, declare_tool_lint} ;
6
6
use rustc_span:: Span ;
7
7
@@ -96,7 +96,8 @@ impl LateLintPass<'_> for SemicolonBlock {
96
96
}
97
97
98
98
fn semicolon_inside_block ( cx : & LateContext < ' _ > , block : & Block < ' _ > , tail : & Expr < ' _ > , semi_span : Span ) {
99
- let insert_span = tail. span . with_lo ( tail. span . hi ( ) ) ;
99
+ let tail_span_end = tail. span . source_callsite ( ) . hi ( ) ;
100
+ let insert_span = Span :: with_root_ctxt ( tail_span_end, tail_span_end) ;
100
101
let remove_span = semi_span. with_lo ( block. span . hi ( ) ) ;
101
102
102
103
span_lint_and_then (
@@ -117,6 +118,8 @@ fn semicolon_inside_block(cx: &LateContext<'_>, block: &Block<'_>, tail: &Expr<'
117
118
118
119
fn semicolon_outside_block ( cx : & LateContext < ' _ > , block : & Block < ' _ > , tail_stmt_expr : & Expr < ' _ > , semi_span : Span ) {
119
120
let insert_span = block. span . with_lo ( block. span . hi ( ) ) ;
121
+ // account for macro calls
122
+ let semi_span = cx. sess ( ) . source_map ( ) . stmt_span ( semi_span, block. span ) ;
120
123
let remove_span = semi_span. with_lo ( tail_stmt_expr. span . source_callsite ( ) . hi ( ) ) ;
121
124
122
125
span_lint_and_then (
0 commit comments