diff options
author | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-01-02 14:02:36 +0100 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-03-28 22:48:56 +0200 |
commit | 0e60eccdc808d125ad963b924b66480b1bab62c4 (patch) | |
tree | 1ed24ccfcbc8d622ce8d896fc1a4ebb88399aa37 | |
parent | a203dee75520a5ae5c575988c524231595d781ce (diff) | |
download | pylint-git-0e60eccdc808d125ad963b924b66480b1bab62c4.tar.gz |
Fix false negative 'use-symbolic-message-instead' and optimize it
use-symbolic-message-instead was not working for message with
multiple new names and the function to get the symbol was
suboptimal. Also made the solution copy pastable.
-rw-r--r-- | ChangeLog | 24 | ||||
-rw-r--r-- | tests/functional/a/access/access_attr_before_def_false_positive.txt | 3 | ||||
-rw-r--r-- | tests/functional/b/base_init_vars.txt | 1 | ||||
-rw-r--r-- | tests/functional/c/classes_meth_could_be_a_function.py | 4 | ||||
-rw-r--r-- | tests/functional/c/classes_meth_could_be_a_function.txt | 3 | ||||
-rw-r--r-- | tests/functional/c/ctor_arguments.py | 2 | ||||
-rw-r--r-- | tests/functional/c/ctor_arguments.txt | 2 | ||||
-rw-r--r-- | tests/functional/d/decorator_scope.txt | 1 | ||||
-rw-r--r-- | tests/functional/e/external_classmethod_crash.txt | 2 | ||||
-rw-r--r-- | tests/functional/g/genexp_in_class_scope.txt | 1 | ||||
-rw-r--r-- | tests/functional/m/messages_managed_by_id.py | 18 | ||||
-rw-r--r-- | tests/functional/m/messages_managed_by_id.txt | 6 | ||||
-rw-r--r-- | tests/functional/u/unused/unused_argument.py | 2 | ||||
-rw-r--r-- | tests/functional/u/unused/unused_argument.txt | 1 | ||||
-rw-r--r-- | tests/functional/u/use/use_symbolic_message_instead.py | 20 | ||||
-rw-r--r-- | tests/functional/u/use/use_symbolic_message_instead.txt | 21 |
16 files changed, 53 insertions, 58 deletions
@@ -17,12 +17,6 @@ Release date: TBA .. Put bug fixes that will be cherry-picked to latest major version here -* Bump ``astroid`` version to ``2.5.2`` - -* Fix false positive for ``method-hidden`` when using private attribute and method - - Closes #3936 - * ``use-symbolic-message-instead`` now also works on legacy messages like ``C0111`` (``missing-docstring``). * Remove unwanted print to stdout from ``_emit_no_member`` @@ -60,24 +54,6 @@ Release date: TBA Closes #4215 -* Fix column index on FIXME warning messages - - Closes #4218 - -* Improve handling of assignment expressions, better edge case handling - - Closes #3763, #4238 - -* Improve check if class is subscriptable PEP585 - -* Fix false-positive for ``unused-import`` on class keyword arguments - - Closes #3202 - -* Fix regression with plugins on PYTHONPATH if latter is cwd - - Closes #4252 - What's New in Pylint 2.7.2? =========================== diff --git a/tests/functional/a/access/access_attr_before_def_false_positive.txt b/tests/functional/a/access/access_attr_before_def_false_positive.txt new file mode 100644 index 000000000..c3bcdf8d8 --- /dev/null +++ b/tests/functional/a/access/access_attr_before_def_false_positive.txt @@ -0,0 +1,3 @@ +use-symbolic-message-instead:1:0::"'C0103' is cryptic: use '# pylint: disable=invalid-name' instead" +use-symbolic-message-instead:1:0::"'R0904' is cryptic: use '# pylint: disable=too-many-public-methods' instead" +use-symbolic-message-instead:1:0::"'W0201' is cryptic: use '# pylint: disable=attribute-defined-outside-init' instead" diff --git a/tests/functional/b/base_init_vars.txt b/tests/functional/b/base_init_vars.txt new file mode 100644 index 000000000..99d501ae9 --- /dev/null +++ b/tests/functional/b/base_init_vars.txt @@ -0,0 +1 @@ +use-symbolic-message-instead:1:0::"'R0201' is cryptic: use '# pylint: disable=no-self-use' instead" diff --git a/tests/functional/c/classes_meth_could_be_a_function.py b/tests/functional/c/classes_meth_could_be_a_function.py index 94103a324..59e585649 100644 --- a/tests/functional/c/classes_meth_could_be_a_function.py +++ b/tests/functional/c/classes_meth_could_be_a_function.py @@ -1,4 +1,4 @@ -# pylint: disable=missing-docstring,too-few-public-methods,no-init,useless-object-inheritance +# pylint: disable=C0111,too-few-public-methods,W0232, useless-object-inheritance # [use-symbolic-message-instead,use-symbolic-message-instead] """ #2479 @@ -18,7 +18,7 @@ class Aimpl(object): # disable "method could be a function" on classes which are not overriding # the factory method because in that case the usage of polymorphism is not # detected - # pylint: disable=no-self-use + # pylint: disable=R0201 # [use-symbolic-message-instead] def makex(self): return XAsub() diff --git a/tests/functional/c/classes_meth_could_be_a_function.txt b/tests/functional/c/classes_meth_could_be_a_function.txt new file mode 100644 index 000000000..a8a5ea27f --- /dev/null +++ b/tests/functional/c/classes_meth_could_be_a_function.txt @@ -0,0 +1,3 @@ +use-symbolic-message-instead:1:0::"'C0111' is cryptic: use '# pylint: disable=missing-docstring' instead" +use-symbolic-message-instead:1:0::"'W0232' is cryptic: use '# pylint: disable=no-init' instead" +use-symbolic-message-instead:21:0::"'R0201' is cryptic: use '# pylint: disable=no-self-use' instead" diff --git a/tests/functional/c/ctor_arguments.py b/tests/functional/c/ctor_arguments.py index ee10413e3..8499e9374 100644 --- a/tests/functional/c/ctor_arguments.py +++ b/tests/functional/c/ctor_arguments.py @@ -2,7 +2,7 @@ Based on tests/functional/a/arguments.py """ -# pylint: disable=missing-docstring,too-few-public-methods,super-init-not-called,useless-object-inheritance +# pylint: disable=C0111,too-few-public-methods,W0231, useless-object-inheritance # [use-symbolic-message-instead,use-symbolic-message-instead] class Class1Arg(object): diff --git a/tests/functional/c/ctor_arguments.txt b/tests/functional/c/ctor_arguments.txt index 781715c0a..f08ccdec5 100644 --- a/tests/functional/c/ctor_arguments.txt +++ b/tests/functional/c/ctor_arguments.txt @@ -1,3 +1,5 @@ +use-symbolic-message-instead:5:0::"'C0111' is cryptic: use '# pylint: disable=missing-docstring' instead" +use-symbolic-message-instead:5:0::"'W0231' is cryptic: use '# pylint: disable=super-init-not-called' instead" no-value-for-parameter:35:0::No value for argument 'first_argument' in constructor call too-many-function-args:36:0::Too many positional arguments for constructor call no-value-for-parameter:38:0::No value for argument 'third_argument' in constructor call diff --git a/tests/functional/d/decorator_scope.txt b/tests/functional/d/decorator_scope.txt new file mode 100644 index 000000000..b89662297 --- /dev/null +++ b/tests/functional/d/decorator_scope.txt @@ -0,0 +1 @@ +use-symbolic-message-instead:1:0::"'W0232' is cryptic: use '# pylint: disable=no-init' instead" diff --git a/tests/functional/e/external_classmethod_crash.txt b/tests/functional/e/external_classmethod_crash.txt new file mode 100644 index 000000000..e80a3273d --- /dev/null +++ b/tests/functional/e/external_classmethod_crash.txt @@ -0,0 +1,2 @@ +use-symbolic-message-instead:1:0::"'W0232' is cryptic: use '# pylint: disable=no-init' instead" +use-symbolic-message-instead:1:0::"'W0613' is cryptic: use '# pylint: disable=unused-argument' instead" diff --git a/tests/functional/g/genexp_in_class_scope.txt b/tests/functional/g/genexp_in_class_scope.txt new file mode 100644 index 000000000..b89662297 --- /dev/null +++ b/tests/functional/g/genexp_in_class_scope.txt @@ -0,0 +1 @@ +use-symbolic-message-instead:1:0::"'W0232' is cryptic: use '# pylint: disable=no-init' instead" diff --git a/tests/functional/m/messages_managed_by_id.py b/tests/functional/m/messages_managed_by_id.py new file mode 100644 index 000000000..ddcf0bedc --- /dev/null +++ b/tests/functional/m/messages_managed_by_id.py @@ -0,0 +1,18 @@ +"""Use symbolic message instead are also tested in use_symbolic_message_instead.py""" +# pylint: disable=C0111 # [use-symbolic-message-instead] + + +def foo(): # pylint: disable=C0102 # [use-symbolic-message-instead] + return 1 + + +def toto(): # pylint: disable=C0102,R1711 # [use-symbolic-message-instead,use-symbolic-message-instead] + return + + +def test_enabled_by_id_msg(): # pylint: enable=C0111 # [use-symbolic-message-instead,missing-function-docstring] + pass + + +def baz(): #pylint: disable=blacklisted-name + return 1 diff --git a/tests/functional/m/messages_managed_by_id.txt b/tests/functional/m/messages_managed_by_id.txt new file mode 100644 index 000000000..83ef807ca --- /dev/null +++ b/tests/functional/m/messages_managed_by_id.txt @@ -0,0 +1,6 @@ +use-symbolic-message-instead:2:0::"'C0111' is cryptic: use '# pylint: disable=missing-docstring' instead" +use-symbolic-message-instead:5:0::"'C0102' is cryptic: use '# pylint: disable=blacklisted-name' instead" +use-symbolic-message-instead:9:0::"'C0102' is cryptic: use '# pylint: disable=blacklisted-name' instead" +use-symbolic-message-instead:9:0::"'R1711' is cryptic: use '# pylint: disable=useless-return' instead" +missing-function-docstring:13:0:test_enabled_by_id_msg:Missing function or method docstring +use-symbolic-message-instead:13:0::"'C0111' is cryptic: use '# pylint: enable=missing-docstring' instead" diff --git a/tests/functional/u/unused/unused_argument.py b/tests/functional/u/unused/unused_argument.py index 707eb25af..a1018453f 100644 --- a/tests/functional/u/unused/unused_argument.py +++ b/tests/functional/u/unused/unused_argument.py @@ -76,7 +76,7 @@ class AAAA(object): description=[(etype,)]*size) def inner(row, col=0, etype=etype, req=self, rset=rset): """inner using all its argument""" - # pylint: disable=maybe-no-member + # pylint: disable = E1103 # [use-symbolic-message-instead] return req.vreg.etype_class(etype)(req, rset, row, col) # pylint: disable = attribute-defined-outside-init rset.get_entity = inner diff --git a/tests/functional/u/unused/unused_argument.txt b/tests/functional/u/unused/unused_argument.txt index b1ad4ad5a..1e59f7cc5 100644 --- a/tests/functional/u/unused/unused_argument.txt +++ b/tests/functional/u/unused/unused_argument.txt @@ -5,4 +5,5 @@ unused-argument:54:13:function:Unused argument 'arg' unused-argument:61:21:AAAA.method:Unused argument 'arg':INFERENCE unused-argument:68:0:AAAA.selected:Unused argument 'args':INFERENCE unused-argument:68:0:AAAA.selected:Unused argument 'kwargs':INFERENCE +use-symbolic-message-instead:79:0::"'E1103' is cryptic: use '# pylint: disable=maybe-no-member' instead" unused-argument:87:23:BBBB.__init__:Unused argument 'arg':INFERENCE diff --git a/tests/functional/u/use/use_symbolic_message_instead.py b/tests/functional/u/use/use_symbolic_message_instead.py index afdd93c67..c5fea1261 100644 --- a/tests/functional/u/use/use_symbolic_message_instead.py +++ b/tests/functional/u/use/use_symbolic_message_instead.py @@ -1,25 +1,11 @@ +"""Use symbolic message instead are also tested in messages_managed_by_id.py""" + # pylint: disable=C0111,R0903,T1234 # [bad-option-value,use-symbolic-message-instead,use-symbolic-message-instead] # pylint: enable=C0111 # [use-symbolic-message-instead] -def my_function(arg): # [missing-function-docstring] +def myfunction(arg): # [missing-function-docstring] return arg or True # pylint: disable=C0111 # [use-symbolic-message-instead] # pylint: enable=R0903 # [use-symbolic-message-instead] # pylint: disable=R0903 # [use-symbolic-message-instead] - - -def foo(): # pylint: disable=C0102 # [use-symbolic-message-instead] - return 1 - - -def toto(): # pylint: disable=C0102,R1711 # [use-symbolic-message-instead,use-symbolic-message-instead] - return - - -def test_enabled_by_id_msg(): # pylint: enable=C0111 # [use-symbolic-message-instead,missing-function-docstring] - pass - - -def baz(): # pylint: disable=blacklisted-name - return 1 diff --git a/tests/functional/u/use/use_symbolic_message_instead.txt b/tests/functional/u/use/use_symbolic_message_instead.txt index 09861bf06..855c9d509 100644 --- a/tests/functional/u/use/use_symbolic_message_instead.txt +++ b/tests/functional/u/use/use_symbolic_message_instead.txt @@ -1,13 +1,8 @@ -bad-option-value:1:0::Bad option value 'T1234' -use-symbolic-message-instead:1:0::"'C0111' is cryptic: use '# pylint: disable=missing-docstring' instead" -use-symbolic-message-instead:1:0::"'R0903' is cryptic: use '# pylint: disable=too-few-public-methods' instead" -use-symbolic-message-instead:2:0::"'C0111' is cryptic: use '# pylint: enable=missing-docstring' instead" -missing-function-docstring:4:0:my_function:Missing function or method docstring -use-symbolic-message-instead:7:0::"'C0111' is cryptic: use '# pylint: disable=missing-docstring' instead" -use-symbolic-message-instead:8:0::"'R0903' is cryptic: use '# pylint: enable=too-few-public-methods' instead" -use-symbolic-message-instead:9:0::"'R0903' is cryptic: use '# pylint: disable=too-few-public-methods' instead" -use-symbolic-message-instead:12:0::"'C0102' is cryptic: use '# pylint: disable=blacklisted-name' instead" -use-symbolic-message-instead:16:0::"'C0102' is cryptic: use '# pylint: disable=blacklisted-name' instead" -use-symbolic-message-instead:16:0::"'R1711' is cryptic: use '# pylint: disable=useless-return' instead" -missing-function-docstring:20:0:test_enabled_by_id_msg:Missing function or method docstring -use-symbolic-message-instead:20:0::"'C0111' is cryptic: use '# pylint: enable=missing-docstring' instead" +bad-option-value:3:0::Bad option value 'T1234' +use-symbolic-message-instead:3:0::"'C0111' is cryptic: use '# pylint: disable=missing-docstring' instead" +use-symbolic-message-instead:3:0::"'R0903' is cryptic: use '# pylint: disable=too-few-public-methods' instead" +use-symbolic-message-instead:4:0::"'C0111' is cryptic: use '# pylint: enable=missing-docstring' instead" +missing-function-docstring:6:0:myfunction:Missing function or method docstring +use-symbolic-message-instead:9:0::"'C0111' is cryptic: use '# pylint: disable=missing-docstring' instead" +use-symbolic-message-instead:10:0::"'R0903' is cryptic: use '# pylint: enable=too-few-public-methods' instead" +use-symbolic-message-instead:11:0::"'R0903' is cryptic: use '# pylint: disable=too-few-public-methods' instead" |