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

New check: use yield from #9229

Closed
nickdrozd opened this issue Nov 11, 2023 · 0 comments · Fixed by #9419 or #9461
Closed

New check: use yield from #9229

nickdrozd opened this issue Nov 11, 2023 · 0 comments · Fixed by #9419 or #9461
Labels
Enhancement ✨ Improvement to a component Good first issue Friendly and approachable by new contributors
Milestone

Comments

@nickdrozd
Copy link
Collaborator

Current problem

Yielding item by item from a generator:

for item in generator:
    yield item

Desired solution

It is cleaner and maybe even a little faster to use yield from:

yield from generator

This should be an easy check to implement.

Additional context

Note that yield from does a lot more than just iterate.

@nickdrozd nickdrozd added Enhancement ✨ Improvement to a component Good first issue Friendly and approachable by new contributors labels Nov 11, 2023
crazybolillo added a commit to crazybolillo/pylint that referenced this issue Feb 7, 2024
A new message has been added to suggest refactoring when yielding from a
for loop can be replaced by 'yield from'. This message is only emitted
when there are no other statements in the containing for loop.

Closes pylint-dev#9229.
crazybolillo added a commit to crazybolillo/pylint that referenced this issue Feb 8, 2024
A new message has been added to suggest refactoring when yielding from a
for loop can be replaced by 'yield from'. This message is only emitted
when there are no other statements in the containing for loop.

Closes pylint-dev#9229.
crazybolillo added a commit to crazybolillo/pylint that referenced this issue Feb 10, 2024
A new message has been added to suggest refactoring when yielding from a
for loop can be replaced by 'yield from'. This message is only emitted
when there are no other statements in the containing for loop.

Closes pylint-dev#9229.
@Pierre-Sassoulas Pierre-Sassoulas added this to the 3.1.0 milestone Feb 10, 2024
Pierre-Sassoulas pushed a commit that referenced this issue Feb 11, 2024
Suggest refactoring when yielding from a for loop can be replaced by 
'yield from'. This message is only emitted when there are no other 
statements in the containing for loop.

There are too many possible generators to use in a for loop and handling
all the cases to provide a human friendly display name in emitted
messages seems too cumbersome compared to the benefit it brings,
specially considering this message will have a doc page with examples.

It is invalid to use 'yield from' in async functions. Replacing yielding
from an 'async for' loop may not be the same as using 'yield from' so
the message won't be emitted for async loops as well.

Closes #9229
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Mar 3, 2024
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>`_)
pmisik added a commit to pmisik/buildbot that referenced this issue Mar 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement ✨ Improvement to a component Good first issue Friendly and approachable by new contributors
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants