diff --git a/crates/ruff_linter/resources/test/fixtures/refurb/FURB116.py b/crates/ruff_linter/resources/test/fixtures/refurb/FURB116.py index 9c968e32aa..b95f9147e7 100644 --- a/crates/ruff_linter/resources/test/fixtures/refurb/FURB116.py +++ b/crates/ruff_linter/resources/test/fixtures/refurb/FURB116.py @@ -17,3 +17,8 @@ print(bin(int(f"{num}"))[2:]) # FURB116 (no autofix) ## invalid print(oct(0o1337)[1:]) print(hex(0x1337)[3:]) + +# https://github.com/astral-sh/ruff/issues/16472 +# float and complex numbers should be ignored +print(bin(1.0)[2:]) +print(bin(3.14j)[2:]) diff --git a/crates/ruff_linter/src/rules/refurb/rules/fstring_number_format.rs b/crates/ruff_linter/src/rules/refurb/rules/fstring_number_format.rs index d71772e6de..0d18e8d06f 100644 --- a/crates/ruff_linter/src/rules/refurb/rules/fstring_number_format.rs +++ b/crates/ruff_linter/src/rules/refurb/rules/fstring_number_format.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Edit, Fix, FixAvailability, Violation}; use ruff_macros::{derive_message_formats, ViolationMetadata}; -use ruff_python_ast::{self as ast, Expr, ExprCall}; +use ruff_python_ast::{self as ast, Expr, ExprCall, Number}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -110,6 +110,17 @@ pub(crate) fn fstring_number_format(checker: &Checker, subscript: &ast::ExprSubs return; }; + // float and complex numbers are false positives, ignore them. + if matches!( + arg, + Expr::NumberLiteral(ast::ExprNumberLiteral { + value: Number::Float(_) | Number::Complex { .. }, + .. + }) + ) { + return; + } + // Generate a replacement, if possible. let replacement = if matches!( arg,