From f93169226a298f8fb22d768671d5564030c0ffa9 Mon Sep 17 00:00:00 2001 From: Zequan Wu Date: Wed, 6 Oct 2021 14:18:12 -0700 Subject: [PATCH] [clang-format-diff] Fix missing formatting for zero length git diff lines If we only delete lines that are outer block statements (if, while, etc), clang-format-diff.py can't format the statements inside the block statements. An example to repro: 1. Delete the if statment at line 118 in llvm/lib/CodeGen/Analysis.cpp. 2. Run `git diff -U0 --no-color HEAD^ | clang/tools/clang-format/clang-format-diff.py -i -p1` It fails to format the statement after if. Differential Revision: https://reviews.llvm.org/D111273 --- clang/tools/clang-format/clang-format-diff.py | 8 +++++--- clang/tools/clang-format/git-clang-format | 5 +++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/clang/tools/clang-format/clang-format-diff.py b/clang/tools/clang-format/clang-format-diff.py index ecad0155d9be..28ac0275615c 100755 --- a/clang/tools/clang-format/clang-format-diff.py +++ b/clang/tools/clang-format/clang-format-diff.py @@ -90,9 +90,11 @@ def main(): line_count = 1 if match.group(3): line_count = int(match.group(3)) - if line_count == 0: - continue - end_line = start_line + line_count - 1 + # Also format lines range if line_count is 0 in case of deleting + # surrounding statements. + end_line = start_line + if line_count != 0: + end_line += line_count - 1 lines_by_file.setdefault(filename, []).extend( ['-lines', str(start_line) + ':' + str(end_line)]) diff --git a/clang/tools/clang-format/git-clang-format b/clang/tools/clang-format/git-clang-format index 0233ceb3a868..30184725e122 100755 --- a/clang/tools/clang-format/git-clang-format +++ b/clang/tools/clang-format/git-clang-format @@ -321,8 +321,9 @@ def extract_lines(patch_file): line_count = 1 if match.group(3): line_count = int(match.group(3)) - if line_count > 0: - matches.setdefault(filename, []).append(Range(start_line, line_count)) + if line_count == 0: + line_count = 1 + matches.setdefault(filename, []).append(Range(start_line, line_count)) return matches -- 2.34.1