blob: 9876f97a1a52a6b756a7cb8103d9eccb41c9d376 [file] [log] [blame]
Alexander Kornienko106c8e02014-10-26 02:58:07 +00001// RUN: $(dirname %s)/check_clang_tidy.sh %s google-readability-function %t
Benjamin Kramer14d42d92014-07-15 16:47:09 +00002// REQUIRES: shell
3
4void Method(char *) { /* */ }
5// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: all parameters should be named in a function
6// CHECK-FIXES: void Method(char * /*unused*/) { /* */ }
Benjamin Kramer610ba532014-08-04 09:33:58 +00007void Method2(char *) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +00008// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
Benjamin Kramer610ba532014-08-04 09:33:58 +00009// CHECK-FIXES: void Method2(char * /*unused*/) {}
10void Method3(char *, void *) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000011// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
Benjamin Kramer610ba532014-08-04 09:33:58 +000012// CHECK-FIXES: void Method3(char * /*unused*/, void * /*unused*/) {}
13void Method4(char *, int /*unused*/) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000014// CHECK-MESSAGES: :[[@LINE-1]]:20: warning: all parameters should be named in a function
Benjamin Kramer610ba532014-08-04 09:33:58 +000015// CHECK-FIXES: void Method4(char * /*unused*/, int /*unused*/) {}
16void operator delete[](void *) throw() {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000017// CHECK-MESSAGES: :[[@LINE-1]]:30: warning: all parameters should be named in a function
Benjamin Kramer610ba532014-08-04 09:33:58 +000018// CHECK-FIXES: void operator delete[](void * /*unused*/) throw() {}
19int Method5(int) { return 0; }
Benjamin Kramer14d42d92014-07-15 16:47:09 +000020// CHECK-MESSAGES: :[[@LINE-1]]:16: warning: all parameters should be named in a function
Benjamin Kramer610ba532014-08-04 09:33:58 +000021// CHECK-FIXES: int Method5(int /*unused*/) { return 0; }
Benjamin Kramer14d42d92014-07-15 16:47:09 +000022void Method6(void (*)(void *)) {}
23// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: all parameters should be named in a function
24// CHECK-FIXES: void Method6(void (* /*unused*/)(void *)) {}
Benjamin Kramer610ba532014-08-04 09:33:58 +000025template <typename T> void Method7(T) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000026// CHECK-MESSAGES: :[[@LINE-1]]:37: warning: all parameters should be named in a function
Benjamin Kramer610ba532014-08-04 09:33:58 +000027// CHECK-FIXES: template <typename T> void Method7(T /*unused*/) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000028
29// Don't warn in macros.
Benjamin Kramer610ba532014-08-04 09:33:58 +000030#define M void MethodM(int) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000031M
32
Benjamin Kramer610ba532014-08-04 09:33:58 +000033void operator delete(void *x) throw() {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000034void Method7(char * /*x*/) {}
Benjamin Kramer610ba532014-08-04 09:33:58 +000035void Method8(char *x) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000036typedef void (*TypeM)(int x);
37void operator delete[](void *x) throw();
38void operator delete[](void * /*x*/) throw();
39
40struct X {
Benjamin Kramer610ba532014-08-04 09:33:58 +000041 X operator++(int) {}
Benjamin Kramerfec67052014-09-01 09:11:48 +000042 X operator--(int) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000043
Benjamin Kramere59cd6e2014-08-29 08:58:35 +000044 X(X&) = delete;
45 X &operator=(X&) = default;
46
Benjamin Kramer14d42d92014-07-15 16:47:09 +000047 const int &i;
48};
49
50void (*Func1)(void *);
51void Func2(void (*func)(void *)) {}
Benjamin Kramer610ba532014-08-04 09:33:58 +000052template <void Func(void *)> void Func3() {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000053
54template <typename T>
55struct Y {
Benjamin Kramer610ba532014-08-04 09:33:58 +000056 void foo(T) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000057// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: all parameters should be named in a function
Benjamin Kramer610ba532014-08-04 09:33:58 +000058// CHECK-FIXES: void foo(T /*unused*/) {}
Benjamin Kramer14d42d92014-07-15 16:47:09 +000059};
60
61Y<int> y;
62Y<float> z;
63
64struct Base {
65 virtual void foo(bool notThisOne);
66 virtual void foo(int argname);
67};
68
69struct Derived : public Base {
70 void foo(int);
71// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: all parameters should be named in a function
72// CHECK-FIXES: void foo(int /*argname*/);
73};
Benjamin Kramer610ba532014-08-04 09:33:58 +000074
75void FDef(int);
76// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: all parameters should be named in a function
77// CHECK-FIXES: void FDef(int /*n*/);
Benjamin Kramer78cd5462014-08-04 09:42:18 +000078void FDef(int n) {}
79
80void FDef2(int, int);
81// CHECK-MESSAGES: :[[@LINE-1]]:15: warning: all parameters should be named in a function
82// CHECK-FIXES: void FDef2(int /*n*/, int /*unused*/);
83void FDef2(int n, int) {}
84// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: all parameters should be named in a function
85// CHECK-FIXES: void FDef2(int n, int /*unused*/) {}
Benjamin Kramer610ba532014-08-04 09:33:58 +000086
87void FNoDef(int);
Benjamin Kramerfec67052014-09-01 09:11:48 +000088
89class Z {};
90
91Z &operator++(Z&) {}
92// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
93// CHECK-FIXES: Z &operator++(Z& /*unused*/) {}
94
95Z &operator++(Z&, int) {}
96// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
97// CHECK-FIXES: Z &operator++(Z& /*unused*/, int) {}
98
99Z &operator--(Z&) {}
100// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
101// CHECK-FIXES: Z &operator--(Z& /*unused*/) {}
102
103Z &operator--(Z&, int) {}
104// CHECK-MESSAGES: :[[@LINE-1]]:17: warning: all parameters should be named in a function
105// CHECK-FIXES: Z &operator--(Z& /*unused*/, int) {}
Alexander Kornienkof5a57c92014-09-25 08:16:24 +0000106
107namespace testing {
108namespace internal {
109class IgnoredValue {
110 public:
111 template <typename T>
112 IgnoredValue(const T& /* ignored */) {}
113};
114}
115typedef internal::IgnoredValue Unused;
116}
117
118using ::testing::Unused;
119
120void MockFunction(Unused, int q, Unused) {
121 ++q;
122 ++q;
123 ++q;
124}
Alexander Kornienkoe20ce072014-11-05 11:08:39 +0000125
126namespace std {
127typedef decltype(nullptr) nullptr_t;
128}
129
130void f(std::nullptr_t) {}