|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- # pylint: disable=missing-docstring,pointless-statement,expression-not-assigned,too-few-public-methods,import-error,no-init,wrong-import-position,no-else-return
-
- # standard types
- 1 in [1, 2, 3]
- 1 in {'a': 1, 'b': 2}
- 1 in {1, 2, 3}
- 1 in (1, 2, 3)
- '1' in "123"
- '1' in u"123"
- '1' in bytearray(b"123")
- 1 in frozenset([1, 2, 3])
-
- # comprehensions
- 1 in [x ** 2 % 10 for x in range(10)]
- 1 in {x ** 2 % 10 for x in range(10)}
- 1 in {x: x ** 2 % 10 for x in range(10)}
-
- # iterators
- 1 in iter([1, 2, 3])
-
- # generator
- def count(upto=float("inf")):
- i = 0
- while True:
- if i > upto:
- break
- yield i
- i += 1
-
- 10 in count(upto=10)
-
- # custom instance
- class UniversalContainer(object):
- def __contains__(self, key):
- return True
-
- 42 in UniversalContainer()
-
- # custom iterable
- class CustomIterable(object):
- def __iter__(self):
- return iter((1, 2, 3))
- 3 in CustomIterable()
-
- # old-style iterable
- class OldStyleIterable(object):
- def __getitem__(self, key):
- if key < 10:
- return 2 ** key
- else:
- raise IndexError("bad index")
- 64 in OldStyleIterable()
-
- # do not emit warning if class has unknown bases
- from some_missing_module import ImportedClass
-
- class MaybeIterable(ImportedClass):
- pass
-
- 10 in MaybeIterable()
-
- # do not emit warning inside mixins/abstract/base classes
- class UsefulMixin(object):
- stuff = None
-
- def get_stuff(self):
- return self.stuff
-
- def act(self, thing):
- stuff = self.get_stuff()
- if thing in stuff:
- pass
-
- class BaseThing(object):
- valid_values = None
-
- def validate(self, value):
- if self.valid_values is None:
- return True
- else:
- # error should not be emitted here
- return value in self.valid_values
-
- class AbstractThing(object):
- valid_values = None
-
- def validate(self, value):
- if self.valid_values is None:
- return True
- else:
- # error should not be emitted here
- return value in self.valid_values
-
- # class is not named as abstract
- # but still is deduceably abstract
- class Thing(object):
- valid_values = None
-
- def __init__(self):
- self._init_values()
-
- def validate(self, value):
- if self.valid_values is None:
- return True
- else:
- # error should not be emitted here
- return value in self.valid_values
-
- def _init_values(self):
- raise NotImplementedError
-
- # error cases
- 42 in 42 # [unsupported-membership-test]
- 42 not in None # [unsupported-membership-test]
- 42 in 8.5 # [unsupported-membership-test]
-
- class EmptyClass(object):
- pass
-
- 42 not in EmptyClass() # [unsupported-membership-test]
- 42 in EmptyClass # [unsupported-membership-test]
- 42 not in count # [unsupported-membership-test]
- 42 in range # [unsupported-membership-test]
|