summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mueller <30130371+cdce8p@users.noreply.github.com>2021-06-02 18:27:01 +0200
committerGitHub <noreply@github.com>2021-06-02 18:27:01 +0200
commit9361fa0630ce920081b57865be7882a39e9da1e3 (patch)
treee76160edf47495eb2b6f0a00aaf40df786612dbe
parentec78b15c76af6eb41964f624769d115c5796112e (diff)
downloadpylint-git-9361fa0630ce920081b57865be7882a39e9da1e3.tar.gz
Update name for consider-using-namedtuple to include dataclass (#4536)
* Change msg name to include dataclass * Update pylint ignores * Update tests
-rw-r--r--ChangeLog4
-rw-r--r--doc/whatsnew/2.9.rst3
-rw-r--r--pylint/checkers/classes.py2
-rw-r--r--pylint/checkers/design_analysis.py2
-rw-r--r--pylint/checkers/exceptions.py2
-rw-r--r--pylint/checkers/logging.py2
-rw-r--r--pylint/checkers/refactoring/refactoring_checker.py12
-rw-r--r--pylint/checkers/strings.py2
-rw-r--r--tests/functional/c/consider/consider_using_namedtuple.txt5
-rw-r--r--tests/functional/c/consider/consider_using_namedtuple_or_dataclass.py (renamed from tests/functional/c/consider/consider_using_namedtuple.py)10
-rw-r--r--tests/functional/c/consider/consider_using_namedtuple_or_dataclass.txt5
11 files changed, 25 insertions, 24 deletions
diff --git a/ChangeLog b/ChangeLog
index d1d7e736c..9f4bd8462 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -124,8 +124,8 @@ modules are added.
Closes #4509
Closes PyCQA/astroid#999
-* New checker ``consider-using-namedtuple``. Emitted when dictionary values can be replaced
- by namedtuples.
+* New checker ``consider-using-namedtuple-or-dataclass``. Emitted when dictionary values
+ can be replaced by namedtuples or dataclass instances.
* New checker ``invalid-all-format``. Emitted when ``__all__`` has an invalid format,
i.e. isn't a ``tuple`` or ``list``.
diff --git a/doc/whatsnew/2.9.rst b/doc/whatsnew/2.9.rst
index eb93e7d58..59ad255c0 100644
--- a/doc/whatsnew/2.9.rst
+++ b/doc/whatsnew/2.9.rst
@@ -31,7 +31,8 @@ New checkers
* New checker ``invalid-class-object``: Emitted when a non-class is assigned to a ``__class__`` attribute.
-* ``consider-using-namedtuple``: Emitted when dictionary values can be replaced by namedtuples.
+* ``consider-using-namedtuple-or-dataclass``: Emitted when dictionary values
+ can be replaced by namedtuples or dataclass instances.
* ``invalid-all-format``: Emitted when ``__all__`` has an invalid format,
i.e. isn't a ``tuple`` or ``list``.
diff --git a/pylint/checkers/classes.py b/pylint/checkers/classes.py
index e99e6a885..a8b94977a 100644
--- a/pylint/checkers/classes.py
+++ b/pylint/checkers/classes.py
@@ -499,7 +499,7 @@ def _has_same_layout_slots(slots, assigned_value):
return False
-MSGS = { # pylint: disable=consider-using-namedtuple
+MSGS = { # pylint: disable=consider-using-namedtuple-or-dataclass
"F0202": (
"Unable to check methods signature (%s / %s)",
"method-check-failed",
diff --git a/pylint/checkers/design_analysis.py b/pylint/checkers/design_analysis.py
index 5e9363f4c..c410fa86c 100644
--- a/pylint/checkers/design_analysis.py
+++ b/pylint/checkers/design_analysis.py
@@ -33,7 +33,7 @@ from pylint.checkers import BaseChecker
from pylint.checkers.utils import check_messages
from pylint.interfaces import IAstroidChecker
-MSGS = { # pylint: disable=consider-using-namedtuple
+MSGS = { # pylint: disable=consider-using-namedtuple-or-dataclass
"R0901": (
"Too many ancestors (%s/%s)",
"too-many-ancestors",
diff --git a/pylint/checkers/exceptions.py b/pylint/checkers/exceptions.py
index 3d604a5fc..6e483b390 100644
--- a/pylint/checkers/exceptions.py
+++ b/pylint/checkers/exceptions.py
@@ -79,7 +79,7 @@ def _is_raising(body: typing.List) -> bool:
OVERGENERAL_EXCEPTIONS = ("BaseException", "Exception")
BUILTINS_NAME = builtins.__name__
-MSGS = { # pylint: disable=consider-using-namedtuple
+MSGS = { # pylint: disable=consider-using-namedtuple-or-dataclass
"E0701": (
"Bad except clauses order (%s)",
"bad-except-order",
diff --git a/pylint/checkers/logging.py b/pylint/checkers/logging.py
index 263af5722..b44d41047 100644
--- a/pylint/checkers/logging.py
+++ b/pylint/checkers/logging.py
@@ -30,7 +30,7 @@ from pylint import checkers, interfaces
from pylint.checkers import utils
from pylint.checkers.utils import check_messages
-MSGS = { # pylint: disable=consider-using-namedtuple
+MSGS = { # pylint: disable=consider-using-namedtuple-or-dataclass
"W1201": (
"Use %s formatting in logging functions",
"logging-not-lazy",
diff --git a/pylint/checkers/refactoring/refactoring_checker.py b/pylint/checkers/refactoring/refactoring_checker.py
index 0fdcd0060..21d153530 100644
--- a/pylint/checkers/refactoring/refactoring_checker.py
+++ b/pylint/checkers/refactoring/refactoring_checker.py
@@ -356,9 +356,9 @@ class RefactoringChecker(checkers.BaseTokenChecker):
"The value can be accessed directly instead.",
),
"R1734": (
- "Consider using namedtuple for dictionary values",
- "consider-using-namedtuple",
- "Emitted when dictionary values can be replaced by namedtuples.",
+ "Consider using namedtuple or dataclass for dictionary values",
+ "consider-using-namedtuple-or-dataclass",
+ "Emitted when dictionary values can be replaced by namedtuples or dataclass instances.",
),
}
options = (
@@ -1763,7 +1763,7 @@ class RefactoringChecker(checkers.BaseTokenChecker):
args=("1".join(value.as_string().rsplit("0", maxsplit=1)),),
)
- @utils.check_messages("consider-using-namedtuple")
+ @utils.check_messages("consider-using-namedtuple-or-dataclass")
def visit_dict(self, node: astroid.Dict) -> None:
self._check_dict_consider_namedtuple(node)
@@ -1812,7 +1812,7 @@ class RefactoringChecker(checkers.BaseTokenChecker):
if not keys_intersection:
return
- self.add_message("consider-using-namedtuple", node=node)
+ self.add_message("consider-using-namedtuple-or-dataclass", node=node)
return
# All dict_values are itself either list or tuple nodes
@@ -1833,5 +1833,5 @@ class RefactoringChecker(checkers.BaseTokenChecker):
if all(isinstance(entry, astroid.Dict) for entry in dict_value.elts):
return
- self.add_message("consider-using-namedtuple", node=node)
+ self.add_message("consider-using-namedtuple-or-dataclass", node=node)
return
diff --git a/pylint/checkers/strings.py b/pylint/checkers/strings.py
index c4633b058..cb00acea7 100644
--- a/pylint/checkers/strings.py
+++ b/pylint/checkers/strings.py
@@ -82,7 +82,7 @@ SINGLE_QUOTED_REGEX = re.compile("(%s)?'''" % "|".join(_PREFIXES))
DOUBLE_QUOTED_REGEX = re.compile('(%s)?"""' % "|".join(_PREFIXES))
QUOTE_DELIMITER_REGEX = re.compile("(%s)?(\"|')" % "|".join(_PREFIXES), re.DOTALL)
-MSGS = { # pylint: disable=consider-using-namedtuple
+MSGS = { # pylint: disable=consider-using-namedtuple-or-dataclass
"E1300": (
"Unsupported format character %r (%#02x) at index %d",
"bad-format-character",
diff --git a/tests/functional/c/consider/consider_using_namedtuple.txt b/tests/functional/c/consider/consider_using_namedtuple.txt
deleted file mode 100644
index 3abb72f5f..000000000
--- a/tests/functional/c/consider/consider_using_namedtuple.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-consider-using-namedtuple:11:12::Consider using namedtuple for dictionary values
-consider-using-namedtuple:15:12::Consider using namedtuple for dictionary values
-consider-using-namedtuple:34:23:func:Consider using namedtuple for dictionary values
-consider-using-namedtuple:41:12::Consider using namedtuple for dictionary values
-consider-using-namedtuple:53:12::Consider using namedtuple for dictionary values
diff --git a/tests/functional/c/consider/consider_using_namedtuple.py b/tests/functional/c/consider/consider_using_namedtuple_or_dataclass.py
index 1bc150430..627de7684 100644
--- a/tests/functional/c/consider/consider_using_namedtuple.py
+++ b/tests/functional/c/consider/consider_using_namedtuple_or_dataclass.py
@@ -8,11 +8,11 @@ KEY_3 = "key_3"
# Subdicts have at least 1 common key
-MAPPING_1 = { # [consider-using-namedtuple]
+MAPPING_1 = { # [consider-using-namedtuple-or-dataclass]
"entry_1": {"key_1": 0, "key_2": 1, "key_diff_1": 2},
"entry_2": {"key_1": 0, "key_2": 1, "key_diff_2": 3},
}
-MAPPING_2 = { # [consider-using-namedtuple]
+MAPPING_2 = { # [consider-using-namedtuple-or-dataclass]
"entry_1": {KEY_3: None, Foo.BAR: None},
"entry_2": {KEY_3: None, Foo.BAR: None},
}
@@ -31,14 +31,14 @@ def func():
"entry_2": {"key_1": 0, "key_2": 1},
}
- mapping_5: Final = { # [consider-using-namedtuple]
+ mapping_5: Final = { # [consider-using-namedtuple-or-dataclass]
"entry_1": {"key_1": 0, "key_2": 1},
"entry_2": {"key_1": 0, "key_2": 1},
}
# lists must have the same length
-MAPPING_6 = { # [consider-using-namedtuple]
+MAPPING_6 = { # [consider-using-namedtuple-or-dataclass]
"entry_1": [1, "a", set()],
"entry_2": [2, "b", set()],
}
@@ -50,7 +50,7 @@ MAPPING_8 = {
"entry_1": [1],
"entry_2": [2, "b"],
}
-MAPPING_9 = { # [consider-using-namedtuple]
+MAPPING_9 = { # [consider-using-namedtuple-or-dataclass]
"entry_1": (1, "a"),
"entry_2": (2, "b"),
}
diff --git a/tests/functional/c/consider/consider_using_namedtuple_or_dataclass.txt b/tests/functional/c/consider/consider_using_namedtuple_or_dataclass.txt
new file mode 100644
index 000000000..6c471db96
--- /dev/null
+++ b/tests/functional/c/consider/consider_using_namedtuple_or_dataclass.txt
@@ -0,0 +1,5 @@
+consider-using-namedtuple-or-dataclass:11:12::Consider using namedtuple or dataclass for dictionary values
+consider-using-namedtuple-or-dataclass:15:12::Consider using namedtuple or dataclass for dictionary values
+consider-using-namedtuple-or-dataclass:34:23:func:Consider using namedtuple or dataclass for dictionary values
+consider-using-namedtuple-or-dataclass:41:12::Consider using namedtuple or dataclass for dictionary values
+consider-using-namedtuple-or-dataclass:53:12::Consider using namedtuple or dataclass for dictionary values