|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- """Verify if constant tests are used inside if statements."""
- # pylint: disable=invalid-name, missing-docstring,too-few-public-methods
- # pylint: disable=no-init,expression-not-assigned
-
-
- import collections
-
-
- def function():
- yield
-
-
- class Class(object):
-
- def method(self):
- pass
-
-
- instance = Class()
-
- if collections: # [using-constant-test]
- pass
-
- # GenExpr
- if (node for node in range(10)): # [using-constant-test]
- pass
-
- if lambda: None: # [using-constant-test]
- pass
-
- if function: # [using-constant-test]
- pass
-
- if Class: # [using-constant-test]
- pass
-
- if 2: # [using-constant-test]
- pass
-
- if True: # [using-constant-test]
- pass
-
- if '': # [using-constant-test]
- pass
-
- if b'': # [using-constant-test]
- pass
-
- if 2.0: # [using-constant-test]
- pass
-
- if {}: # [using-constant-test]
- pass
-
- if {1, 2, 3}: # [using-constant-test]
- pass
-
- if (1, 2, 3): # [using-constant-test]
- pass
-
- if (): # [using-constant-test]
- pass
-
- # Generator
- generator = function()
- if generator: # [using-constant-test]
- pass
-
- if 1 if 2 else 3: # [using-constant-test]
- pass
-
- def test_comprehensions():
- [data for data in range(100) if len] # [using-constant-test]
- [data for data in range(100) if 1] # [using-constant-test]
- (data for data in range(100) if len) # [using-constant-test]
- (data for data in range(100) if 1) # [using-constant-test]
- {data for data in range(100) if len} # [using-constant-test]
- {data: 1 for data in range(100) if len} # [using-constant-test]
-
-
-
- # For these, we require to do inference, even though the result can be a
- # constant value. For some of them, we could determine that the test
- # is constant, such as 2 + 3, but the components of the BinOp
- # can be anything else (2 + somefunccall).
-
- name = 42
- if name:
- pass
-
- # UnboundMethod / Function
- if Class.method:
- pass
-
- # BoundMethod
- if instance.method:
- pass
-
- if 3 + 4:
- pass
-
- if 3 and 4:
- pass
-
- if not 3:
- pass
-
- if instance.method():
- pass
-
- # pylint: disable=misplaced-comparison-constant
- if 2 < 3:
- pass
-
- if tuple((1, 2, 3)):
- pass
-
- if dict():
- pass
-
- if tuple():
- pass
-
- if [1, 2, 3][:1]:
- pass
-
- def test(*args):
- if args:
- return 42
- return None
-
- def test_good_comprehension_checks():
- [data for data in range(100)]
- [data for data in range(100) if data]
- [data for data in range(100) if len(data)]
- (data for data in range(100) if data)
- (data for data in range(100) if len(data))
- {data for data in range(100) if data}
- {data for data in range(100) if len(data)}
- {data: 1 for data in range(100) if data}
- {data: 1 for data in range(100)}
|