mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-29 13:25:17 +00:00

This PR extends the Decimal parsing used in [verbose-decimal-constructor (FURB157)](https://docs.astral.sh/ruff/rules/verbose-decimal-constructor/) to better handle non-finite `Decimal` objects, avoiding some false negatives. Closes #14587 --------- Co-authored-by: Micha Reiser <micha@reiser.io>
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
import decimal
|
|
from decimal import Decimal
|
|
|
|
# Errors
|
|
Decimal("0")
|
|
Decimal("-42")
|
|
Decimal(float("Infinity"))
|
|
Decimal(float("-Infinity"))
|
|
Decimal(float("inf"))
|
|
Decimal(float("-inf"))
|
|
Decimal(float("nan"))
|
|
decimal.Decimal("0")
|
|
|
|
# OK
|
|
Decimal(0)
|
|
Decimal("Infinity")
|
|
decimal.Decimal(0)
|
|
|
|
# Handle Python's Decimal parsing
|
|
# See https://github.com/astral-sh/ruff/issues/13807
|
|
|
|
# Errors
|
|
Decimal("1_000")
|
|
Decimal("__1____000")
|
|
|
|
# Ok
|
|
Decimal("2e-4")
|
|
Decimal("2E-4")
|
|
Decimal("_1.234__")
|
|
Decimal("2e4")
|
|
Decimal("2e+4")
|
|
Decimal("2E4")
|
|
Decimal("1.2")
|
|
# Ok: even though this is equal to `Decimal(123)`,
|
|
# we assume that a developer would
|
|
# only write it this way if they meant to.
|
|
Decimal("١٢٣")
|
|
|
|
# Further subtleties
|
|
# https://github.com/astral-sh/ruff/issues/14204
|
|
Decimal("-0") # Ok
|
|
Decimal("_") # Ok
|
|
Decimal(" ") # Ok
|
|
Decimal("10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") # Ok
|
|
|
|
# Non-finite variants
|
|
# https://github.com/astral-sh/ruff/issues/14587
|
|
Decimal(float(" nan ")) # Decimal(" nan ")
|
|
Decimal(float(" +nan ")) # Decimal(" +nan ")
|
|
# In this one case, " -nan ", the fix has to be
|
|
# `Decimal(" nan ")`` because `Decimal("-nan") != Decimal(float("-nan"))`
|
|
Decimal(float(" -nan ")) # Decimal(" nan ")
|
|
Decimal(float(" inf ")) # Decimal(" inf ")
|
|
Decimal(float(" +inf ")) # Decimal(" +inf ")
|
|
Decimal(float(" -inf ")) # Decimal(" -inf ")
|
|
Decimal(float(" infinity ")) # Decimal(" infinity ")
|
|
Decimal(float(" +infinity ")) # Decimal(" +infinity ")
|
|
Decimal(float(" -infinity ")) # Decimal(" -infinity ")
|