xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/readability/named-parameter.cpp (revision 92420f4aefbef49c3eccaf678bc23713a59e5eab)
189a1d03eSRichard // RUN: %check_clang_tidy %s readability-named-parameter %t
289a1d03eSRichard 
Method(char *)389a1d03eSRichard void Method(char *) { /* */ }
489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: all parameters should be named in a function
589a1d03eSRichard // CHECK-FIXES: void Method(char * /*unused*/) { /* */ }
Method2(char *)689a1d03eSRichard void Method2(char *) {}
789a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
889a1d03eSRichard // CHECK-FIXES: void Method2(char * /*unused*/) {}
Method3(char *,void *)989a1d03eSRichard void Method3(char *, void *) {}
1089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
1189a1d03eSRichard // CHECK-FIXES: void Method3(char * /*unused*/, void * /*unused*/) {}
Method4(char *,int)1289a1d03eSRichard void Method4(char *, int /*unused*/) {}
1389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
1489a1d03eSRichard // CHECK-FIXES: void Method4(char * /*unused*/, int /*unused*/) {}
operator delete[](void *)1589a1d03eSRichard void operator delete[](void *) throw() {}
1689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:30: warning: all parameters should be named in a function
1789a1d03eSRichard // CHECK-FIXES: void operator delete[](void * /*unused*/) throw() {}
Method5(int)1889a1d03eSRichard int Method5(int) { return 0; }
1989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: all parameters should be named in a function
2089a1d03eSRichard // CHECK-FIXES: int Method5(int /*unused*/) { return 0; }
Method6(void (*)(void *))2189a1d03eSRichard void Method6(void (*)(void *)) {}
2289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: all parameters should be named in a function
2389a1d03eSRichard // CHECK-FIXES: void Method6(void (* /*unused*/)(void *)) {}
Method7(T)2489a1d03eSRichard template <typename T> void Method7(T) {}
2589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: all parameters should be named in a function
2689a1d03eSRichard // CHECK-FIXES: template <typename T> void Method7(T /*unused*/) {}
2789a1d03eSRichard 
2889a1d03eSRichard // Don't warn in macros.
2989a1d03eSRichard #define M void MethodM(int) {}
3089a1d03eSRichard M
3189a1d03eSRichard 
operator delete(void * x)3289a1d03eSRichard void operator delete(void *x) throw() {}
Method7(char *)3389a1d03eSRichard void Method7(char * /*x*/) {}
Method8(char * x)3489a1d03eSRichard void Method8(char *x) {}
3589a1d03eSRichard typedef void (*TypeM)(int x);
3689a1d03eSRichard void operator delete[](void *x) throw();
3789a1d03eSRichard void operator delete[](void * /*x*/) throw();
3889a1d03eSRichard 
3989a1d03eSRichard struct X {
operator ++X4089a1d03eSRichard   X operator++(int) {}
operator --X4189a1d03eSRichard   X operator--(int) {}
4289a1d03eSRichard 
4389a1d03eSRichard   X(X&) = delete;
4489a1d03eSRichard   X &operator=(X&) = default;
4589a1d03eSRichard 
4689a1d03eSRichard   const int &i;
4789a1d03eSRichard };
4889a1d03eSRichard 
4989a1d03eSRichard void (*Func1)(void *);
Func2(void (* func)(void *))5089a1d03eSRichard void Func2(void (*func)(void *)) {}
Func3()5189a1d03eSRichard template <void Func(void *)> void Func3() {}
5289a1d03eSRichard 
5389a1d03eSRichard template <typename T>
5489a1d03eSRichard struct Y {
fooY5589a1d03eSRichard   void foo(T) {}
5689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: all parameters should be named in a function
5789a1d03eSRichard // CHECK-FIXES: void foo(T /*unused*/) {}
5889a1d03eSRichard };
5989a1d03eSRichard 
6089a1d03eSRichard Y<int> y;
6189a1d03eSRichard Y<float> z;
6289a1d03eSRichard 
6389a1d03eSRichard struct Base {
6489a1d03eSRichard   virtual void foo(bool notThisOne);
6589a1d03eSRichard   virtual void foo(int argname);
6689a1d03eSRichard };
6789a1d03eSRichard 
6889a1d03eSRichard struct Derived : public Base {
6989a1d03eSRichard   void foo(int);
7089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: all parameters should be named in a function
7189a1d03eSRichard // CHECK-FIXES: void foo(int /*argname*/);
7289a1d03eSRichard };
7389a1d03eSRichard 
7489a1d03eSRichard void FDef(int);
7589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: all parameters should be named in a function
7689a1d03eSRichard // CHECK-FIXES: void FDef(int /*n*/);
FDef(int n)7789a1d03eSRichard void FDef(int n) {}
7889a1d03eSRichard 
7989a1d03eSRichard void FDef2(int, int);
8089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: all parameters should be named in a function
8189a1d03eSRichard // CHECK-FIXES: void FDef2(int /*n*/, int /*unused*/);
FDef2(int n,int)8289a1d03eSRichard void FDef2(int n, int) {}
8389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: all parameters should be named in a function
8489a1d03eSRichard // CHECK-FIXES: void FDef2(int n, int /*unused*/) {}
8589a1d03eSRichard 
8689a1d03eSRichard void FNoDef(int);
8789a1d03eSRichard 
8889a1d03eSRichard class Z {};
8989a1d03eSRichard 
operator ++(Z &)9089a1d03eSRichard Z &operator++(Z&) {}
9189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
9289a1d03eSRichard // CHECK-FIXES: Z &operator++(Z& /*unused*/) {}
9389a1d03eSRichard 
operator ++(Z &,int)9489a1d03eSRichard Z &operator++(Z&, int) {}
9589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
9689a1d03eSRichard // CHECK-FIXES: Z &operator++(Z& /*unused*/, int) {}
9789a1d03eSRichard 
operator --(Z &)9889a1d03eSRichard Z &operator--(Z&) {}
9989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
10089a1d03eSRichard // CHECK-FIXES: Z &operator--(Z& /*unused*/) {}
10189a1d03eSRichard 
operator --(Z &,int)10289a1d03eSRichard Z &operator--(Z&, int) {}
10389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
10489a1d03eSRichard // CHECK-FIXES: Z &operator--(Z& /*unused*/, int) {}
10589a1d03eSRichard 
10689a1d03eSRichard namespace testing {
10789a1d03eSRichard namespace internal {
10889a1d03eSRichard class IgnoredValue {
10989a1d03eSRichard  public:
11089a1d03eSRichard   template <typename T>
IgnoredValue(const T &)11189a1d03eSRichard   IgnoredValue(const T& /* ignored */) {}
11289a1d03eSRichard };
11389a1d03eSRichard }
11489a1d03eSRichard typedef internal::IgnoredValue Unused;
11589a1d03eSRichard }
11689a1d03eSRichard 
11789a1d03eSRichard using ::testing::Unused;
11889a1d03eSRichard 
MockFunction(Unused,int q,Unused)11989a1d03eSRichard void MockFunction(Unused, int q, Unused) {
12089a1d03eSRichard   ++q;
12189a1d03eSRichard   ++q;
12289a1d03eSRichard   ++q;
12389a1d03eSRichard }
12489a1d03eSRichard 
12589a1d03eSRichard namespace std {
12689a1d03eSRichard typedef decltype(nullptr) nullptr_t;
12789a1d03eSRichard }
12889a1d03eSRichard 
f(std::nullptr_t)12989a1d03eSRichard void f(std::nullptr_t) {}
13089a1d03eSRichard 
13189a1d03eSRichard typedef void (F)(int);
13289a1d03eSRichard F f;
f(int x)13389a1d03eSRichard void f(int x) {}
134*92420f4aSAMS21 
135*92420f4aSAMS21 namespace issue_63056
136*92420f4aSAMS21 {
137*92420f4aSAMS21   struct S {
138*92420f4aSAMS21     S(const S&);
139*92420f4aSAMS21     S(S&&);
140*92420f4aSAMS21 
141*92420f4aSAMS21     S& operator=(const S&);
142*92420f4aSAMS21     S& operator=(S&&);
143*92420f4aSAMS21   };
144*92420f4aSAMS21 
145*92420f4aSAMS21   S::S(const S&) = default;
146*92420f4aSAMS21   S::S(S&&) = default;
147*92420f4aSAMS21 
148*92420f4aSAMS21   S& S::operator=(const S&) = default;
149*92420f4aSAMS21   S& S::operator=(S&&) = default;
150*92420f4aSAMS21 } // namespace issue_63056
151