summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mueller <30130371+cdce8p@users.noreply.github.com>2021-03-05 15:24:54 +0100
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-03-06 13:59:56 +0100
commita7d37d22041bdf7a28631f42ea86a4a06ba35e24 (patch)
tree0bfc8c68d1c57eb969213ff0060deef2ee8c4055
parentc85d202a235a0b353c0f2bec3f02760f3643e52c (diff)
downloadpylint-git-a7d37d22041bdf7a28631f42ea86a4a06ba35e24.tar.gz
Exempt TypedDict from too-few-public-methods check
-rw-r--r--ChangeLog4
-rw-r--r--pylint/checkers/design_analysis.py5
-rw-r--r--tests/functional/t/typedDict.py2
3 files changed, 8 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index b9e49d81f..090003a4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -29,6 +29,10 @@ Release date: TBA
Closes #4161
+* Exempt ``typing.TypedDict`` from ``too-few-public-methods`` check.
+
+ Closes #4180
+
What's New in Pylint 2.7.2?
===========================
diff --git a/pylint/checkers/design_analysis.py b/pylint/checkers/design_analysis.py
index d2a9d3d01..9fc864aca 100644
--- a/pylint/checkers/design_analysis.py
+++ b/pylint/checkers/design_analysis.py
@@ -95,16 +95,17 @@ SPECIAL_OBJ = re.compile("^_{2}[a-z]+_{2}$")
DATACLASSES_DECORATORS = frozenset({"dataclass", "attrs"})
DATACLASS_IMPORT = "dataclasses"
TYPING_NAMEDTUPLE = "typing.NamedTuple"
+TYPING_TYPEDDICT = "typing.TypedDict"
def _is_exempt_from_public_methods(node: astroid.ClassDef) -> bool:
"""Check if a class is exempt from too-few-public-methods"""
- # If it's a typing.Namedtuple or an Enum
+ # If it's a typing.Namedtuple, typing.TypedDict or an Enum
for ancestor in node.ancestors():
if ancestor.name == "Enum" and ancestor.root().name == "enum":
return True
- if ancestor.qname() == TYPING_NAMEDTUPLE:
+ if ancestor.qname() in (TYPING_NAMEDTUPLE, TYPING_TYPEDDICT):
return True
# Or if it's a dataclass
diff --git a/tests/functional/t/typedDict.py b/tests/functional/t/typedDict.py
index 9fdcee2ee..912a4eae6 100644
--- a/tests/functional/t/typedDict.py
+++ b/tests/functional/t/typedDict.py
@@ -1,5 +1,5 @@
"""Test typing.TypedDict"""
-# pylint: disable=invalid-name,missing-class-docstring,too-few-public-methods
+# pylint: disable=invalid-name,missing-class-docstring
import typing
from typing import TypedDict