From 29caa90d7039a0f9a17717a137a74b83b901c4b0 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Fri, 13 Oct 2023 17:13:42 -0400 Subject: [PATCH] Add trailing zero between dot and exponential --- .../test/fixtures/ruff/expression/number.py | 7 +++++ .../src/expression/number.rs | 13 +++++---- .../format@expression__number.py.snap | 28 +++++++++++++++++++ 3 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/number.py create mode 100644 crates/ruff_python_formatter/tests/snapshots/format@expression__number.py.snap diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/number.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/number.py new file mode 100644 index 0000000000000..afed916b61aa5 --- /dev/null +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/number.py @@ -0,0 +1,7 @@ +.1 +1. +1E+1 +1E-1 +1.E+1 +1.0E+1 +1.1E+1 diff --git a/crates/ruff_python_formatter/src/expression/number.rs b/crates/ruff_python_formatter/src/expression/number.rs index 130640f48ff1a..7583bfd5cf0a2 100644 --- a/crates/ruff_python_formatter/src/expression/number.rs +++ b/crates/ruff_python_formatter/src/expression/number.rs @@ -142,7 +142,7 @@ fn normalize_floating_number(input: &str) -> Cow { let mut chars = input.char_indices(); - let fraction_ends_with_dot = if let Some((index, '.')) = chars.next() { + let mut prev_char_is_dot = if let Some((index, '.')) = chars.next() { // Add a leading `0` if `input` starts with `.`. output.push('0'); output.push('.'); @@ -155,8 +155,8 @@ fn normalize_floating_number(input: &str) -> Cow { loop { match chars.next() { Some((index, c @ ('e' | 'E'))) => { - if fraction_ends_with_dot { - // Add `0` if fraction part ends with `.`. + if prev_char_is_dot { + // Add `0` if the `e` immediately follows a `.` (e.g., `1.e1`). output.push_str(&input[last_index..index]); output.push('0'); last_index = index; @@ -177,9 +177,12 @@ fn normalize_floating_number(input: &str) -> Cow { break; } - Some(_) => continue, + Some((_index, c)) => { + prev_char_is_dot = c == '.'; + continue; + } None => { - if input.ends_with('.') { + if prev_char_is_dot { // Add `0` if fraction part ends with `.`. output.push_str(&input[last_index..]); output.push('0'); diff --git a/crates/ruff_python_formatter/tests/snapshots/format@expression__number.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@expression__number.py.snap new file mode 100644 index 0000000000000..feea8103e080f --- /dev/null +++ b/crates/ruff_python_formatter/tests/snapshots/format@expression__number.py.snap @@ -0,0 +1,28 @@ +--- +source: crates/ruff_python_formatter/tests/fixtures.rs +input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/number.py +--- +## Input +```py +.1 +1. +1E+1 +1E-1 +1.E+1 +1.0E+1 +1.1E+1 +``` + +## Output +```py +0.1 +1.0 +1e1 +1e-1 +1.0e1 +1.0e1 +1.1e1 +``` + + +