1// RUN: %check_clang_tidy %s readability-named-parameter %t
2// RUN: %check_clang_tidy -check-suffix=PLAIN-NAMES %s readability-named-parameter %t -- \
3// RUN: -config="{CheckOptions: [{key: readability-named-parameter.InsertPlainNamesInForwardDecls, value: true}]}"
4
5void Method(char *) { /* */ }
6// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: all parameters should be named in a function
7// CHECK-FIXES: void Method(char * /*unused*/) { /* */ }
8// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:19: warning: all parameters should be named in a function
9// CHECK-FIXES-PLAIN-NAMES: void Method(char * /*unused*/) { /* */ }
10void Method2(char *) {}
11// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
12// CHECK-FIXES: void Method2(char * /*unused*/) {}
13// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:20: warning: all parameters should be named in a function
14// CHECK-FIXES-PLAIN-NAMES: void Method2(char * /*unused*/) {}
15void Method3(char *, void *) {}
16// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
17// CHECK-FIXES: void Method3(char * /*unused*/, void * /*unused*/) {}
18// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:20: warning: all parameters should be named in a function
19// CHECK-FIXES-PLAIN-NAMES: void Method3(char * /*unused*/, void * /*unused*/) {}
20void Method4(char *, int /*unused*/) {}
21// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
22// CHECK-FIXES: void Method4(char * /*unused*/, int /*unused*/) {}
23// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:20: warning: all parameters should be named in a function
24// CHECK-FIXES-PLAIN-NAMES: void Method4(char * /*unused*/, int /*unused*/) {}
25void operator delete[](void *) throw() {}
26// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: all parameters should be named in a function
27// CHECK-FIXES: void operator delete[](void * /*unused*/) throw() {}
28// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:30: warning: all parameters should be named in a function
29// CHECK-FIXES-PLAIN-NAMES: void operator delete[](void * /*unused*/) throw() {}
30int Method5(int) { return 0; }
31// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: all parameters should be named in a function
32// CHECK-FIXES: int Method5(int /*unused*/) { return 0; }
33// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:16: warning: all parameters should be named in a function
34// CHECK-FIXES-PLAIN-NAMES: int Method5(int /*unused*/) { return 0; }
35void Method6(void (*)(void *)) {}
36// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: all parameters should be named in a function
37// CHECK-FIXES: void Method6(void (* /*unused*/)(void *)) {}
38// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:21: warning: all parameters should be named in a function
39// CHECK-FIXES-PLAIN-NAMES: void Method6(void (* /*unused*/)(void *)) {}
40template <typename T> void Method7(T) {}
41// CHECK-MESSAGES: :[[@LINE-1]]:37: warning: all parameters should be named in a function
42// CHECK-FIXES: template <typename T> void Method7(T /*unused*/) {}
43// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:37: warning: all parameters should be named in a function
44// CHECK-FIXES-PLAIN-NAMES: template <typename T> void Method7(T /*unused*/) {}
45
46// Don't warn in macros.
47#define M void MethodM(int) {}
48M
49
50void operator delete(void *x) throw() {}
51void Method7(char * /*x*/) {}
52void Method8(char *x) {}
53typedef void (*TypeM)(int x);
54void operator delete[](void *x) throw();
55void operator delete[](void * /*x*/) throw();
56
57struct X {
58 void operator++(int) {}
59 void operator--(int) {}
60
61 X(X&) = delete;
62 X &operator=(X&) = default;
63
64 const int &i;
65};
66
67void (*Func1)(void *);
68void Func2(void (*func)(void *)) {}
69template <void Func(void *)> void Func3() {}
70
71template <typename T>
72struct Y {
73 void foo(T) {}
74// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: all parameters should be named in a function
75// CHECK-FIXES: void foo(T /*unused*/) {}
76// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:13: warning: all parameters should be named in a function
77// CHECK-FIXES-PLAIN-NAMES: void foo(T /*unused*/) {}
78};
79
80Y<int> y;
81Y<float> z;
82
83struct Base {
84 virtual void foo(bool notThisOne);
85 virtual void foo(int argname);
86};
87
88struct Derived : public Base {
89 void foo(int);
90// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: all parameters should be named in a function
91// CHECK-FIXES: void foo(int /*argname*/);
92// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:15: warning: all parameters should be named in a function
93// CHECK-FIXES-PLAIN-NAMES: void foo(int argname);
94};
95
96void FDef(int);
97// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: all parameters should be named in a function
98// CHECK-FIXES: void FDef(int /*n*/);
99// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:14: warning: all parameters should be named in a function
100// CHECK-FIXES-PLAIN-NAMES: void FDef(int n);
101void FDef(int n) {}
102
103void FDef2(int, int);
104// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: all parameters should be named in a function
105// CHECK-FIXES: void FDef2(int /*n*/, int /*unused*/);
106// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:15: warning: all parameters should be named in a function
107// CHECK-FIXES-PLAIN-NAMES: void FDef2(int n, int /*unused*/);
108void FDef2(int n, int) {}
109// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: all parameters should be named in a function
110// CHECK-FIXES: void FDef2(int n, int /*unused*/) {}
111// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:22: warning: all parameters should be named in a function
112// CHECK-FIXES-PLAIN-NAMES: void FDef2(int n, int /*unused*/) {}
113
114void FNoDef(int);
115
116class Z {};
117Z the_z;
118
119Z &operator++(Z&) { return the_z; }
120// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
121// CHECK-FIXES: Z &operator++(Z& /*unused*/) { return the_z; }
122// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:17: warning: all parameters should be named in a function
123// CHECK-FIXES-PLAIN-NAMES: Z &operator++(Z& /*unused*/) { return the_z; }
124
125Z &operator++(Z&, int) { return the_z; }
126// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
127// CHECK-FIXES: Z &operator++(Z& /*unused*/, int) { return the_z; }
128// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:17: warning: all parameters should be named in a function
129// CHECK-FIXES-PLAIN-NAMES: Z &operator++(Z& /*unused*/, int) { return the_z; }
130
131Z &operator--(Z&) { return the_z; }
132// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
133// CHECK-FIXES: Z &operator--(Z& /*unused*/) { return the_z; }
134// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:17: warning: all parameters should be named in a function
135// CHECK-FIXES-PLAIN-NAMES: Z &operator--(Z& /*unused*/) { return the_z; }
136
137Z &operator--(Z&, int) { return the_z; }
138// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
139// CHECK-FIXES: Z &operator--(Z& /*unused*/, int) { return the_z; }
140// CHECK-MESSAGES-PLAIN-NAMES: :[[@LINE-3]]:17: warning: all parameters should be named in a function
141// CHECK-FIXES-PLAIN-NAMES: Z &operator--(Z& /*unused*/, int) { return the_z; }
142
143namespace testing {
144namespace internal {
145class IgnoredValue {
146 public:
147 template <typename T>
148 IgnoredValue(const T& /* ignored */) {}
149};
150}
151typedef internal::IgnoredValue Unused;
152}
153
154using ::testing::Unused;
155
156void MockFunction(Unused, int q, Unused) {
157 ++q;
158 ++q;
159 ++q;
160}
161
162namespace std {
163typedef decltype(nullptr) nullptr_t;
164}
165
166void f(std::nullptr_t) {}
167
168typedef void (F)(int);
169F f;
170void f(int x) {}
171
172namespace issue_63056
173{
174 struct S {
175 S(const S&);
176 S(S&&);
177
178 S& operator=(const S&);
179 S& operator=(S&&);
180 };
181
182 S::S(const S&) = default;
183 S::S(S&&) = default;
184
185 S& S::operator=(const S&) = default;
186 S& S::operator=(S&&) = default;
187} // namespace issue_63056
188

source code of clang-tools-extra/test/clang-tidy/checkers/readability/named-parameter.cpp