Skip to content

Commit ad5ea9c

Browse files
committed
Rename 'impossible_double_const_comparisons' -> 'impossible_comparisons' and 'ineffective_double_const_comparisons' -> 'redundant_comparisons', after discussion on Zulip
1 parent 0f6a0e4 commit ad5ea9c

File tree

8 files changed

+54
-54
lines changed

8 files changed

+54
-54
lines changed

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4701,14 +4701,13 @@ Released 2018-09-13
47014701
[`implicit_return`]: https://rust-lang.github.io/rust-clippy/master/index.html#implicit_return
47024702
[`implicit_saturating_add`]: https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_add
47034703
[`implicit_saturating_sub`]: https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub
4704-
[`impossible_double_const_comparisons`]: https://rust-lang.github.io/rust-clippy/master/index.html#impossible_double_const_comparisons
4704+
[`impossible_comparisons`]: https://rust-lang.github.io/rust-clippy/master/index.html#impossible_comparisons
47054705
[`imprecise_flops`]: https://rust-lang.github.io/rust-clippy/master/index.html#imprecise_flops
47064706
[`inconsistent_digit_grouping`]: https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_digit_grouping
47074707
[`inconsistent_struct_constructor`]: https://rust-lang.github.io/rust-clippy/master/index.html#inconsistent_struct_constructor
47084708
[`index_refutable_slice`]: https://rust-lang.github.io/rust-clippy/master/index.html#index_refutable_slice
47094709
[`indexing_slicing`]: https://rust-lang.github.io/rust-clippy/master/index.html#indexing_slicing
47104710
[`ineffective_bit_mask`]: https://rust-lang.github.io/rust-clippy/master/index.html#ineffective_bit_mask
4711-
[`ineffective_double_const_comparisons`]: https://rust-lang.github.io/rust-clippy/master/index.html#ineffective_double_const_comparisons
47124711
[`inefficient_to_string`]: https://rust-lang.github.io/rust-clippy/master/index.html#inefficient_to_string
47134712
[`infallible_destructuring_match`]: https://rust-lang.github.io/rust-clippy/master/index.html#infallible_destructuring_match
47144713
[`infinite_iter`]: https://rust-lang.github.io/rust-clippy/master/index.html#infinite_iter
@@ -4974,6 +4973,7 @@ Released 2018-09-13
49744973
[`redundant_closure`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure
49754974
[`redundant_closure_call`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure_call
49764975
[`redundant_closure_for_method_calls`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_closure_for_method_calls
4976+
[`redundant_comparisons`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_comparisons
49774977
[`redundant_else`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_else
49784978
[`redundant_feature_names`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_feature_names
49794979
[`redundant_field_names`]: https://rust-lang.github.io/rust-clippy/master/index.html#redundant_field_names

clippy_lints/src/declared_lints.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,16 +489,16 @@ pub(crate) static LINTS: &[&crate::LintInfo] = &[
489489
crate::operators::FLOAT_CMP_CONST_INFO,
490490
crate::operators::FLOAT_EQUALITY_WITHOUT_ABS_INFO,
491491
crate::operators::IDENTITY_OP_INFO,
492-
crate::operators::IMPOSSIBLE_DOUBLE_CONST_COMPARISONS_INFO,
492+
crate::operators::IMPOSSIBLE_COMPARISONS_INFO,
493493
crate::operators::INEFFECTIVE_BIT_MASK_INFO,
494-
crate::operators::INEFFECTIVE_DOUBLE_CONST_COMPARISONS_INFO,
495494
crate::operators::INTEGER_DIVISION_INFO,
496495
crate::operators::MISREFACTORED_ASSIGN_OP_INFO,
497496
crate::operators::MODULO_ARITHMETIC_INFO,
498497
crate::operators::MODULO_ONE_INFO,
499498
crate::operators::NEEDLESS_BITWISE_BOOL_INFO,
500499
crate::operators::OP_REF_INFO,
501500
crate::operators::PTR_EQ_INFO,
501+
crate::operators::REDUNDANT_COMPARISONS_INFO,
502502
crate::operators::SELF_ASSIGNMENT_INFO,
503503
crate::operators::VERBOSE_BIT_MASK_INFO,
504504
crate::option_env_unwrap::OPTION_ENV_UNWRAP_INFO,

clippy_lints/src/operators/double_const_comparison.rs renamed to clippy_lints/src/operators/const_comparisons.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ use clippy_utils::diagnostics::span_lint_and_note;
1414
use clippy_utils::source::snippet;
1515
use clippy_utils::SpanlessEq;
1616

17-
use super::IMPOSSIBLE_DOUBLE_CONST_COMPARISONS;
18-
use super::INEFFECTIVE_DOUBLE_CONST_COMPARISONS;
17+
use super::IMPOSSIBLE_COMPARISONS;
18+
use super::REDUNDANT_COMPARISONS;
1919

2020
// Extract a comparison between a const and non-const
2121
// Flip yoda conditionals, turnings expressions like `42 < x` into `x > 42`
@@ -91,7 +91,7 @@ pub(super) fn check<'tcx>(
9191
if left_side_is_useless(left_cmp_op, ordering) {
9292
span_lint_and_note(
9393
cx,
94-
INEFFECTIVE_DOUBLE_CONST_COMPARISONS,
94+
REDUNDANT_COMPARISONS,
9595
span,
9696
"left-hand side of `&&` operator has no effect",
9797
Some(left_cond.span.until(right_cond.span)),
@@ -100,7 +100,7 @@ pub(super) fn check<'tcx>(
100100
} else {
101101
span_lint_and_note(
102102
cx,
103-
INEFFECTIVE_DOUBLE_CONST_COMPARISONS,
103+
REDUNDANT_COMPARISONS,
104104
span,
105105
"right-hand side of `&&` operator has no effect",
106106
Some(and_op.span.to(right_cond.span)),
@@ -121,7 +121,7 @@ pub(super) fn check<'tcx>(
121121
};
122122
span_lint_and_note(
123123
cx,
124-
IMPOSSIBLE_DOUBLE_CONST_COMPARISONS,
124+
IMPOSSIBLE_COMPARISONS,
125125
span,
126126
"boolean expression will never evaluate to 'true'",
127127
None,

clippy_lints/src/operators/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ mod assign_op_pattern;
33
mod bit_mask;
44
mod cmp_nan;
55
mod cmp_owned;
6+
mod const_comparisons;
67
mod double_comparison;
7-
mod double_const_comparison;
88
mod duration_subsec;
99
mod eq_op;
1010
mod erasing_op;
@@ -314,7 +314,7 @@ declare_clippy_lint! {
314314
/// if status_code <= 400 && status_code > 500 {}
315315
/// ```
316316
#[clippy::version = "1.71.0"]
317-
pub IMPOSSIBLE_DOUBLE_CONST_COMPARISONS,
317+
pub IMPOSSIBLE_COMPARISONS,
318318
correctness,
319319
"double comparisons that will never evaluate to `true`"
320320
}
@@ -334,7 +334,7 @@ declare_clippy_lint! {
334334
/// if status_code <= 400 && status_code < 500 {}
335335
/// ```
336336
#[clippy::version = "1.71.0"]
337-
pub INEFFECTIVE_DOUBLE_CONST_COMPARISONS,
337+
pub REDUNDANT_COMPARISONS,
338338
correctness,
339339
"double comparisons where one of them can be removed"
340340
}
@@ -808,8 +808,8 @@ impl_lint_pass!(Operators => [
808808
INEFFECTIVE_BIT_MASK,
809809
VERBOSE_BIT_MASK,
810810
DOUBLE_COMPARISONS,
811-
IMPOSSIBLE_DOUBLE_CONST_COMPARISONS,
812-
INEFFECTIVE_DOUBLE_CONST_COMPARISONS,
811+
IMPOSSIBLE_COMPARISONS,
812+
REDUNDANT_COMPARISONS,
813813
DURATION_SUBSEC,
814814
EQ_OP,
815815
OP_REF,
@@ -855,7 +855,7 @@ impl<'tcx> LateLintPass<'tcx> for Operators {
855855
bit_mask::check(cx, e, op.node, lhs, rhs);
856856
verbose_bit_mask::check(cx, e, op.node, lhs, rhs, self.verbose_bit_mask_threshold);
857857
double_comparison::check(cx, op.node, lhs, rhs, e.span);
858-
double_const_comparison::check(cx, op, lhs, rhs, e.span);
858+
const_comparisons::check(cx, op, lhs, rhs, e.span);
859859
duration_subsec::check(cx, e, op.node, lhs, rhs);
860860
float_equality_without_abs::check(cx, e, op.node, lhs, rhs);
861861
integer_division::check(cx, e, op.node, lhs, rhs);

tests/ui/double_const_comparisons.rs renamed to tests/ui/const_comparisons.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![allow(unused)]
2-
#![warn(clippy::impossible_double_const_comparisons)]
3-
#![warn(clippy::ineffective_double_const_comparisons)]
2+
#![warn(clippy::impossible_comparisons)]
3+
#![warn(clippy::redundant_comparisons)]
44
#![allow(clippy::no_effect)]
55
#![allow(clippy::short_circuit_statement)]
66
#![allow(clippy::manual_range_contains)]

tests/ui/double_const_comparisons.stderr renamed to tests/ui/const_comparisons.stderr

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,223 +1,223 @@
11
error: boolean expression will never evaluate to 'true'
2-
--> $DIR/double_const_comparisons.rs:44:5
2+
--> $DIR/const_comparisons.rs:44:5
33
|
44
LL | status_code <= 400 && status_code > 500;
55
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
66
|
77
= note: since `400` < `500`, the expression evaluates to false for any value of `status_code`
8-
= note: `-D clippy::impossible-double-const-comparisons` implied by `-D warnings`
8+
= note: `-D clippy::impossible-comparisons` implied by `-D warnings`
99

1010
error: boolean expression will never evaluate to 'true'
11-
--> $DIR/double_const_comparisons.rs:45:5
11+
--> $DIR/const_comparisons.rs:45:5
1212
|
1313
LL | status_code > 500 && status_code < 400;
1414
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1515
|
1616
= note: since `500` > `400`, the expression evaluates to false for any value of `status_code`
1717

1818
error: boolean expression will never evaluate to 'true'
19-
--> $DIR/double_const_comparisons.rs:46:5
19+
--> $DIR/const_comparisons.rs:46:5
2020
|
2121
LL | status_code < 500 && status_code > 500;
2222
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2323
|
2424
= note: `status_code` cannot simultaneously be greater than and less than `500`
2525

2626
error: boolean expression will never evaluate to 'true'
27-
--> $DIR/double_const_comparisons.rs:49:5
27+
--> $DIR/const_comparisons.rs:49:5
2828
|
2929
LL | status_code < { 400 } && status_code > { 500 };
3030
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3131
|
3232
= note: since `{ 400 }` < `{ 500 }`, the expression evaluates to false for any value of `status_code`
3333

3434
error: boolean expression will never evaluate to 'true'
35-
--> $DIR/double_const_comparisons.rs:50:5
35+
--> $DIR/const_comparisons.rs:50:5
3636
|
3737
LL | status_code < STATUS_BAD_REQUEST && status_code > STATUS_SERVER_ERROR;
3838
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3939
|
4040
= note: since `STATUS_BAD_REQUEST` < `STATUS_SERVER_ERROR`, the expression evaluates to false for any value of `status_code`
4141

4242
error: boolean expression will never evaluate to 'true'
43-
--> $DIR/double_const_comparisons.rs:51:5
43+
--> $DIR/const_comparisons.rs:51:5
4444
|
4545
LL | status_code <= u16::MIN + 1 && status_code > STATUS_SERVER_ERROR;
4646
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4747
|
4848
= note: since `u16::MIN + 1` < `STATUS_SERVER_ERROR`, the expression evaluates to false for any value of `status_code`
4949

5050
error: boolean expression will never evaluate to 'true'
51-
--> $DIR/double_const_comparisons.rs:52:5
51+
--> $DIR/const_comparisons.rs:52:5
5252
|
5353
LL | status_code < STATUS_SERVER_ERROR && status_code > STATUS_SERVER_ERROR;
5454
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5555
|
5656
= note: `status_code` cannot simultaneously be greater than and less than `STATUS_SERVER_ERROR`
5757

5858
error: boolean expression will never evaluate to 'true'
59-
--> $DIR/double_const_comparisons.rs:55:5
59+
--> $DIR/const_comparisons.rs:55:5
6060
|
6161
LL | status < { 400 } && status > { 500 };
6262
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6363
|
6464
= note: since `{ 400 }` < `{ 500 }`, the expression evaluates to false for any value of `status`
6565

6666
error: boolean expression will never evaluate to 'true'
67-
--> $DIR/double_const_comparisons.rs:56:5
67+
--> $DIR/const_comparisons.rs:56:5
6868
|
6969
LL | status < STATUS_BAD_REQUEST && status > STATUS_SERVER_ERROR;
7070
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7171
|
7272
= note: since `STATUS_BAD_REQUEST` < `STATUS_SERVER_ERROR`, the expression evaluates to false for any value of `status`
7373

7474
error: boolean expression will never evaluate to 'true'
75-
--> $DIR/double_const_comparisons.rs:57:5
75+
--> $DIR/const_comparisons.rs:57:5
7676
|
7777
LL | status <= u16::MIN + 1 && status > STATUS_SERVER_ERROR;
7878
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
7979
|
8080
= note: since `u16::MIN + 1` < `STATUS_SERVER_ERROR`, the expression evaluates to false for any value of `status`
8181

8282
error: boolean expression will never evaluate to 'true'
83-
--> $DIR/double_const_comparisons.rs:58:5
83+
--> $DIR/const_comparisons.rs:58:5
8484
|
8585
LL | status < STATUS_SERVER_ERROR && status > STATUS_SERVER_ERROR;
8686
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8787
|
8888
= note: `status` cannot simultaneously be greater than and less than `STATUS_SERVER_ERROR`
8989

9090
error: boolean expression will never evaluate to 'true'
91-
--> $DIR/double_const_comparisons.rs:63:5
91+
--> $DIR/const_comparisons.rs:63:5
9292
|
9393
LL | 500 >= status_code && 600 < status_code; // Incorrect
9494
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9595
|
9696
= note: since `500` < `600`, the expression evaluates to false for any value of `status_code`
9797

9898
error: boolean expression will never evaluate to 'true'
99-
--> $DIR/double_const_comparisons.rs:64:5
99+
--> $DIR/const_comparisons.rs:64:5
100100
|
101101
LL | 500 >= status_code && status_code > 600; // Incorrect
102102
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
103103
|
104104
= note: since `500` < `600`, the expression evaluates to false for any value of `status_code`
105105

106106
error: boolean expression will never evaluate to 'true'
107-
--> $DIR/double_const_comparisons.rs:69:5
107+
--> $DIR/const_comparisons.rs:69:5
108108
|
109109
LL | 500 >= status && 600 < status; // Incorrect
110110
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
111111
|
112112
= note: since `500` < `600`, the expression evaluates to false for any value of `status`
113113

114114
error: boolean expression will never evaluate to 'true'
115-
--> $DIR/double_const_comparisons.rs:70:5
115+
--> $DIR/const_comparisons.rs:70:5
116116
|
117117
LL | 500 >= status && status > 600; // Incorrect
118118
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
119119
|
120120
= note: since `500` < `600`, the expression evaluates to false for any value of `status`
121121

122122
error: right-hand side of `&&` operator has no effect
123-
--> $DIR/double_const_comparisons.rs:73:5
123+
--> $DIR/const_comparisons.rs:73:5
124124
|
125125
LL | status_code < 200 && status_code <= 299;
126126
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
127127
|
128128
note: `if `status_code < 200` evaluates to true, status_code <= 299` will always evaluate to true as well
129-
--> $DIR/double_const_comparisons.rs:73:23
129+
--> $DIR/const_comparisons.rs:73:23
130130
|
131131
LL | status_code < 200 && status_code <= 299;
132132
| ^^^^^^^^^^^^^^^^^^^^^
133-
= note: `-D clippy::ineffective-double-const-comparisons` implied by `-D warnings`
133+
= note: `-D clippy::redundant-comparisons` implied by `-D warnings`
134134

135135
error: left-hand side of `&&` operator has no effect
136-
--> $DIR/double_const_comparisons.rs:74:5
136+
--> $DIR/const_comparisons.rs:74:5
137137
|
138138
LL | status_code > 200 && status_code >= 299;
139139
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
140140
|
141141
note: `if `status_code >= 299` evaluates to true, status_code > 200` will always evaluate to true as well
142-
--> $DIR/double_const_comparisons.rs:74:5
142+
--> $DIR/const_comparisons.rs:74:5
143143
|
144144
LL | status_code > 200 && status_code >= 299;
145145
| ^^^^^^^^^^^^^^^^^^^^^
146146

147147
error: left-hand side of `&&` operator has no effect
148-
--> $DIR/double_const_comparisons.rs:76:5
148+
--> $DIR/const_comparisons.rs:76:5
149149
|
150150
LL | status_code >= 500 && status_code > 500; // Useless left
151151
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
152152
|
153153
note: `if `status_code > 500` evaluates to true, status_code >= 500` will always evaluate to true as well
154-
--> $DIR/double_const_comparisons.rs:76:5
154+
--> $DIR/const_comparisons.rs:76:5
155155
|
156156
LL | status_code >= 500 && status_code > 500; // Useless left
157157
| ^^^^^^^^^^^^^^^^^^^^^^
158158

159159
error: right-hand side of `&&` operator has no effect
160-
--> $DIR/double_const_comparisons.rs:77:5
160+
--> $DIR/const_comparisons.rs:77:5
161161
|
162162
LL | status_code > 500 && status_code >= 500; // Useless right
163163
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
164164
|
165165
note: `if `status_code > 500` evaluates to true, status_code >= 500` will always evaluate to true as well
166-
--> $DIR/double_const_comparisons.rs:77:23
166+
--> $DIR/const_comparisons.rs:77:23
167167
|
168168
LL | status_code > 500 && status_code >= 500; // Useless right
169169
| ^^^^^^^^^^^^^^^^^^^^^
170170

171171
error: left-hand side of `&&` operator has no effect
172-
--> $DIR/double_const_comparisons.rs:78:5
172+
--> $DIR/const_comparisons.rs:78:5
173173
|
174174
LL | status_code <= 500 && status_code < 500; // Useless left
175175
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
176176
|
177177
note: `if `status_code < 500` evaluates to true, status_code <= 500` will always evaluate to true as well
178-
--> $DIR/double_const_comparisons.rs:78:5
178+
--> $DIR/const_comparisons.rs:78:5
179179
|
180180
LL | status_code <= 500 && status_code < 500; // Useless left
181181
| ^^^^^^^^^^^^^^^^^^^^^^
182182

183183
error: right-hand side of `&&` operator has no effect
184-
--> $DIR/double_const_comparisons.rs:79:5
184+
--> $DIR/const_comparisons.rs:79:5
185185
|
186186
LL | status_code < 500 && status_code <= 500; // Useless right
187187
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
188188
|
189189
note: `if `status_code < 500` evaluates to true, status_code <= 500` will always evaluate to true as well
190-
--> $DIR/double_const_comparisons.rs:79:23
190+
--> $DIR/const_comparisons.rs:79:23
191191
|
192192
LL | status_code < 500 && status_code <= 500; // Useless right
193193
| ^^^^^^^^^^^^^^^^^^^^^
194194

195195
error: boolean expression will never evaluate to 'true'
196-
--> $DIR/double_const_comparisons.rs:83:5
196+
--> $DIR/const_comparisons.rs:83:5
197197
|
198198
LL | name < "Jennifer" && name > "Shannon";
199199
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
200200
|
201201
= note: since `"Jennifer"` < `"Shannon"`, the expression evaluates to false for any value of `name`
202202

203203
error: boolean expression will never evaluate to 'true'
204-
--> $DIR/double_const_comparisons.rs:86:5
204+
--> $DIR/const_comparisons.rs:86:5
205205
|
206206
LL | numbers < [3, 4] && numbers > [5, 6];
207207
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
208208
|
209209
= note: since `[3, 4]` < `[5, 6]`, the expression evaluates to false for any value of `numbers`
210210

211211
error: boolean expression will never evaluate to 'true'
212-
--> $DIR/double_const_comparisons.rs:89:5
212+
--> $DIR/const_comparisons.rs:89:5
213213
|
214214
LL | letter < 'b' && letter > 'c';
215215
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
216216
|
217217
= note: since `'b'` < `'c'`, the expression evaluates to false for any value of `letter`
218218

219219
error: boolean expression will never evaluate to 'true'
220-
--> $DIR/double_const_comparisons.rs:92:5
220+
--> $DIR/const_comparisons.rs:92:5
221221
|
222222
LL | area < std::f32::consts::E && area > std::f32::consts::PI;
223223
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

0 commit comments

Comments
 (0)