[clang-tools-extra] [clang-tidy] Fix identifier-naming style lookup in macro arguments (PR #206809)
Zeyi Xu via cfe-commits
cfe-commits at lists.llvm.org
Sun Jul 12 04:12:33 PDT 2026
https://github.com/zeyi2 updated https://github.com/llvm/llvm-project/pull/206809
>From dd7869dd81dd10d6d0b6c6f93d4a43f1d6931371 Mon Sep 17 00:00:00 2001
From: savchart <metaartem at protonmail.com>
Date: Tue, 30 Jun 2026 20:48:18 +0200
Subject: [PATCH 1/4] [clang-tidy] Fix identifier-naming style lookup in macro
arguments
---
.../readability/IdentifierNamingCheck.cpp | 3 ++-
.../identifier-naming-macro-argument.cpp | 23 +++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index a356e1390b62d..2f66eb7248d1e 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1395,7 +1395,8 @@ IdentifierNamingCheck::getDeclFailureInfo(const NamedDecl *Decl,
return std::nullopt;
const SourceLocation Loc = Decl->getLocation();
- const FileStyle &FileStyle = getStyleForFile(SM.getFilename(Loc));
+ const SourceLocation StyleLoc = SM.getFileLoc(Loc);
+ const FileStyle &FileStyle = getStyleForFile(SM.getFilename(StyleLoc));
if (!FileStyle.isActive())
return std::nullopt;
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
new file mode 100644
index 0000000000000..9774da8c7b076
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
@@ -0,0 +1,23 @@
+// RUN: %check_clang_tidy %s readability-identifier-naming %t -- \
+// RUN: -config='{CheckOptions: { \
+// RUN: readability-identifier-naming.FunctionCase: camelBack, \
+// RUN: readability-identifier-naming.ParameterCase: camelBack, \
+// RUN: readability-identifier-naming.VariableCase: camelBack \
+// RUN: }}'
+
+#define WRAP(E) E
+
+WRAP(int foo(int v) { return v; })
+
+void testLambdaInMacroArgument() {
+ WRAP([](int var) {
+ return var;
+ }(1));
+}
+
+int badFunction(int BadParam) {
+ // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: invalid case style for parameter 'BadParam' [readability-identifier-naming]
+ // CHECK-FIXES: int badFunction(int badParam) {
+ return BadParam;
+ // CHECK-FIXES: return badParam;
+}
\ No newline at end of file
>From 8df16ae197e04779b44ae2812cae8c8b04948f79 Mon Sep 17 00:00:00 2001
From: savchart <metaartem at protonmail.com>
Date: Wed, 1 Jul 2026 10:41:10 +0200
Subject: [PATCH 2/4] [clang-tidy] Add release note for identifier-naming macro
fix
---
clang-tools-extra/docs/ReleaseNotes.rst | 3 +++
.../checkers/readability/identifier-naming-macro-argument.cpp | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index fca6c21f22768..a412de4ad319c 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -758,6 +758,9 @@ Changes in existing checks
- Fixed a false positive where function templates could be diagnosed as generic
identifiers when `DefaultCase` was enabled.
+ - Fixed a false positive from naming style lookup for declarations inside macro
+ arguments.
+
- Improved :doc:`readability-implicit-bool-conversion
<clang-tidy/checks/readability/implicit-bool-conversion>` check:
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
index 9774da8c7b076..ca34cf8edcbc8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
@@ -20,4 +20,4 @@ int badFunction(int BadParam) {
// CHECK-FIXES: int badFunction(int badParam) {
return BadParam;
// CHECK-FIXES: return badParam;
-}
\ No newline at end of file
+}
>From e628cdd07d0042b117438b982517969ca7556b26 Mon Sep 17 00:00:00 2001
From: savchart <metaartem at protonmail.com>
Date: Fri, 3 Jul 2026 22:54:49 +0200
Subject: [PATCH 3/4] [clang-tidy] Strengthen macro argument naming test
---
.../.clang-tidy | 7 ++++
.../subdir/.clang-tidy | 7 ++++
.../identifier-naming-macro-argument.cpp | 36 +++++++++++--------
3 files changed, 36 insertions(+), 14 deletions(-)
create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
new file mode 100644
index 0000000000000..5d84d2c80ba8a
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
@@ -0,0 +1,7 @@
+CheckOptions:
+ - key: readability-identifier-naming.FunctionCase
+ value: CamelCase
+ - key: readability-identifier-naming.ParameterCase
+ value: CamelCase
+ - key: readability-identifier-naming.VariableCase
+ value: CamelCase
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
new file mode 100644
index 0000000000000..26cc37466082c
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
@@ -0,0 +1,7 @@
+CheckOptions:
+ - key: readability-identifier-naming.FunctionCase
+ value: camelBack
+ - key: readability-identifier-naming.ParameterCase
+ value: camelBack
+ - key: readability-identifier-naming.VariableCase
+ value: camelBack
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
index ca34cf8edcbc8..1d5f92619b272 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
@@ -1,23 +1,31 @@
-// RUN: %check_clang_tidy %s readability-identifier-naming %t -- \
-// RUN: -config='{CheckOptions: { \
-// RUN: readability-identifier-naming.FunctionCase: camelBack, \
-// RUN: readability-identifier-naming.ParameterCase: camelBack, \
-// RUN: readability-identifier-naming.VariableCase: camelBack \
-// RUN: }}'
+// RUN: rm -rf %t
+// RUN: mkdir -p %t/subdir
+// RUN: cp %S/Inputs/identifier-naming-macro-argument/.clang-tidy %t/.clang-tidy
+// RUN: cp %S/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy %t/subdir/.clang-tidy
+// RUN: cp %s %t/subdir/test.cpp
+// RUN: clang-tidy %t/subdir/test.cpp \
+// RUN: --checks=-*,readability-identifier-naming 2>&1 | FileCheck %s \
+// RUN: -check-prefix=CHECK-MESSAGES
#define WRAP(E) E
-WRAP(int foo(int v) { return v; })
+int goodFunction(int goodParam) {
+ int goodVariable = goodParam;
+ return goodVariable;
+}
+
+int wrappedExpression = WRAP(1);
+
+WRAP(int wrappedFunction(int wrappedParam) { return wrappedParam; })
-void testLambdaInMacroArgument() {
- WRAP([](int var) {
- return var;
+void callWrappedLambda() {
+ WRAP([](int wrappedParam) {
+ return wrappedParam;
}(1));
}
-int badFunction(int BadParam) {
- // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: invalid case style for parameter 'BadParam' [readability-identifier-naming]
- // CHECK-FIXES: int badFunction(int badParam) {
+int BadFunction(int BadParam) {
+// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for function 'BadFunction'
+// CHECK-MESSAGES: :[[@LINE-2]]:21: warning: invalid case style for parameter 'BadParam'
return BadParam;
- // CHECK-FIXES: return badParam;
}
>From 5eee8bdf87b85ec2617aab556d2690acc59c2edd Mon Sep 17 00:00:00 2001
From: savchart <metaartem at protonmail.com>
Date: Sat, 4 Jul 2026 20:30:47 +0200
Subject: [PATCH 4/4] [clang-tidy] Fix identifier-naming config lookup in
macros
---
.../readability/IdentifierNamingCheck.cpp | 4 ++--
.../.clang-tidy | 3 +++
.../include/macro.h | 1 +
.../subdir/.clang-tidy | 3 +++
.../identifier-naming-macro-argument.cpp | 19 +++++++++----------
5 files changed, 18 insertions(+), 12 deletions(-)
create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index 2f66eb7248d1e..19e080b42004d 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1395,8 +1395,8 @@ IdentifierNamingCheck::getDeclFailureInfo(const NamedDecl *Decl,
return std::nullopt;
const SourceLocation Loc = Decl->getLocation();
- const SourceLocation StyleLoc = SM.getFileLoc(Loc);
- const FileStyle &FileStyle = getStyleForFile(SM.getFilename(StyleLoc));
+ const SourceLocation ConfigLoc = SM.getSpellingLoc(Loc);
+ const FileStyle &FileStyle = getStyleForFile(SM.getFilename(ConfigLoc));
if (!FileStyle.isActive())
return std::nullopt;
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
index 5d84d2c80ba8a..d6e48690be0bc 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
@@ -1,4 +1,7 @@
+Checks: '-*,readability-identifier-naming'
CheckOptions:
+ - key: readability-identifier-naming.GetConfigPerFile
+ value: true
- key: readability-identifier-naming.FunctionCase
value: CamelCase
- key: readability-identifier-naming.ParameterCase
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h
new file mode 100644
index 0000000000000..42c125e4b028b
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h
@@ -0,0 +1 @@
+#define WRAP(E) ((void)(E))
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
index 26cc37466082c..f38c8a1b514fc 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
@@ -1,4 +1,7 @@
+Checks: '-*,readability-identifier-naming'
CheckOptions:
+ - key: readability-identifier-naming.GetConfigPerFile
+ value: true
- key: readability-identifier-naming.FunctionCase
value: camelBack
- key: readability-identifier-naming.ParameterCase
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
index 1d5f92619b272..c7ec7f421e7c8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
@@ -1,31 +1,30 @@
// RUN: rm -rf %t
-// RUN: mkdir -p %t/subdir
+// RUN: mkdir -p %t/include %t/subdir
// RUN: cp %S/Inputs/identifier-naming-macro-argument/.clang-tidy %t/.clang-tidy
+// RUN: cp %S/Inputs/identifier-naming-macro-argument/include/macro.h %t/include/macro.h
// RUN: cp %S/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy %t/subdir/.clang-tidy
// RUN: cp %s %t/subdir/test.cpp
// RUN: clang-tidy %t/subdir/test.cpp \
-// RUN: --checks=-*,readability-identifier-naming 2>&1 | FileCheck %s \
-// RUN: -check-prefix=CHECK-MESSAGES
+// RUN: --checks=-*,readability-identifier-naming \
+// RUN: -- -I%t/include -std=c++17 2>&1 \
+// RUN: | FileCheck %s -check-prefix=CHECK-MESSAGES \
+// RUN: --implicit-check-not="{{warning|error}}:"
-#define WRAP(E) E
+#include "macro.h"
int goodFunction(int goodParam) {
int goodVariable = goodParam;
return goodVariable;
}
-int wrappedExpression = WRAP(1);
-
-WRAP(int wrappedFunction(int wrappedParam) { return wrappedParam; })
-
void callWrappedLambda() {
WRAP([](int wrappedParam) {
return wrappedParam;
}(1));
}
+// CHECK-MESSAGES: :[[@LINE+2]]:5: warning: invalid case style for function 'BadFunction'
+// CHECK-MESSAGES: :[[@LINE+1]]:21: warning: invalid case style for parameter 'BadParam'
int BadFunction(int BadParam) {
-// CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for function 'BadFunction'
-// CHECK-MESSAGES: :[[@LINE-2]]:21: warning: invalid case style for parameter 'BadParam'
return BadParam;
}
More information about the cfe-commits
mailing list