diff options
author | Zen Lee <53538590+zenlyj@users.noreply.github.com> | 2023-02-27 04:21:34 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-26 21:21:34 +0100 |
commit | 52a2a04a59526ce8344d4d2b7f86bb978177e047 (patch) | |
tree | d8e9053d8eca4c9eb1cce97173ef5d3a065cb750 /tests | |
parent | 27a3984832faf36be4fab07fef84086d25283846 (diff) | |
download | pylint-git-52a2a04a59526ce8344d4d2b7f86bb978177e047.tar.gz |
Add new checker `bad-chained-comparison` (#7990)
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
Diffstat (limited to 'tests')
4 files changed, 64 insertions, 2 deletions
diff --git a/tests/functional/b/bad_chained_comparison.py b/tests/functional/b/bad_chained_comparison.py new file mode 100644 index 000000000..c1bdab980 --- /dev/null +++ b/tests/functional/b/bad_chained_comparison.py @@ -0,0 +1,51 @@ +# pylint: disable=invalid-name +"""Checks for chained comparisons with comparisons belonging to different groups""" + +primes = set(2, 3, 5, 7, 11) + +def valid(x, y, z): + """valid usage of chained comparisons""" + if x < y <= z: + pass + elif x > y >= z: + pass + elif x == y != z: + pass + elif x is y is not z: + pass + elif x in y not in z: + pass + +def id_comparison_invalid(*, left=None, right=None): + """identity mixed with comparison""" + if left is None != right is None: # [bad-chained-comparison] + raise ValueError('Either both left= and right= need to be provided or none should.') + if left is not None == right is not None: # [bad-chained-comparison] + pass + +def member_comparison_invalid(x:int, y:int, z:int): + """membership mixed with comparison""" + if x in primes == y in primes: # [bad-chained-comparison] + pass + elif x in primes == z not in primes: # [bad-chained-comparison] + pass + elif x not in primes == y in primes != z not in primes: # [bad-chained-comparison] + pass + elif x not in primes <= y not in primes > z in primes: # [bad-chained-comparison] + pass + +def id_member_invalid(x:int, y:int, z:int): + """identity mixed with membership""" + if x in primes is y in primes: # [bad-chained-comparison] + pass + elif x in primes is z not in primes: # [bad-chained-comparison] + pass + elif x not in primes is y in primes is not z not in primes: # [bad-chained-comparison] + pass + +def complex_invalid(x:int, y:int, z:int): + """invalid complex chained comparisons""" + if x in primes == y not in primes is not z in primes: # [bad-chained-comparison] + pass + elif x < y <= z != x not in primes is y in primes: # [bad-chained-comparison] + pass diff --git a/tests/functional/b/bad_chained_comparison.txt b/tests/functional/b/bad_chained_comparison.txt new file mode 100644 index 000000000..276a1debc --- /dev/null +++ b/tests/functional/b/bad_chained_comparison.txt @@ -0,0 +1,11 @@ +bad-chained-comparison:21:7:21:36:id_comparison_invalid:Suspicious 3-part chained comparison using semantically incompatible operators ('!=' and 'is'):HIGH +bad-chained-comparison:23:7:23:44:id_comparison_invalid:Suspicious 3-part chained comparison using semantically incompatible operators ('==' and 'is not'):HIGH +bad-chained-comparison:28:7:28:33:member_comparison_invalid:Suspicious 3-part chained comparison using semantically incompatible operators ('==' and 'in'):HIGH +bad-chained-comparison:30:9:30:39:member_comparison_invalid:Suspicious 3-part chained comparison using semantically incompatible operators ('==', 'in' and 'not in'):HIGH +bad-chained-comparison:32:9:32:58:member_comparison_invalid:Suspicious 5-part chained comparison using semantically incompatible operators ('!=', '==', 'in' and 'not in'):HIGH +bad-chained-comparison:34:9:34:57:member_comparison_invalid:Suspicious 5-part chained comparison using semantically incompatible operators ('<=', '>', 'in' and 'not in'):HIGH +bad-chained-comparison:39:7:39:33:id_member_invalid:Suspicious 3-part chained comparison using semantically incompatible operators ('in' and 'is'):HIGH +bad-chained-comparison:41:9:41:39:id_member_invalid:Suspicious 3-part chained comparison using semantically incompatible operators ('in', 'is' and 'not in'):HIGH +bad-chained-comparison:43:9:43:62:id_member_invalid:Suspicious 5-part chained comparison using semantically incompatible operators ('in', 'is', 'is not' and 'not in'):HIGH +bad-chained-comparison:48:7:48:56:complex_invalid:Suspicious 5-part chained comparison using semantically incompatible operators ('==', 'in', 'is not' and 'not in'):HIGH +bad-chained-comparison:50:9:50:53:complex_invalid:Suspicious 6-part chained comparison using semantically incompatible operators ('!=', '<', '<=', 'in', 'is' and 'not in'):HIGH diff --git a/tests/functional/c/consider/consider_iterating_dictionary.py b/tests/functional/c/consider/consider_iterating_dictionary.py index 8c75b4e3e..91402bf77 100644 --- a/tests/functional/c/consider/consider_iterating_dictionary.py +++ b/tests/functional/c/consider/consider_iterating_dictionary.py @@ -1,4 +1,4 @@ -# pylint: disable=missing-docstring, expression-not-assigned, too-few-public-methods +# pylint: disable=missing-docstring, expression-not-assigned, too-few-public-methods, bad-chained-comparison # pylint: disable=no-member, import-error, line-too-long # pylint: disable=unnecessary-comprehension, use-dict-literal, use-implicit-booleaness-not-comparison diff --git a/tests/functional/ext/set_membership/use_set_membership.py b/tests/functional/ext/set_membership/use_set_membership.py index 7872d7f98..df5cd961b 100644 --- a/tests/functional/ext/set_membership/use_set_membership.py +++ b/tests/functional/ext/set_membership/use_set_membership.py @@ -1,4 +1,4 @@ -# pylint: disable=invalid-name,missing-docstring,pointless-statement,unnecessary-comprehension,undefined-variable +# pylint: disable=invalid-name,missing-docstring,pointless-statement,unnecessary-comprehension,undefined-variable,bad-chained-comparison x = 1 var = frozenset({1, 2, 3}) |