diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | __pkginfo__.py | 2 | ||||
-rw-r--r-- | checkers/base.py | 11 | ||||
-rw-r--r-- | debian/control | 2 | ||||
-rw-r--r-- | test/input/func_dangerous_default.py | 11 | ||||
-rw-r--r-- | test/messages/func_dangerous_default.txt | 5 |
6 files changed, 24 insertions, 10 deletions
@@ -11,6 +11,9 @@ ChangeLog for PyLint * #124662: fix name error causing crash when symbols are included in output messages + * Simplify checks for dangerous default values by unifying tests + for all different mutable compound literals. + 2013-02-26 -- 0.27.0 * #20693: replace pylint.el by Ian Eure version (patch by J.Kotta) diff --git a/__pkginfo__.py b/__pkginfo__.py index 5604692..542ad0d 100644 --- a/__pkginfo__.py +++ b/__pkginfo__.py @@ -21,7 +21,7 @@ modname = distname = 'pylint' numversion = (0, 27, 0) version = '.'.join([str(num) for num in numversion]) -install_requires = ['logilab-common >= 0.53.0', 'logilab-astng >= 0.21.1'] +install_requires = ['logilab-common >= 0.53.0', 'logilab-astng >= 0.24.3'] license = 'GPL' copyright = 'Logilab S.A.' diff --git a/checkers/base.py b/checkers/base.py index 41e4b93..1fab58b 100644 --- a/checkers/base.py +++ b/checkers/base.py @@ -448,18 +448,15 @@ functions, methods value = default.infer().next() except astng.InferenceError: continue - if isinstance(value, (astng.Dict, astng.List)): + if (isinstance(value, astng.Instance) and + value.qname() in ('__builtin__.set', '__builtin__.dict', '__builtin__.list')): if value is default: msg = default.as_string() + elif type(value) is astng.Instance: + msg = '%s (%s)' % (default.as_string(), value.qname()) 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/debian/control b/debian/control index 33d2056..b96f9f1 100644 --- a/debian/control +++ b/debian/control @@ -13,7 +13,7 @@ Vcs-Browser: http://svn.debian.org/viewsvn/python-apps/packages/pylint/trunk/ Package: pylint Architecture: all -Depends: ${python:Depends}, ${misc:Depends}, python-logilab-common (>= 0.53.0), python-logilab-astng (>= 0.21.1) +Depends: ${python:Depends}, ${misc:Depends}, python-logilab-common (>= 0.53.0), python-logilab-astng (>= 0.24.3) Suggests: python-tk XB-Python-Version: ${python:Versions} Conflicts: python2.2-pylint, python2.3-pylint, python2.4-pylint, pylint-common, pylint-test diff --git a/test/input/func_dangerous_default.py b/test/input/func_dangerous_default.py index 8a526e2..a6b1a05 100644 --- a/test/input/func_dangerous_default.py +++ b/test/input/func_dangerous_default.py @@ -30,3 +30,14 @@ def function6(value = GLOBAL_SET): """set is mutable and dangerous.""" print value +def function7(value = dict()): + """dict is mutable and dangerous.""" + print value + +def function8(value = {1}): + """set is mutable and dangerous.""" + print value + +def function9(value = list()): + """list is mutable and dangerous.""" + print value diff --git a/test/messages/func_dangerous_default.txt b/test/messages/func_dangerous_default.txt index b882844..179a4c5 100644 --- a/test/messages/func_dangerous_default.txt +++ b/test/messages/func_dangerous_default.txt @@ -1,4 +1,7 @@ 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: 19:function4: Dangerous default value set() (__builtin__.set) as argument W: 29:function6: Dangerous default value GLOBAL_SET (__builtin__.set) as argument +W: 33:function7: Dangerous default value dict() (__builtin__.dict) as argument +W: 37:function8: Dangerous default value {1} as argument +W: 41:function9: Dangerous default value list() (__builtin__.list) as argument |