summaryrefslogtreecommitdiff
path: root/pylint/test/functional/not_callable.py
diff options
context:
space:
mode:
Diffstat (limited to 'pylint/test/functional/not_callable.py')
-rw-r--r--pylint/test/functional/not_callable.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/pylint/test/functional/not_callable.py b/pylint/test/functional/not_callable.py
new file mode 100644
index 0000000..c2a3ab4
--- /dev/null
+++ b/pylint/test/functional/not_callable.py
@@ -0,0 +1,112 @@
+# pylint: disable=missing-docstring,no-self-use,too-few-public-methods
+
+REVISION = None
+
+REVISION() # [not-callable]
+
+def correct():
+ return 1
+
+REVISION = correct()
+
+class Correct(object):
+ """callable object"""
+
+class MetaCorrect(object):
+ """callable object"""
+ def __call__(self):
+ return self
+
+INSTANCE = Correct()
+CALLABLE_INSTANCE = MetaCorrect()
+CORRECT = CALLABLE_INSTANCE()
+INCORRECT = INSTANCE() # [not-callable]
+LIST = []
+INCORRECT = LIST() # [not-callable]
+DICT = {}
+INCORRECT = DICT() # [not-callable]
+TUPLE = ()
+INCORRECT = TUPLE() # [not-callable]
+INT = 1
+INCORRECT = INT() # [not-callable]
+
+# Test calling properties. Pylint can detect when using only the
+# getter, but it doesn't infer properly when having a getter
+# and a setter.
+class MyProperty(property):
+ """ test subclasses """
+
+class PropertyTest(object):
+ """ class """
+
+ def __init__(self):
+ self.attr = 4
+
+ @property
+ def test(self):
+ """ Get the attribute """
+ return self.attr
+
+ @test.setter
+ def test(self, value):
+ """ Set the attribute """
+ self.attr = value
+
+ @MyProperty
+ def custom(self):
+ """ Get the attribute """
+ return self.attr
+
+ @custom.setter
+ def custom(self, value):
+ """ Set the attribute """
+ self.attr = value
+
+PROP = PropertyTest()
+PROP.test(40) # [not-callable]
+PROP.custom() # [not-callable]
+
+# Safe from not-callable when using properties.
+
+class SafeProperty(object):
+ @property
+ def static(self):
+ return staticmethod
+
+ @property
+ def klass(self):
+ return classmethod
+
+ @property
+ def get_lambda(self):
+ return lambda: None
+
+ @property
+ def other_function(self):
+ def function(arg):
+ return arg
+ return function
+
+ @property
+ def dict_builtin(self):
+ return dict
+
+ @property
+ def range_builtin(self):
+ return range
+
+ @property
+ def instance(self):
+ class Empty(object):
+ def __call__(self):
+ return 42
+ return Empty()
+
+PROP1 = SafeProperty()
+PROP1.static(2)
+PROP1.klass(2)
+PROP1.get_lambda()
+PROP1.other_function(4)
+PROP1.dict_builtin()
+PROP1.range_builtin(4)
+PROP1.instance()