Skip to content

Commit 93c933b

Browse files
committed
[clang-tidy] Do not emit file path for anonymous enums in readability-enum-initial-value check
1 parent 4ddea29 commit 93c933b

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

clang-tools-extra/clang-tidy/readability/EnumInitialValueCheck.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,13 @@ AST_MATCHER(EnumDecl, hasSequentialInitialValues) {
123123
return !AllEnumeratorsArePowersOfTwo;
124124
}
125125

126+
std::string getName(const EnumDecl *Decl) {
127+
if (!Decl->getDeclName())
128+
return "<unnamed>";
129+
130+
return Decl->getQualifiedNameAsString();
131+
}
132+
126133
} // namespace
127134

128135
EnumInitialValueCheck::EnumInitialValueCheck(StringRef Name,
@@ -158,12 +165,16 @@ void EnumInitialValueCheck::registerMatchers(MatchFinder *Finder) {
158165
}
159166

160167
void EnumInitialValueCheck::check(const MatchFinder::MatchResult &Result) {
168+
PrintingPolicy PP = Result.Context->getPrintingPolicy();
169+
PP.AnonymousTagLocations = false;
170+
161171
if (const auto *Enum = Result.Nodes.getNodeAs<EnumDecl>("inconsistent")) {
162172
DiagnosticBuilder Diag =
163-
diag(Enum->getBeginLoc(),
164-
"initial values in enum %0 are not consistent, consider explicit "
165-
"initialization of all, none or only the first enumerator")
166-
<< Enum;
173+
diag(
174+
Enum->getBeginLoc(),
175+
"initial values in enum '%0' are not consistent, consider explicit "
176+
"initialization of all, none or only the first enumerator")
177+
<< getName(Enum);
167178
for (const EnumConstantDecl *ECD : Enum->enumerators())
168179
if (ECD->getInitExpr() == nullptr) {
169180
const SourceLocation EndLoc = Lexer::getLocForEndOfToken(
@@ -183,16 +194,16 @@ void EnumInitialValueCheck::check(const MatchFinder::MatchResult &Result) {
183194
if (Loc.isInvalid() || Loc.isMacroID())
184195
return;
185196
DiagnosticBuilder Diag = diag(Loc, "zero initial value for the first "
186-
"enumerator in %0 can be disregarded")
187-
<< Enum;
197+
"enumerator in '%0' can be disregarded")
198+
<< getName(Enum);
188199
cleanInitialValue(Diag, ECD, *Result.SourceManager, getLangOpts());
189200
return;
190201
}
191202
if (const auto *Enum = Result.Nodes.getNodeAs<EnumDecl>("sequential")) {
192203
DiagnosticBuilder Diag =
193204
diag(Enum->getBeginLoc(),
194-
"sequential initial value in %0 can be ignored")
195-
<< Enum;
205+
"sequential initial value in '%0' can be ignored")
206+
<< getName(Enum);
196207
for (const EnumConstantDecl *ECD : llvm::drop_begin(Enum->enumerators()))
197208
cleanInitialValue(Diag, ECD, *Result.SourceManager, getLangOpts());
198209
return;

clang-tools-extra/docs/ReleaseNotes.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,8 @@ Changes in existing checks
232232

233233
- Improved :doc:`readability-enum-initial-value
234234
<clang-tidy/checks/readability/enum-initial-value>` check by only issuing
235-
diagnostics for the definition of an ``enum``, and by fixing a typo in the
235+
diagnostics for the definition of an ``enum``, by not emitting a redundant
236+
file path for anonymous enums in the diagnostic, and by fixing a typo in the
236237
diagnostic.
237238

238239
- Improved :doc:`readability-implicit-bool-conversion

clang-tools-extra/test/clang-tidy/checkers/readability/enum-initial-value.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,17 @@ enum EMacro2 {
5353
// CHECK-FIXES: EMacro2_c = 3,
5454
};
5555

56+
57+
enum {
58+
// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: initial values in enum '<unnamed>' are not consistent
59+
// CHECK-MESSAGES-ENABLE: :[[@LINE-2]]:1: warning: initial values in enum '<unnamed>' are not consistent
60+
EAnonymous_a = 1,
61+
EAnonymous_b,
62+
// CHECK-FIXES: EAnonymous_b = 2,
63+
EAnonymous_c = 3,
64+
};
65+
66+
5667
enum EnumZeroFirstInitialValue {
5768
EnumZeroFirstInitialValue_0 = 0,
5869
// CHECK-MESSAGES-ENABLE: :[[@LINE-1]]:3: warning: zero initial value for the first enumerator in 'EnumZeroFirstInitialValue' can be disregarded
@@ -114,4 +125,3 @@ enum WithFwdDeclSequential : int {
114125
EFS2 = 4,
115126
// CHECK-FIXES-ENABLE: EFS2 ,
116127
};
117-

0 commit comments

Comments
 (0)