1 | // RUN: %check_clang_tidy %s bugprone-argument-comment %t -- \ |
2 | // RUN: -config="{CheckOptions: { \ |
3 | // RUN: bugprone-argument-comment.CommentBoolLiterals: true, \ |
4 | // RUN: bugprone-argument-comment.CommentIntegerLiterals: true, \ |
5 | // RUN: bugprone-argument-comment.CommentFloatLiterals: true, \ |
6 | // RUN: bugprone-argument-comment.CommentUserDefinedLiterals: true, \ |
7 | // RUN: bugprone-argument-comment.CommentStringLiterals: true, \ |
8 | // RUN: bugprone-argument-comment.CommentNullPtrs: true, \ |
9 | // RUN: bugprone-argument-comment.CommentCharacterLiterals: true}}" -- |
10 | |
11 | struct A { |
12 | void foo(bool abc); |
13 | void foo(bool abc, bool cde); |
14 | void foo(const char *, bool abc); |
15 | void foo(int iabc); |
16 | void foo(float fabc); |
17 | void foo(double dabc); |
18 | void foo(const char *strabc); |
19 | void fooW(const wchar_t *wstrabc); |
20 | void fooPtr(A *ptrabc); |
21 | void foo(char chabc); |
22 | }; |
23 | |
24 | #define FOO 1 |
25 | #define X(x) (x) |
26 | |
27 | void g(int a); |
28 | void h(double b); |
29 | void i(const char *c); |
30 | void j(int a, int b, int c); |
31 | |
32 | double operator"" _km(long double value); |
33 | |
34 | void test() { |
35 | A a; |
36 | |
37 | a.foo(abc: true); |
38 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment] |
39 | // CHECK-FIXES: a.foo(/*abc=*/true); |
40 | |
41 | a.foo(abc: false); |
42 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment] |
43 | // CHECK-FIXES: a.foo(/*abc=*/false); |
44 | |
45 | a.foo(abc: true, cde: false); |
46 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment] |
47 | // CHECK-MESSAGES: [[@LINE-2]]:15: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment] |
48 | // CHECK-FIXES: a.foo(/*abc=*/true, /*cde=*/false); |
49 | |
50 | a.foo(abc: false, cde: true); |
51 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment] |
52 | // CHECK-MESSAGES: [[@LINE-2]]:16: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment] |
53 | // CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true); |
54 | |
55 | a.foo(/*abc=*/false, cde: true); |
56 | // CHECK-MESSAGES: [[@LINE-1]]:24: warning: argument comment missing for literal argument 'cde' [bugprone-argument-comment] |
57 | // CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true); |
58 | |
59 | a.foo(abc: false, /*cde=*/true); |
60 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment] |
61 | // CHECK-FIXES: a.foo(/*abc=*/false, /*cde=*/true); |
62 | |
63 | bool val1 = true; |
64 | bool val2 = false; |
65 | a.foo(abc: val1, cde: val2); |
66 | |
67 | a.foo("" , abc: true); |
68 | // CHECK-MESSAGES: [[@LINE-1]]:13: warning: argument comment missing for literal argument 'abc' [bugprone-argument-comment] |
69 | // CHECK-FIXES: a.foo("", /*abc=*/true); |
70 | |
71 | a.foo(iabc: 0); |
72 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'iabc' [bugprone-argument-comment] |
73 | // CHECK-FIXES: a.foo(/*iabc=*/0); |
74 | |
75 | a.foo(fabc: 1.0f); |
76 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'fabc' [bugprone-argument-comment] |
77 | // CHECK-FIXES: a.foo(/*fabc=*/1.0f); |
78 | |
79 | a.foo(fabc: -1.0f); |
80 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'fabc' [bugprone-argument-comment] |
81 | // CHECK-FIXES: a.foo(/*fabc=*/-1.0f); |
82 | |
83 | a.foo(dabc: 1.0); |
84 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment] |
85 | // CHECK-FIXES: a.foo(/*dabc=*/1.0); |
86 | |
87 | a.foo(dabc: -1.0); |
88 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment] |
89 | // CHECK-FIXES: a.foo(/*dabc=*/-1.0); |
90 | |
91 | int val3 = 10; |
92 | a.foo(iabc: val3); |
93 | a.foo(iabc: -val3); |
94 | |
95 | float val4 = 10.0; |
96 | a.foo(fabc: val4); |
97 | a.foo(fabc: -val4); |
98 | |
99 | double val5 = 10.0; |
100 | a.foo(dabc: val5); |
101 | a.foo(dabc: -val5); |
102 | |
103 | a.foo(strabc: "Hello World" ); |
104 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'strabc' [bugprone-argument-comment] |
105 | // CHECK-FIXES: a.foo(/*strabc=*/"Hello World"); |
106 | // |
107 | a.fooW(wstrabc: L"Hello World" ); |
108 | // CHECK-MESSAGES: [[@LINE-1]]:10: warning: argument comment missing for literal argument 'wstrabc' [bugprone-argument-comment] |
109 | // CHECK-FIXES: a.fooW(/*wstrabc=*/L"Hello World"); |
110 | |
111 | a.fooPtr(ptrabc: nullptr); |
112 | // CHECK-MESSAGES: [[@LINE-1]]:12: warning: argument comment missing for literal argument 'ptrabc' [bugprone-argument-comment] |
113 | // CHECK-FIXES: a.fooPtr(/*ptrabc=*/nullptr); |
114 | |
115 | a.foo(dabc: 402.0_km); |
116 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment] |
117 | // CHECK-FIXES: a.foo(/*dabc=*/402.0_km); |
118 | |
119 | a.foo(dabc: -402.0_km); |
120 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'dabc' [bugprone-argument-comment] |
121 | // CHECK-FIXES: a.foo(/*dabc=*/-402.0_km); |
122 | |
123 | a.foo(chabc: 'A'); |
124 | // CHECK-MESSAGES: [[@LINE-1]]:9: warning: argument comment missing for literal argument 'chabc' [bugprone-argument-comment] |
125 | // CHECK-FIXES: a.foo(/*chabc=*/'A'); |
126 | |
127 | g(FOO); |
128 | g(a: -FOO); |
129 | h(b: 1.0f); |
130 | // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] |
131 | // CHECK-FIXES: h(/*b=*/1.0f); |
132 | h(b: -1.0f); |
133 | // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] |
134 | // CHECK-FIXES: h(/*b=*/-1.0f); |
135 | i(__FILE__); |
136 | |
137 | j(a: 1, X(1), X(1)); |
138 | // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment] |
139 | // CHECK-FIXES: j(/*a=*/1, X(1), X(1)); |
140 | j(/*a=*/1, X(1), X(1)); |
141 | |
142 | j(X(1), b: 1, X(1)); |
143 | // CHECK-MESSAGES: [[@LINE-1]]:11: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] |
144 | // CHECK-FIXES: j(X(1), /*b=*/1, X(1)); |
145 | j(X(1), /*b=*/1, X(1)); |
146 | |
147 | j(X(1), X(1), c: 1); |
148 | // CHECK-MESSAGES: [[@LINE-1]]:17: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment] |
149 | // CHECK-FIXES: j(X(1), X(1), /*c=*/1); |
150 | j(X(1), X(1), /*c=*/1); |
151 | |
152 | j(X(1), b: 1, c: 1); |
153 | // CHECK-MESSAGES: [[@LINE-1]]:11: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] |
154 | // CHECK-MESSAGES: [[@LINE-2]]:14: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment] |
155 | // CHECK-FIXES: j(X(1), /*b=*/1, /*c=*/1); |
156 | j(X(1), /*b=*/1, /*c=*/1); |
157 | |
158 | j(a: 1, X(1), c: 1); |
159 | // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment] |
160 | // CHECK-MESSAGES: [[@LINE-2]]:14: warning: argument comment missing for literal argument 'c' [bugprone-argument-comment] |
161 | // CHECK-FIXES: j(/*a=*/1, X(1), /*c=*/1); |
162 | j(/*a=*/1, X(1), /*c=*/1); |
163 | |
164 | j(a: 1, b: 1, X(1)); |
165 | // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument 'a' [bugprone-argument-comment] |
166 | // CHECK-MESSAGES: [[@LINE-2]]:8: warning: argument comment missing for literal argument 'b' [bugprone-argument-comment] |
167 | // CHECK-FIXES: j(/*a=*/1, /*b=*/1, X(1)); |
168 | j(/*a=*/1, /*b=*/1, X(1)); |
169 | |
170 | // FIXME Would like the below to add argument comments. |
171 | g(a: (1)); |
172 | // FIXME But we should not add argument comments here. |
173 | g(a: _Generic(0, int : 0)); |
174 | |
175 | 402.0_km; |
176 | } |
177 | |
178 | void f(bool _with_underscores_); |
179 | void ignores_underscores() { |
180 | f(with_underscores_: false); |
181 | // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument '_with_underscores_' [bugprone-argument-comment] |
182 | // CHECK-FIXES: f(/*_with_underscores_=*/false); |
183 | |
184 | f(with_underscores_: true); |
185 | // CHECK-MESSAGES: [[@LINE-1]]:5: warning: argument comment missing for literal argument |
186 | // CHECK-FIXES: f(/*_with_underscores_=*/true); |
187 | } |
188 | |