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 negatives for consider-using-min-builtin/consider-using-max-builtin #8947

Closed
EugeneZelenko opened this issue Aug 11, 2023 · 5 comments · Fixed by #9127 or #9461
Closed

False negatives for consider-using-min-builtin/consider-using-max-builtin #8947

EugeneZelenko opened this issue Aug 11, 2023 · 5 comments · Fixed by #9127 or #9461
Assignees
Labels
False Negative 🦋 No message is emitted but something is wrong with the code Good first issue Friendly and approachable by new contributors Help wanted 🙏 Outside help would be appreciated, good for new contributors Needs PR This issue is accepted, sufficiently specified and now needs an implementation
Milestone

Comments

@EugeneZelenko
Copy link

Bug description

consider-using-min-builtin/consider-using-max-builtin did not catch next situations:

value = 5
max_value = 10

if value > max_value:
    max_value = value

if value > float(max_value):
    value = float(max_value)

Configuration

No response

Command used

pylint --load-plugins=pylint.extensions.code_style --enable=all test.py

Pylint output

************* Module pylint_test
pylint_test.py:1:0: C0114: Missing module docstring (missing-module-docstring)
pylint_test.py:1:0: C0103: Constant name "value" doesn't conform to UPPER_CASE naming style (invalid-name)
pylint_test.py:2:0: C0103: Constant name "max_value" doesn't conform to UPPER_CASE naming style (invalid-name)
pylint_test.py:5:4: C0103: Constant name "max_value" doesn't conform to UPPER_CASE naming style (invalid-name)

-------------------------------------------------------------------
Your code has been rated at 3.33/10 (previous run: 10.00/10, -6.67)

Expected behavior

First if statement should be suggested to be replaced with max_value = max(max_value, value).

Second - with value = min(value, float(max_value)).

Pylint version

pylint 2.17.4
astroid 2.15.5
Python 3.11.4 (main, Jun 26 2023, 16:57:25) [GCC 7.5.0]

OS / Environment

No response

Additional dependencies

No response

@EugeneZelenko EugeneZelenko added the Needs triage 📥 Just created, needs acknowledgment, triage, and proper labelling label Aug 11, 2023
@EugeneZelenko
Copy link
Author

Same for

if value < min_value:
    min_value = value

@Pierre-Sassoulas Pierre-Sassoulas added False Negative 🦋 No message is emitted but something is wrong with the code Needs PR This issue is accepted, sufficiently specified and now needs an implementation and removed Needs triage 📥 Just created, needs acknowledgment, triage, and proper labelling labels Aug 11, 2023
@Pierre-Sassoulas
Copy link
Member

Thank you for opening the issue, I can reproduce on main.

@EugeneZelenko
Copy link
Author

Another example found it the wild:

offset = 1
if offset + value < min_value:
    min_value = offset + value

Could be generalized to arbitrary expression.

@Pierre-Sassoulas Pierre-Sassoulas added Help wanted 🙏 Outside help would be appreciated, good for new contributors Good first issue Friendly and approachable by new contributors labels Aug 11, 2023
@rhyn0
Copy link
Contributor

rhyn0 commented Oct 5, 2023

If no one else wants to work on this, could I be assigned it?

@Pierre-Sassoulas
Copy link
Member

Sure, thank you for working on it !

@Pierre-Sassoulas Pierre-Sassoulas added this to the 3.1.0 milestone Oct 7, 2023
netbsd-srcmastr referenced this issue in NetBSD/pkgsrc 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>`_)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
False Negative 🦋 No message is emitted but something is wrong with the code Good first issue Friendly and approachable by new contributors Help wanted 🙏 Outside help would be appreciated, good for new contributors Needs PR This issue is accepted, sufficiently specified and now needs an implementation
Projects
None yet
3 participants