Skip to content

Commit ec32830

Browse files
committed
~
1 parent 4674ddc commit ec32830

File tree

2 files changed

+54
-41
lines changed

2 files changed

+54
-41
lines changed

clang-tools-extra/clang-tidy/readability/UseStdMinMaxCheck.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ void UseStdMinMaxCheck::check(const MatchFinder::MatchResult &Result) {
183183
}
184184
};
185185

186+
// Captures:
187+
// if (cond) // Comment A
188+
// if (cond) /* Comment A */ { ... }
189+
// if (cond) /* Comment A */ x = y;
186190
AppendNormalized(Lexer::getSourceText(
187191
CharSourceRange::getCharRange(
188192
Lexer::getLocForEndOfToken(If->getRParenLoc(), 0, Source, LO),
@@ -191,18 +195,27 @@ void UseStdMinMaxCheck::check(const MatchFinder::MatchResult &Result) {
191195

192196
if (const auto *CS = dyn_cast<CompoundStmt>(If->getThen())) {
193197
const Stmt *Inner = CS->body_front();
198+
199+
// Captures:
200+
// if (cond) { // Comment B ... }
201+
// if (cond) { /* Comment B */ x = y; }
194202
AppendNormalized(Lexer::getSourceText(
195203
CharSourceRange::getCharRange(
196204
Lexer::getLocForEndOfToken(CS->getBeginLoc(), 0, Source, LO),
197205
Inner->getBeginLoc()),
198206
Source, LO));
199207

208+
// Captures:
209+
// if (cond) { x = y; // Comment C }
210+
// if (cond) { x = y; /* Comment C */ }
200211
llvm::StringRef PostInner = Lexer::getSourceText(
201212
CharSourceRange::getCharRange(
202213
Lexer::getLocForEndOfToken(Inner->getEndLoc(), 0, Source, LO),
203214
CS->getEndLoc()),
204215
Source, LO);
205216

217+
// Strip the trailing semicolon to avoid fixes like:
218+
// x = std::min(x, y);; // comment
206219
const size_t Semi = PostInner.find(';');
207220
if (Semi != llvm::StringRef::npos &&
208221
PostInner.take_front(Semi).trim().empty()) {

clang-tools-extra/test/clang-tidy/checkers/readability/use-std-min-max.cpp

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ constexpr int myConstexprMax(int a, int b) {
1212
#define MY_IF_MACRO(condition, statement) \
1313
if (condition) { \
1414
statement \
15-
}
15+
}
1616

1717
class MyClass {
1818
public:
@@ -28,22 +28,22 @@ void foo(T value7) {
2828
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `<` [readability-use-std-min-max]
2929
// CHECK-FIXES: value1 = std::max(value1, value2);
3030
if (value1 < value2)
31-
value1 = value2;
31+
value1 = value2;
3232

3333
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `<` [readability-use-std-min-max]
3434
// CHECK-FIXES: value2 = std::min(value1, value2);
3535
if (value1 < value2)
36-
value2 = value1;
36+
value2 = value1;
3737

3838
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `>` [readability-use-std-min-max]
3939
// CHECK-FIXES: value2 = std::min(value2, value1);
4040
if (value2 > value1)
41-
value2 = value1;
41+
value2 = value1;
4242

4343
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `>` [readability-use-std-min-max]
4444
// CHECK-FIXES: value1 = std::max(value2, value1);
4545
if (value2 > value1)
46-
value1 = value2;
46+
value1 = value2;
4747

4848
// No suggestion needed here
4949
if (value1 == value2)
@@ -53,121 +53,121 @@ void foo(T value7) {
5353
// CHECK-FIXES: value1 = std::max<int>(value1, value4);
5454
short value4;
5555
if(value1<value4)
56-
value1=value4;
57-
56+
value1=value4;
57+
5858
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `<` [readability-use-std-min-max]
5959
// CHECK-FIXES: value3 = std::min(value1+value2, value3);
6060
if(value1+value2<value3)
61-
value3 = value1+value2;
62-
61+
value3 = value1+value2;
62+
6363
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `<` [readability-use-std-min-max]
6464
// CHECK-FIXES: value1 = std::max(value1, myConstexprMin(value2, value3));
6565
if (value1 < myConstexprMin(value2, value3))
66-
value1 = myConstexprMin(value2, value3);
67-
66+
value1 = myConstexprMin(value2, value3);
67+
6868
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `>` [readability-use-std-min-max]
6969
// CHECK-FIXES: value1 = std::min(value1, myConstexprMax(value2, value3));
7070
if (value1 > myConstexprMax(value2, value3))
71-
value1 = myConstexprMax(value2, value3);
72-
71+
value1 = myConstexprMax(value2, value3);
72+
7373
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `<=` [readability-use-std-min-max]
7474
// CHECK-FIXES: value2 = std::min(value1, value2);
7575
if (value1 <= value2)
76-
value2 = value1;
76+
value2 = value1;
7777

7878
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `<=` [readability-use-std-min-max]
7979
// CHECK-FIXES: value1 = std::max(value1, value2);
8080
if (value1 <= value2)
81-
value1 = value2;
81+
value1 = value2;
8282

8383
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `>=` [readability-use-std-min-max]
8484
// CHECK-FIXES: value1 = std::max(value2, value1);
8585
if (value2 >= value1)
86-
value1 = value2;
86+
value1 = value2;
8787

8888
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `>=` [readability-use-std-min-max]
8989
// CHECK-FIXES: value2 = std::min(value2, value1);
9090
if (value2 >= value1)
91-
value2 = value1;
92-
91+
value2 = value1;
92+
9393
// CHECK-MESSAGES: :[[@LINE+3]]:3: warning: use `std::max` instead of `<` [readability-use-std-min-max]
9494
// CHECK-FIXES: obj.member1 = std::max(obj.member1, obj.member2);
9595
MyClass obj;
9696
if (obj.member1 < obj.member2)
97-
obj.member1 = obj.member2;
97+
obj.member1 = obj.member2;
9898

9999
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `<` [readability-use-std-min-max]
100100
// CHECK-FIXES: obj.member2 = std::min(obj.member1, obj.member2);
101101
if (obj.member1 < obj.member2)
102-
obj.member2 = obj.member1;
102+
obj.member2 = obj.member1;
103103

104104
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `>` [readability-use-std-min-max]
105105
// CHECK-FIXES: obj.member2 = std::min(obj.member2, obj.member1);
106106
if (obj.member2 > obj.member1)
107-
obj.member2 = obj.member1;
107+
obj.member2 = obj.member1;
108108

109109
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `>` [readability-use-std-min-max]
110110
// CHECK-FIXES: obj.member1 = std::max(obj.member2, obj.member1);
111111
if (obj.member2 > obj.member1)
112-
obj.member1 = obj.member2;
113-
112+
obj.member1 = obj.member2;
113+
114114
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `<` [readability-use-std-min-max]
115115
// CHECK-FIXES: obj.member1 = std::max<int>(obj.member1, value4);
116116
if (obj.member1 < value4)
117-
obj.member1 = value4;
118-
117+
obj.member1 = value4;
118+
119119
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `<` [readability-use-std-min-max]
120120
// CHECK-FIXES: value3 = std::min(obj.member1 + value2, value3);
121121
if (obj.member1 + value2 < value3)
122-
value3 = obj.member1 + value2;
123-
122+
value3 = obj.member1 + value2;
123+
124124
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `<=` [readability-use-std-min-max]
125125
// CHECK-FIXES: obj.member2 = std::min(value1, obj.member2);
126126
if (value1 <= obj.member2)
127-
obj.member2 = value1;
127+
obj.member2 = value1;
128128

129129
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `<=` [readability-use-std-min-max]
130130
// CHECK-FIXES: value1 = std::max(value1, obj.member2);
131131
if (value1 <= obj.member2)
132-
value1 = obj.member2;
132+
value1 = obj.member2;
133133

134134
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `>=` [readability-use-std-min-max]
135135
// CHECK-FIXES: value1 = std::max(obj.member2, value1);
136136
if (obj.member2 >= value1)
137-
value1 = obj.member2;
137+
value1 = obj.member2;
138138

139139
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::min` instead of `>=` [readability-use-std-min-max]
140140
// CHECK-FIXES: obj.member2 = std::min(obj.member2, value1);
141141
if (obj.member2 >= value1)
142-
obj.member2 = value1;
143-
142+
obj.member2 = value1;
143+
144144
// No suggestion needed here
145145
if (MY_MACRO_MIN(value1, value2) < value3)
146-
value3 = MY_MACRO_MIN(value1, value2);
147-
146+
value3 = MY_MACRO_MIN(value1, value2);
147+
148148
// CHECK-MESSAGES: :[[@LINE+2]]:3: warning: use `std::max` instead of `<` [readability-use-std-min-max]
149149
// CHECK-FIXES: value4 = std::max<int>(value4, value2);
150150
if (value4 < value2){
151-
value4 = value2;
151+
value4 = value2;
152152
}
153153

154154
// No suggestion needed here
155155
if(value1 < value2)
156156
value2 = value1;
157157
else
158158
value2 = value3;
159-
159+
160160
// No suggestion needed here
161161
if(value1<value2){
162-
value2 = value1;
162+
value2 = value1;
163163
}
164164
else{
165-
value2 = value3;
165+
value2 = value3;
166166
}
167167

168168
// No suggestion needed here
169169
if(value1<value2){
170-
value2 = value1;
170+
value2 = value1;
171171
int res = value1 + value2;
172172
}
173173

@@ -202,7 +202,7 @@ void foo(T value7) {
202202
value2 = value3;
203203
}
204204
}
205-
205+
206206
// CHECK-MESSAGES: :[[@LINE+4]]:3: warning: use `std::min` instead of `<` [readability-use-std-min-max]
207207
// CHECK-FIXES: value6 = std::min<unsigned int>(value5, value6);
208208
unsigned int value5;
@@ -221,7 +221,7 @@ void foo(T value7) {
221221
const int value8 = 5;
222222
if(value8<value1)
223223
value1 = value8;
224-
224+
225225
//CHECK-MESSAGES: :[[@LINE+3]]:3: warning: use `std::min` instead of `<` [readability-use-std-min-max]
226226
//CHECK-FIXES: value1 = std::min(value9, value1);
227227
volatile int value9 = 6;

0 commit comments

Comments
 (0)