Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

False positive inherit-non-class when inheriting a generic Protocol #9106

Closed
KholdStare opened this issue Oct 3, 2023 · 1 comment · Fixed by #9108 or #9461
Closed

False positive inherit-non-class when inheriting a generic Protocol #9106

KholdStare opened this issue Oct 3, 2023 · 1 comment · Fixed by #9108 or #9461
Assignees
Labels
False Positive 🦟 A message is emitted but nothing is wrong with the code Regression
Milestone

Comments

@KholdStare
Copy link

KholdStare commented Oct 3, 2023

Bug description

In the official Protocol PEP, inheriting directly from a protocol is ok: https://peps.python.org/pep-0544/#explicitly-declaring-implementation

However pylint 3 complains about inheriting from a generic protocol such as below:

class Channel(Protocol[T]):
    """A communication channel between nodes that can be closed"""

    async def get(self) -> T:
        """Raises GeneratorExit when no more values are available"""

    async def put(self, value: T):
        ...

    async def close(self) -> None:
        ...


class DirectChannel(Channel[T]):
    # etc..

Configuration

No response

Command used

pylint .

Pylint output

************* Module uflow.channel
src/uflow/channel.py:115:0: E0239: Inheriting 'Channel[T]', which is not a class. (inherit-non-class)
src/uflow/channel.py:158:0: E0239: Inheriting 'Channel[T]', which is not a class. (inherit-non-class)

Expected behavior

This should not be an error.

Pylint version

pylint 3.0.0
astroid 3.0.0
Python 3.10.10 (main, Aug 24 2023, 21:59:21) [GCC 10.2.1 20210110]

OS / Environment

No response

Additional dependencies

No response

@KholdStare KholdStare added the Needs triage 📥 Just created, needs acknowledgment, triage, and proper labelling label Oct 3, 2023
@theCapypara
Copy link

Can confirm, running into the same issue with Pylint 3. Was fine before.

@DanielNoord DanielNoord self-assigned this Oct 3, 2023
@DanielNoord DanielNoord added Needs review 🔍 Needs to be reviewed by one or multiple more persons Regression False Positive 🦟 A message is emitted but nothing is wrong with the code and removed Needs triage 📥 Just created, needs acknowledgment, triage, and proper labelling labels Oct 3, 2023
@DanielNoord DanielNoord added this to the 3.0.1 milestone Oct 3, 2023
@Pierre-Sassoulas Pierre-Sassoulas removed the Needs review 🔍 Needs to be reviewed by one or multiple more persons label Oct 5, 2023
netbsd-srcmastr referenced this issue in NetBSD/pkgsrc Mar 3, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
New Features
------------

- Skip ``consider-using-join`` check for non-empty separators if an ``suggest-join-with-non-empty-separator`` option is set to ``no``.

  Closes #8701 (`#8701 <https://github.com/pylint-dev/pylint/issues/8701>`_)

- Discover ``.pyi`` files when linting.

  These can be ignored with the ``ignore-patterns`` setting.

  Closes #9097 (`#9097 <https://github.com/pylint-dev/pylint/issues/9097>`_)

- Check ``TypeAlias`` and ``TypeVar`` (PEP 695) nodes for ``invalid-name``.

  Refs #9196 (`#9196 <https://github.com/pylint-dev/pylint/issues/9196>`_)

- Support for resolving external toml files named pylintrc.toml and .pylintrc.toml.

  Closes #9228 (`#9228 <https://github.com/pylint-dev/pylint/issues/9228>`_)

- Check for `.clear`, `.discard`, `.pop` and `remove` methods being called on a set while it is being iterated over.

  Closes #9334 (`#9334 <https://github.com/pylint-dev/pylint/issues/9334>`_)



New Checks
----------

- New message `use-yield-from` added to the refactoring checker. This message is emitted when yielding from a loop can be replaced by `yield from`.

  Closes #9229. (`#9229 <https://github.com/pylint-dev/pylint/issues/9229>`_)

- Added a ``deprecated-attribute`` message to check deprecated attributes in the stdlib.

  Closes #8855 (`#8855 <https://github.com/pylint-dev/pylint/issues/8855>`_)


False Positives Fixed
---------------------

- Fixed false positive for ``inherit-non-class`` for generic Protocols.

  Closes #9106 (`#9106 <https://github.com/pylint-dev/pylint/issues/9106>`_)

- Exempt ``TypedDict`` from ``typing_extensions`` from ``too-many-ancestor`` checks.

  Refs #9167 (`#9167 <https://github.com/pylint-dev/pylint/issues/9167>`_)



False Negatives Fixed
---------------------

- Extend broad-exception-raised and broad-exception-caught to except*.

  Closes #8827 (`#8827 <https://github.com/pylint-dev/pylint/issues/8827>`_)

- Fix a false-negative for unnecessary if blocks using a different than expected ordering of arguments.

  Closes #8947. (`#8947 <https://github.com/pylint-dev/pylint/issues/8947>`_)



Other Bug Fixes
---------------

- Improve the message provided for wrong-import-order check.  Instead of the import statement ("import x"), the message now specifies the import that is out of order and which imports should come after it.  As reported in the issue, this is particularly helpful if there are multiple imports on a single line that do not follow the PEP8 convention.

  The message will report imports as follows:
  For "import X", it will report "(standard/third party/first party/local) import X"
  For "import X.Y" and "from X import Y", it will report "(standard/third party/first party/local) import X.Y"
  The import category is specified to provide explanation as to why pylint has issued the message and guidence to the developer on how to fix the problem.

  Closes #8808 (`#8808 <https://github.com/pylint-dev/pylint/issues/8808>`_)



Other Changes
-------------

- Print how many files were checked in verbose mode.

  Closes #8935 (`#8935 <https://github.com/pylint-dev/pylint/issues/8935>`_)

- Fix a crash when an enum class which is also decorated with a ``dataclasses.dataclass`` decorator is defined.

  Closes #9100 (`#9100 <https://github.com/pylint-dev/pylint/issues/9100>`_)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
False Positive 🦟 A message is emitted but nothing is wrong with the code Regression
Projects
None yet
4 participants