diff --git a/doc/whatsnew/fragments/10435.false_positive b/doc/whatsnew/fragments/10435.false_positive new file mode 100644 index 0000000000..0ad1a29cb0 --- /dev/null +++ b/doc/whatsnew/fragments/10435.false_positive @@ -0,0 +1,3 @@ +Add Enum dunder methods ``_generate_next_value_``, ``_missing_``, ``_numeric_repr_``, ``_add_alias_``, and ``_add_value_alias_`` to the list passed to ``--good-dunder-names``. + +Closes #10435 diff --git a/pylint/constants.py b/pylint/constants.py index c48fe7af0e..6a2481913b 100644 --- a/pylint/constants.py +++ b/pylint/constants.py @@ -219,26 +219,31 @@ def _get_pylint_home() -> str: "__anext__": "Use anext built-in function", }, } - -EXTRA_DUNDER_METHODS = [ - "__new__", - "__subclasses__", - "__init_subclass__", - "__set_name__", - "__class_getitem__", - "__missing__", - "__exit__", - "__await__", - "__aexit__", - "__getnewargs_ex__", - "__getnewargs__", - "__getstate__", - "__index__", - "__setstate__", - "__reduce__", - "__reduce_ex__", - "__post_init__", # part of `dataclasses` module -] +EXTRA_DUNDER_METHODS: dict[tuple[int, int], list[str]] = { + (0, 0): [ + "__new__", + "__subclasses__", + "__init_subclass__", + "__set_name__", + "__class_getitem__", + "__missing__", + "__exit__", + "__await__", + "__aexit__", + "__getnewargs_ex__", + "__getnewargs__", + "__getstate__", + "__index__", + "__setstate__", + "__reduce__", + "__reduce_ex__", + "__post_init__", # part of `dataclasses` module + "_generate_next_value_", + "_missing_", + "_numeric_repr_", + ], + (3, 13): ["_add_alias_", "_add_value_alias_"], +} DUNDER_PROPERTIES = [ "__class__", diff --git a/pylint/extensions/dunder.py b/pylint/extensions/dunder.py index 1683f81476..4d0fd65d65 100644 --- a/pylint/extensions/dunder.py +++ b/pylint/extensions/dunder.py @@ -41,11 +41,10 @@ class DunderChecker(BaseChecker): ) def open(self) -> None: - self._dunder_methods = ( - EXTRA_DUNDER_METHODS - + DUNDER_PROPERTIES - + self.linter.config.good_dunder_names - ) + self._dunder_methods = DUNDER_PROPERTIES + self.linter.config.good_dunder_names + for since_vers, extra_dunder_methods in EXTRA_DUNDER_METHODS.items(): + if since_vers <= self.linter.config.py_version: + self._dunder_methods.extend(extra_dunder_methods) for since_vers, dunder_methods in DUNDER_METHODS.items(): if since_vers <= self.linter.config.py_version: self._dunder_methods.extend(list(dunder_methods.keys()))