Skip to content

Commit 0e4bae4

Browse files
committed
Mention type or field name in diagnostic
1 parent bcdcf47 commit 0e4bae4

File tree

2 files changed

+43
-39
lines changed

2 files changed

+43
-39
lines changed

clang-tools-extra/clang-tidy/modernize/UseDesignatedInitializersCheck.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ void UseDesignatedInitializersCheck::check(
112112
}
113113
{
114114
DiagnosticBuilder Diag =
115-
diag(InitList->getLBraceLoc(), "use designated initializer list");
115+
diag(InitList->getLBraceLoc(),
116+
"use designated initializer list to initialize %0");
117+
Diag << Type->getDeclName();
116118
Diag << InitList->getSourceRange();
117119
for (const Stmt *InitExpr : *SyntacticInitList) {
118120
const std::string Designator =
@@ -134,12 +136,14 @@ void UseDesignatedInitializersCheck::check(
134136
if (IgnoreMacros && InitExpr->getBeginLoc().isMacroID()) {
135137
continue;
136138
}
137-
DiagnosticBuilder Diag =
138-
diag(InitExpr->getBeginLoc(), "use designated init expression");
139-
Diag << InitExpr->getSourceRange();
140139
const std::string Designator =
141140
LazyDesignators()->at(InitExpr->getBeginLoc());
142-
if (!Designator.empty()) {
141+
DiagnosticBuilder Diag =
142+
diag(InitExpr->getBeginLoc(),
143+
"use designated init expression to initialize field '%0'");
144+
Diag << InitExpr->getSourceRange();
145+
if (!Designator.empty() && Designator.front() == '.') {
146+
Diag << Designator.substr(1); // Strip leading dot
143147
Diag << FixItHint::CreateInsertion(InitExpr->getBeginLoc(),
144148
Designator + "=");
145149
}

clang-tools-extra/test/clang-tidy/checkers/modernize/use-designated-initializers.cpp

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,24 @@ struct S2 { int i, j; };
2323
S2 s21{.i=1, .j =2};
2424

2525
S2 s22 = {1, 2};
26-
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
26+
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list to initialize 'S2' [modernize-use-designated-initializers]
2727
// CHECK-MESSAGES: :[[@LINE-6]]:1: note: this is the type to initialize
28-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
28+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list to initialize 'S2' [modernize-use-designated-initializers]
2929
// CHECK-MESSAGES-POD: :[[@LINE-8]]:1: note: this is the type to initialize
3030
// CHECK-FIXES: S2 s22 = {.i=1, .j=2};
3131

3232
S2 s23{1};
33-
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use designated initializer list [modernize-use-designated-initializers]
33+
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use designated initializer list to initialize 'S2' [modernize-use-designated-initializers]
3434
// CHECK-MESSAGES: :[[@LINE-13]]:1: note: this is the type to initialize
35-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:7: warning: use designated initializer list [modernize-use-designated-initializers]
35+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:7: warning: use designated initializer list to initialize 'S2' [modernize-use-designated-initializers]
3636
// CHECK-MESSAGES-POD: :[[@LINE-15]]:1: note: this is the type to initialize
3737
// CHECK-FIXES: S2 s23{.i=1};
3838

3939
S2 s24{.i = 1};
4040

4141
S2 s25 = {.i=1, 2};
42-
// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use designated init expression [modernize-use-designated-initializers]
43-
// CHECK-MESSAGES-POD: :[[@LINE-2]]:17: warning: use designated init expression [modernize-use-designated-initializers]
42+
// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: use designated init expression to initialize field 'j' [modernize-use-designated-initializers]
43+
// CHECK-MESSAGES-POD: :[[@LINE-2]]:17: warning: use designated init expression to initialize field 'j' [modernize-use-designated-initializers]
4444
// CHECK-FIXES: S2 s25 = {.i=1, .j=2};
4545

4646
class S3 {
@@ -50,27 +50,27 @@ class S3 {
5050
};
5151

5252
S3 s31 = {.s2 = 1, 2, 3.1};
53-
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: use designated init expression [modernize-use-designated-initializers]
54-
// CHECK-MESSAGES: :[[@LINE-2]]:23: warning: use designated init expression [modernize-use-designated-initializers]
55-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:20: warning: use designated init expression [modernize-use-designated-initializers]
56-
// CHECK-MESSAGES-POD: :[[@LINE-4]]:23: warning: use designated init expression [modernize-use-designated-initializers]
53+
// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: use designated init expression to initialize field 's2.j' [modernize-use-designated-initializers]
54+
// CHECK-MESSAGES: :[[@LINE-2]]:23: warning: use designated init expression to initialize field 'd' [modernize-use-designated-initializers]
55+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:20: warning: use designated init expression to initialize field 's2.j' [modernize-use-designated-initializers]
56+
// CHECK-MESSAGES-POD: :[[@LINE-4]]:23: warning: use designated init expression to initialize field 'd' [modernize-use-designated-initializers]
5757
// CHECK-FIXES: S3 s31 = {.s2 = 1, .s2.j=2, .d=3.1};
5858

5959
S3 s32 = {{.i = 1, 2}};
60-
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
60+
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list to initialize 'S3' [modernize-use-designated-initializers]
6161
// CHECK-MESSAGES: :[[@LINE-15]]:1: note: this is the type to initialize
62-
// CHECK-MESSAGES: :[[@LINE-3]]:20: warning: use designated init expression [modernize-use-designated-initializers]
63-
// CHECK-MESSAGES-POD: :[[@LINE-4]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
62+
// CHECK-MESSAGES: :[[@LINE-3]]:20: warning: use designated init expression to initialize field 'j' [modernize-use-designated-initializers]
63+
// CHECK-MESSAGES-POD: :[[@LINE-4]]:10: warning: use designated initializer list to initialize 'S3' [modernize-use-designated-initializers]
6464
// CHECK-MESSAGES-POD: :[[@LINE-18]]:1: note: this is the type to initialize
65-
// CHECK-MESSAGES-POD: :[[@LINE-6]]:20: warning: use designated init expression [modernize-use-designated-initializers]
65+
// CHECK-MESSAGES-POD: :[[@LINE-6]]:20: warning: use designated init expression to initialize field 'j' [modernize-use-designated-initializers]
6666
// CHECK-FIXES: S3 s32 = {.s2={.i = 1, .j=2}};
6767

6868
S3 s33 = {{2}, .d=3.1};
69-
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use designated init expression [modernize-use-designated-initializers]
70-
// CHECK-MESSAGES: :[[@LINE-2]]:11: warning: use designated initializer list [modernize-use-designated-initializers]
69+
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use designated init expression to initialize field 's2' [modernize-use-designated-initializers]
70+
// CHECK-MESSAGES: :[[@LINE-2]]:11: warning: use designated initializer list to initialize 'S2' [modernize-use-designated-initializers]
7171
// CHECK-MESSAGES: :[[@LINE-50]]:1: note: this is the type to initialize
72-
// CHECK-MESSAGES-POD: :[[@LINE-4]]:11: warning: use designated init expression [modernize-use-designated-initializers]
73-
// CHECK-MESSAGES-POD: :[[@LINE-5]]:11: warning: use designated initializer list [modernize-use-designated-initializers]
72+
// CHECK-MESSAGES-POD: :[[@LINE-4]]:11: warning: use designated init expression to initialize field 's2' [modernize-use-designated-initializers]
73+
// CHECK-MESSAGES-POD: :[[@LINE-5]]:11: warning: use designated initializer list to initialize 'S2' [modernize-use-designated-initializers]
7474
// CHECK-MESSAGES-POD: :[[@LINE-53]]:1: note: this is the type to initialize
7575
// CHECK-FIXES: S3 s33 = {.s2={.i=2}, .d=3.1};
7676

@@ -80,12 +80,12 @@ struct S4 {
8080
};
8181

8282
S4 s41 {2.2};
83-
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
83+
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:8: warning: use designated initializer list to initialize 'S4' [modernize-use-designated-initializers]
8484
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-7]]:1: note: this is the type to initialize
8585
// CHECK-FIXES-SINGLE-ELEMENT: S4 s41 {.d=2.2};
8686

8787
S4 s42 = {{}};
88-
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
88+
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:10: warning: use designated initializer list to initialize 'S4' [modernize-use-designated-initializers]
8989
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-12]]:1: note: this is the type to initialize
9090
// CHECK-FIXES-SINGLE-ELEMENT: S4 s42 = {.d={}};
9191

@@ -107,9 +107,9 @@ struct S6 {
107107
};
108108

109109
S6 s61 {1, 2};
110-
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
110+
// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: use designated initializer list to initialize 'S6' [modernize-use-designated-initializers]
111111
// CHECK-MESSAGES: :[[@LINE-7]]:1: note: this is the type to initialize
112-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
112+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:8: warning: use designated initializer list to initialize 'S6' [modernize-use-designated-initializers]
113113
// CHECK-MESSAGES-POD: :[[@LINE-9]]:1: note: this is the type to initialize
114114
// CHECK-FIXES: S6 s61 {.i=1, .s.j=2};
115115

@@ -121,7 +121,7 @@ struct S7 {
121121
};
122122

123123
S7 s71 {1};
124-
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:8: warning: use designated initializer list [modernize-use-designated-initializers]
124+
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-1]]:8: warning: use designated initializer list to initialize 'S7' [modernize-use-designated-initializers]
125125
// CHECK-MESSAGES-SINGLE-ELEMENT: :[[@LINE-9]]:1: note: this is the type to initialize
126126
// CHECK-FIXES-SINGLE-ELEMENT: S7 s71 {.u.k=1};
127127

@@ -135,30 +135,30 @@ struct S9 {
135135
};
136136

137137
S9 s91{1, 2};
138-
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use designated initializer list [modernize-use-designated-initializers]
138+
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: use designated initializer list to initialize 'S9' [modernize-use-designated-initializers]
139139
// CHECK-MESSAGES: :[[@LINE-7]]:1: note: this is the type to initialize
140140
// CHECK-FIXES: S9 s91{.i=1, .j=2};
141141

142142
struct S10 { int i = 1, j = 2; };
143143

144144
S10 s101 {1, .j=2};
145-
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use designated init expression [modernize-use-designated-initializers]
145+
// CHECK-MESSAGES: :[[@LINE-1]]:11: warning: use designated init expression to initialize field 'i' [modernize-use-designated-initializers]
146146
// CHECK-FIXES: S10 s101 {.i=1, .j=2};
147147

148148
struct S11 { int i; S10 s10; };
149149

150150
S11 s111 { .i = 1 };
151151
S11 s112 { 1 };
152-
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
152+
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list to initialize 'S11' [modernize-use-designated-initializers]
153153
// CHECK-MESSAGES: :[[@LINE-5]]:1: note: this is the type to initialize
154154
// CHECK-FIXES: S11 s112 { .i=1 };
155155

156156
S11 s113 { .i=1, {}};
157-
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: use designated init expression [modernize-use-designated-initializers]
157+
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: use designated init expression to initialize field 's10' [modernize-use-designated-initializers]
158158
// CHECK-FIXES: S11 s113 { .i=1, .s10={}};
159159

160160
S11 s114 { .i=1, .s10={1, .j=2}};
161-
// CHECK-MESSAGES: :[[@LINE-1]]:24: warning: use designated init expression [modernize-use-designated-initializers]
161+
// CHECK-MESSAGES: :[[@LINE-1]]:24: warning: use designated init expression to initialize field 'i' [modernize-use-designated-initializers]
162162
// CHECK-FIXES: S11 s114 { .i=1, .s10={.i=1, .j=2}};
163163

164164
struct S12 {
@@ -167,9 +167,9 @@ struct S12 {
167167
};
168168

169169
S12 s121 {1, 2};
170-
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
170+
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list to initialize 'S12' [modernize-use-designated-initializers]
171171
// CHECK-MESSAGES: :[[@LINE-7]]:1: note: this is the type to initialize
172-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
172+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list to initialize 'S12' [modernize-use-designated-initializers]
173173
// CHECK-MESSAGES-POD: :[[@LINE-9]]:1: note: this is the type to initialize
174174
// CHECK-FIXES: S12 s121 {.i=1, .j=2};
175175

@@ -182,22 +182,22 @@ struct S13 {
182182
};
183183

184184
S13 s131 {1, 2};
185-
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
185+
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: use designated initializer list to initialize 'S13' [modernize-use-designated-initializers]
186186
// CHECK-MESSAGES: :[[@LINE-10]]:1: note: this is the type to initialize
187-
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list [modernize-use-designated-initializers]
187+
// CHECK-MESSAGES-POD: :[[@LINE-3]]:10: warning: use designated initializer list to initialize 'S13' [modernize-use-designated-initializers]
188188
// CHECK-MESSAGES-POD: :[[@LINE-12]]:1: note: this is the type to initialize
189189
// CHECK-FIXES: S13 s131 {.k=1, .i=2};
190190

191191
#define A (3+2)
192192
#define B .j=1
193193

194194
S9 s92 {A, B};
195-
// CHECK-MESSAGES-MACROS: :[[@LINE-1]]:9: warning: use designated init expression [modernize-use-designated-initializers]
195+
// CHECK-MESSAGES-MACROS: :[[@LINE-1]]:9: warning: use designated init expression to initialize field 'i' [modernize-use-designated-initializers]
196196
// CHECK-MESSAGES-MACROS: :[[@LINE-5]]:11: note: expanded from macro 'A'
197197

198198
#define DECLARE_S93 S9 s93 {1, 2}
199199

200200
DECLARE_S93;
201-
// CHECK-MESSAGES-MACROS: :[[@LINE-1]]:1: warning: use designated initializer list [modernize-use-designated-initializers]
201+
// CHECK-MESSAGES-MACROS: :[[@LINE-1]]:1: warning: use designated initializer list to initialize 'S9' [modernize-use-designated-initializers]
202202
// CHECK-MESSAGES-MACROS: :[[@LINE-4]]:28: note: expanded from macro 'DECLARE_S93'
203203
// CHECK-MESSAGES-MACROS: :[[@LINE-71]]:1: note: this is the type to initialize

0 commit comments

Comments
 (0)