Fix clang-tidy line filtering logic (#62210)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/62210
Fixes #62204
Test Plan: #62211 clang-tidy should only error on the added lines (and not on context/removals)
Reviewed By: driazati
Differential Revision: D29917897
Pulled By: 1ntEgr8
fbshipit-source-id: de91dbf34c1ad8405507cad91ab3dd0d6c61d82e
diff --git a/tools/linter/clang_tidy/run.py b/tools/linter/clang_tidy/run.py
index f830ffc..f84d225 100644
--- a/tools/linter/clang_tidy/run.py
+++ b/tools/linter/clang_tidy/run.py
@@ -401,18 +401,27 @@
e.msg += ", run 'pip install unidiff'" # type: ignore[attr-defined]
raise e
- files = collections.defaultdict(list)
+ files: Any = collections.defaultdict(list)
for file in unidiff.PatchSet(diff):
for hunk in file:
- start = hunk[0].target_line_no
- if start is None:
- start = 1
- end = int(hunk[-1].target_line_no or 0)
- if end == 0:
+ added_line_nos = [line.target_line_no for line in hunk if line.is_added]
+
+ if len(added_line_nos) == 0:
continue
- files[file.path].append((start, end))
+ # Convert list of line numbers to ranges
+ # Eg: [1, 2, 3, 12, 13, 14, 15] becomes [[1,3], [12, 15]]
+ i = 1
+ ranges = [[added_line_nos[0], added_line_nos[0]]]
+ while i < len(added_line_nos):
+ if added_line_nos[i] != added_line_nos[i - 1] + 1:
+ ranges[-1][1] = added_line_nos[i - 1]
+ ranges.append([added_line_nos[i], added_line_nos[i]])
+ i += 1
+ ranges[-1][1] = added_line_nos[-1]
+
+ files[file.path].append(*ranges)
return dict(files)