By matching only current line starting with '+', we miss the case
when deleting code makes consecutive blank lines appear: this patch
then makes it possible to detect this case by also matching current
line starting with ' ', which is an already existing blank line.

Signed-off-by: Alexandre Ghiti <a...@ghiti.fr>
---

Changes in v2:
        - Fix the --fix option

 scripts/checkpatch.pl | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index b737ca9d7204..7dc12c137009 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2081,10 +2081,15 @@ sub fix_inserted_deleted_lines {
                }
 
                while (defined($inserted) && ${$inserted}{'LINENR'} == 
$old_linenr) {
+                       my $len = 1;
                        push(@lines, ${$inserted}{'LINE'});
+                       # Do not increment the length when inserting a deletion 
line.
+                       if (${$inserted}{'LINE'} =~ /^\-/) {
+                               $len = 0;
+                       }
                        $inserted = @{$insertedRef}[$next_insert++];
                        $new_linenr++;
-                       fixup_current_range(\$lines[$range_last_linenr], 
$delta_offset++, 1);
+                       fixup_current_range(\$lines[$range_last_linenr], 
$delta_offset++, $len);
                }
 
                if ($save_line) {
@@ -3298,12 +3303,18 @@ sub process {
 
 # check for multiple consecutive blank lines
                if ($prevline =~ /^[\+ ]\s*$/ &&
-                   $line =~ /^\+\s*$/ &&
+                   $line =~ /^[\+ ]\s*$/ &&
                    $last_blank_line != ($linenr - 1)) {
                        if (CHK("LINE_SPACING",
                                "Please don't use multiple blank lines\n" . 
$hereprev) &&
                            $fix) {
                                fix_delete_line($fixlinenr, $rawline);
+                               if ($line =~ /^ \s*$/) {
+                                       # If the line is not an inserted blank 
line, the multiple
+                                       # consecutive blank lines are caused by 
deletion: fix this
+                                       # by replacing the blank line with a 
deletion line.
+                                       fix_insert_line($fixlinenr, "\-");
+                               }
                        }
 
                        $last_blank_line = $linenr;
-- 
2.20.1

Reply via email to