diff options
author | Torsten Marek <tmarek@google.com> | 2012-05-15 14:51:17 +0200 |
---|---|---|
committer | Torsten Marek <tmarek@google.com> | 2012-05-15 14:51:17 +0200 |
commit | ee8ca327141be4000cd3c654eb9e710671760be9 (patch) | |
tree | fd8d2f822798b929f4a0b6fd7b1c531952cdfb8e | |
parent | 1a481908c8a45588cb65f4f8f49f576505c7b022 (diff) | |
download | pylint-git-ee8ca327141be4000cd3c654eb9e710671760be9.tar.gz |
Emit W0102 (dangerous default value) when sets are used as default arguments for functions. Closes #92911
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | checkers/base.py | 6 | ||||
-rw-r--r-- | test/input/func_dangerous_default.py | 15 | ||||
-rw-r--r-- | test/messages/func_dangerous_default.txt | 2 |
4 files changed, 26 insertions, 0 deletions
@@ -3,6 +3,9 @@ ChangeLog for PyLint -- + * Emit W0102 when sets are used as default arguments in functions + (patch by tmarek@google.com) + * #77982 Do not emit E0602 for loop variables of comprehensions used as argument values inside a decorator (patch by tmarek@google.com) diff --git a/checkers/base.py b/checkers/base.py index c551a3576..5de570ff1 100644 --- a/checkers/base.py +++ b/checkers/base.py @@ -428,6 +428,12 @@ functions, methods else: msg = '%s (%s)' % (default.as_string(), value.as_string()) self.add_message('W0102', node=node, args=(msg,)) + if value.qname() == '__builtin__.set': + if isinstance(default, astng.CallFunc): + msg = default.as_string() + else: + msg = '%s (%s)' % (default.as_string(), value.qname()) + self.add_message('W0102', node=node, args=(msg,)) @check_messages('W0101', 'W0150') def visit_return(self, node): diff --git a/test/input/func_dangerous_default.py b/test/input/func_dangerous_default.py index 0bf87278c..8a526e2eb 100644 --- a/test/input/func_dangerous_default.py +++ b/test/input/func_dangerous_default.py @@ -15,3 +15,18 @@ def function2(value = HEHE): def function3(value): """docstring""" print value + +def function4(value = set()): + """set is mutable and dangerous.""" + print value + +def function5(value = frozenset()): + """frozenset is immutable and safe.""" + print value + +GLOBAL_SET = set() + +def function6(value = GLOBAL_SET): + """set is mutable and dangerous.""" + print value + diff --git a/test/messages/func_dangerous_default.txt b/test/messages/func_dangerous_default.txt index 21d32e022..b8828443a 100644 --- a/test/messages/func_dangerous_default.txt +++ b/test/messages/func_dangerous_default.txt @@ -1,2 +1,4 @@ W: 7:function1: Dangerous default value [] as argument W: 11:function2: Dangerous default value HEHE ({}) as argument +W: 19:function4: Dangerous default value set() as argument +W: 29:function6: Dangerous default value GLOBAL_SET (__builtin__.set) as argument |