[clang-tools-extra] [clang-tidy] Check for `-ignore-insert-conflict` support before using it in `apply_fixes` in `run-clang-tidy.py` (PR #127066)
Vicente Mataix Ferrándiz via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 17 07:02:51 PST 2025
https://github.com/loumalouomega updated https://github.com/llvm/llvm-project/pull/127066
>From 6c210298a5aab4eeb0d155534d739e21ba315469 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= <vmataix at altair.com>
Date: Thu, 13 Feb 2025 15:28:30 +0100
Subject: [PATCH 1/5] [tool] Remove legacy argument `-ignore-insert-conflict`
from `run-clang-tidy.py`
---
clang-tools-extra/clang-tidy/tool/run-clang-tidy.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
index f1b934f7139e9..acee87c860aa0 100755
--- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
+++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
@@ -200,7 +200,6 @@ def apply_fixes(
) -> None:
"""Calls clang-apply-fixes on a given directory."""
invocation = [clang_apply_replacements_binary]
- invocation.append("-ignore-insert-conflict")
if args.format:
invocation.append("-format")
if args.style:
>From 65adc60c634d93eb2186ddb18ada0131698bcabe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= <vmataix at altair.com>
Date: Fri, 14 Feb 2025 09:35:47 +0100
Subject: [PATCH 2/5] Optional
---
clang-tools-extra/clang-tidy/tool/run-clang-tidy.py | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
index acee87c860aa0..3301cf5a84a93 100755
--- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
+++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
@@ -198,8 +198,12 @@ def find_binary(arg: str, name: str, build_path: str) -> str:
def apply_fixes(
args: argparse.Namespace, clang_apply_replacements_binary: str, tmpdir: str
) -> None:
- """Calls clang-apply-fixes on a given directory."""
+ """Calls clang-apply-replacements on a given directory."""
invocation = [clang_apply_replacements_binary]
+
+ if args.ignore_insert_conflict: # Only append if the user specified it
+ invocation.append("-ignore-insert-conflict")
+
if args.format:
invocation.append("-format")
if args.style:
@@ -445,6 +449,11 @@ async def main() -> None:
action="store_true",
help="Allow empty enabled checks.",
)
+ parser.add_argument(
+ "-ignore-insert-conflict",
+ action="store_true",
+ help="Ignore insert conflict when applying fixes.",
+ )
args = parser.parse_args()
db_path = "compile_commands.json"
>From 89e2b4d227990968e909dbc88eaef27a93643d13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= <vmataix at altair.com>
Date: Fri, 14 Feb 2025 12:20:05 +0100
Subject: [PATCH 3/5] Suggestions
---
clang-tools-extra/clang-tidy/tool/run-clang-tidy.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
index 3301cf5a84a93..090c99a8f049f 100755
--- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
+++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
@@ -201,9 +201,8 @@ def apply_fixes(
"""Calls clang-apply-replacements on a given directory."""
invocation = [clang_apply_replacements_binary]
- if args.ignore_insert_conflict: # Only append if the user specified it
+ if args.ignore_insert_conflict:
invocation.append("-ignore-insert-conflict")
-
if args.format:
invocation.append("-format")
if args.style:
>From e8165bc2a8db2f4101d8e65f5d93cdb2c4a272d5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= <vmataix at altair.com>
Date: Fri, 14 Feb 2025 12:25:07 +0100
Subject: [PATCH 4/5] [clang-tidy] Preserve current behaviour in
`run-clang-tidy.py`
---
clang-tools-extra/clang-tidy/tool/run-clang-tidy.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
index 090c99a8f049f..89f55f33a578e 100755
--- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
+++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
@@ -451,6 +451,7 @@ async def main() -> None:
parser.add_argument(
"-ignore-insert-conflict",
action="store_true",
+ default=True,
help="Ignore insert conflict when applying fixes.",
)
args = parser.parse_args()
>From b1b52865fef30fb2bef19a6725ed9e987f85c70b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vicente=20Mataix=20Ferr=C3=A1ndiz?= <vmataix at altair.com>
Date: Mon, 17 Feb 2025 12:18:55 +0100
Subject: [PATCH 5/5] [clang-tidy] Check for `-ignore-insert-conflict` support
before using it in `apply_fixes` in `run_clang_tidy.py`
---
.../clang-tidy/tool/run-clang-tidy.py | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
index 89f55f33a578e..c1daf90265447 100755
--- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
+++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py
@@ -195,13 +195,22 @@ def find_binary(arg: str, name: str, build_path: str) -> str:
raise SystemExit(f"error: failed to find {name} in $PATH or at {built_path}")
+def supports_flag(binary: str, flag: str) -> bool:
+ """Checks if a given flag is supported by the binary by running --help."""
+ try:
+ result = subprocess.run(
+ [binary, "--help"], capture_output=True, text=True, check=True
+ )
+ return flag in result.stdout
+ except (subprocess.CalledProcessError, FileNotFoundError):
+ return False # Binary not found or error running it
+
def apply_fixes(
args: argparse.Namespace, clang_apply_replacements_binary: str, tmpdir: str
) -> None:
"""Calls clang-apply-replacements on a given directory."""
invocation = [clang_apply_replacements_binary]
-
- if args.ignore_insert_conflict:
+ if supports_flag(clang_apply_replacements_binary, "-ignore-insert-conflict"):
invocation.append("-ignore-insert-conflict")
if args.format:
invocation.append("-format")
@@ -448,12 +457,6 @@ async def main() -> None:
action="store_true",
help="Allow empty enabled checks.",
)
- parser.add_argument(
- "-ignore-insert-conflict",
- action="store_true",
- default=True,
- help="Ignore insert conflict when applying fixes.",
- )
args = parser.parse_args()
db_path = "compile_commands.json"
More information about the cfe-commits
mailing list