summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2021-01-02 14:02:36 +0100
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-03-28 22:48:56 +0200
commit0e60eccdc808d125ad963b924b66480b1bab62c4 (patch)
tree1ed24ccfcbc8d622ce8d896fc1a4ebb88399aa37
parenta203dee75520a5ae5c575988c524231595d781ce (diff)
downloadpylint-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--ChangeLog24
-rw-r--r--tests/functional/a/access/access_attr_before_def_false_positive.txt3
-rw-r--r--tests/functional/b/base_init_vars.txt1
-rw-r--r--tests/functional/c/classes_meth_could_be_a_function.py4
-rw-r--r--tests/functional/c/classes_meth_could_be_a_function.txt3
-rw-r--r--tests/functional/c/ctor_arguments.py2
-rw-r--r--tests/functional/c/ctor_arguments.txt2
-rw-r--r--tests/functional/d/decorator_scope.txt1
-rw-r--r--tests/functional/e/external_classmethod_crash.txt2
-rw-r--r--tests/functional/g/genexp_in_class_scope.txt1
-rw-r--r--tests/functional/m/messages_managed_by_id.py18
-rw-r--r--tests/functional/m/messages_managed_by_id.txt6
-rw-r--r--tests/functional/u/unused/unused_argument.py2
-rw-r--r--tests/functional/u/unused/unused_argument.txt1
-rw-r--r--tests/functional/u/use/use_symbolic_message_instead.py20
-rw-r--r--tests/functional/u/use/use_symbolic_message_instead.txt21
16 files changed, 53 insertions, 58 deletions
diff --git a/ChangeLog b/ChangeLog
index fc7e86ab2..a23865228 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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"