Hey, I was wondering if anyone had the time to take a look at the patch I sent for Pylint ticket #8776. Do you think my solution is appropriate?
http://www.logilab.org/ticket/8776 I reattached the diff. Thanks, Alex Margarit Team Tahiti, U of T On Tue, Mar 16, 2010 at 1:59 AM, Alex Margarit <alex.marga...@gmail.com> wrote: > Hi, > > I think I have a fix for Pylint ticket #8776, "Inline message > suppression has no effect if placed within a function's arguments > list.". > > The problem is that function arguments are part of the same logical > code line as the function definition. However, messages get deleted > after they register in the arguments block, so they never touch the > logical line, defaulting to "enabled" when that line is checked. > > My solution is to not delete suppression messages if the current node > is a function's arguments. This makes Pylint behave the same way > regardless if the suppression messages are placed at the beginning, > within, or at the end of the arguments list. > > I edited test/input/func_w0102.py and test/messages/func_w0102.txt to > test my patch, and ran the entire Pylint test suite without any > problems. > > Thanks, > Alex Margarit >
diff -r f5f084e5267a ChangeLog --- a/ChangeLog Thu Mar 04 12:12:32 2010 +0100 +++ b/ChangeLog Tue Mar 16 01:35:36 2010 -0400 @@ -1,6 +1,8 @@ ChangeLog for PyLint ==================== -- + * fix #8776, inline message suppression in a function's arguments list. + * fix #9263, __init__ and __new__ are checked for unused arguments. * fix #20991, class scope definitions ignored in a genexpr diff -r f5f084e5267a lint.py --- a/lint.py Thu Mar 04 12:12:32 2010 +0100 +++ b/lint.py Tue Mar 16 01:35:36 2010 -0400 @@ -466,7 +466,10 @@ self._module_msgs_state[msgid][line] = state except KeyError: self._module_msgs_state[msgid] = {line: state} - del lines[lineno] + # the arguments list is a special case, since it is part of + # the same logical code line as the function definition + if str(node) != 'arguments()': + del lines[lineno] # code checking methods ################################################### diff -r f5f084e5267a test/input/func_w0102.py --- a/test/input/func_w0102.py Thu Mar 04 12:12:32 2010 +0100 +++ b/test/input/func_w0102.py Tue Mar 16 01:35:36 2010 -0400 @@ -65,3 +65,37 @@ """does not redefine callback returned by with_inner_function_1""" pass return callback + +def dangerous_default_dict_1( + one, + two, + three = {} + ): + """three has a dangerous default value""" + return three.get(one + two) + +def dangerous_default_dict_2( + # pylint: disable-msg=W0102 + one, + two, + three = {} + ): + """three has a dangerous default value - warning disabled""" + return three.get(one + two) + +def dangerous_default_dict_3( + one, + two, + # pylint: disable-msg=W0102 + three = {} + ): + """three has a dangerous default value - warning disabled""" + return three.get(one + two) + +def dangerous_default_dict_4( + one, + two, + three = {} + ): + """three has a dangerous default value""" + return three.get(one + two) diff -r f5f084e5267a test/messages/func_w0102.txt --- a/test/messages/func_w0102.txt Thu Mar 04 12:12:32 2010 +0100 +++ b/test/messages/func_w0102.txt Tue Mar 16 01:35:36 2010 -0400 @@ -3,3 +3,5 @@ E: 32:func2: function already defined line 29 E: 51:exclusive_func2: function already defined line 45 W: 34:func2: Redefining name '__revision__' from outer scope (line 3) +W: 69:dangerous_default_dict_1: Dangerous default value {} as argument +W: 95:dangerous_default_dict_4: Dangerous default value {} as argument
_______________________________________________ Python-Projects mailing list Python-Projects@lists.logilab.org http://lists.logilab.org/mailman/listinfo/python-projects