@@ -3,6 +3,7 @@ use if_chain::if_chain;
3
3
use rustc:: lint:: in_external_macro;
4
4
use rustc_lint:: { EarlyContext , EarlyLintPass } ;
5
5
use rustc_session:: { declare_lint_pass, declare_tool_lint} ;
6
+ use rustc_span:: source_map:: Span ;
6
7
use syntax:: ast:: * ;
7
8
8
9
declare_clippy_lint ! {
@@ -242,26 +243,31 @@ fn has_unary_equivalent(bin_op: BinOpKind) -> bool {
242
243
bin_op == BinOpKind :: And || bin_op == BinOpKind :: Mul || bin_op == BinOpKind :: Sub
243
244
}
244
245
246
+ fn indentation ( cx : & EarlyContext < ' _ > , span : Span ) -> usize {
247
+ cx. sess . source_map ( ) . lookup_char_pos ( span. lo ( ) ) . col . 0
248
+ }
249
+
245
250
/// Implementation of the `POSSIBLE_MISSING_COMMA` lint for array
246
251
fn check_array ( cx : & EarlyContext < ' _ > , expr : & Expr ) {
247
252
if let ExprKind :: Array ( ref array) = expr. kind {
248
253
for element in array {
249
- if let ExprKind :: Binary ( ref op, ref lhs, _) = element. kind {
250
- if has_unary_equivalent ( op. node ) && !differing_macro_contexts ( lhs. span , op. span ) {
251
- let space_span = lhs. span . between ( op. span ) ;
252
- if let Some ( space_snippet) = snippet_opt ( cx, space_span) {
253
- let lint_span = lhs. span . with_lo ( lhs. span . hi ( ) ) ;
254
- if space_snippet. contains ( '\n' ) {
255
- span_note_and_lint (
256
- cx,
257
- POSSIBLE_MISSING_COMMA ,
258
- lint_span,
259
- "possibly missing a comma here" ,
260
- lint_span,
261
- "to remove this lint, add a comma or write the expr in a single line" ,
262
- ) ;
263
- }
264
- }
254
+ if_chain ! {
255
+ if let ExprKind :: Binary ( ref op, ref lhs, _) = element. kind;
256
+ if has_unary_equivalent( op. node) && !differing_macro_contexts( lhs. span, op. span) ;
257
+ let space_span = lhs. span. between( op. span) ;
258
+ if let Some ( space_snippet) = snippet_opt( cx, space_span) ;
259
+ let lint_span = lhs. span. with_lo( lhs. span. hi( ) ) ;
260
+ if space_snippet. contains( '\n' ) ;
261
+ if indentation( cx, op. span) <= indentation( cx, lhs. span) ;
262
+ then {
263
+ span_note_and_lint(
264
+ cx,
265
+ POSSIBLE_MISSING_COMMA ,
266
+ lint_span,
267
+ "possibly missing a comma here" ,
268
+ lint_span,
269
+ "to remove this lint, add a comma or write the expr in a single line" ,
270
+ ) ;
265
271
}
266
272
}
267
273
}
0 commit comments