diff options
author | Dmitry Pribysh <dmand@yandex.ru> | 2015-10-19 17:44:10 +0300 |
---|---|---|
committer | Dmitry Pribysh <dmand@yandex.ru> | 2015-10-19 17:44:10 +0300 |
commit | 816d3212d15ba297aa3a234d7874974d9f39b4bd (patch) | |
tree | 2a55cd5bb12fc49ec47919c926dca12ebf2aa3ba /pylint/test/functional/membership_protocol_py3.py | |
parent | 5e649a112f60f3c330b5f7544b6e6286f983beca (diff) | |
download | pylint-membership-test-checker.tar.gz |
Add checker for membership rules and testsmembership-test-checker
Idea of checking is very simple: value used to the right of the 'in' operator
should support membership test protocol (i.e. define either __contains__ or
__iter__ or __getitem__).
Fixes issue #589.
Diffstat (limited to 'pylint/test/functional/membership_protocol_py3.py')
-rw-r--r-- | pylint/test/functional/membership_protocol_py3.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/pylint/test/functional/membership_protocol_py3.py b/pylint/test/functional/membership_protocol_py3.py new file mode 100644 index 0000000..6a77f20 --- /dev/null +++ b/pylint/test/functional/membership_protocol_py3.py @@ -0,0 +1,36 @@ +# pylint: disable=missing-docstring,too-few-public-methods,no-init,no-self-use,unused-argument,pointless-statement,expression-not-assigned + +# metaclasses that support membership test protocol +class MetaIterable(type): + def __iter__(cls): + return iter((1, 2, 3)) + +class MetaOldIterable(type): + def __getitem__(cls, key): + if key < 10: + return key ** 2 + else: + raise IndexError("bad index") + +class MetaContainer(type): + def __contains__(cls, key): + return False + + +class IterableClass(metaclass=MetaOldIterable): + pass + +class OldIterableClass(metaclass=MetaOldIterable): + pass + +class ContainerClass(metaclass=MetaContainer): + pass + + +def test(): + 1 in IterableClass + 1 in OldIterableClass + 1 in ContainerClass + 1 in IterableClass() # [unsupported-membership-test] + 1 in OldIterableClass() # [unsupported-membership-test] + 1 in ContainerClass() # [unsupported-membership-test] |