Add trailing zero between dot and exponential (#7956)

Closes https://github.com/astral-sh/ruff/issues/7952.
This commit is contained in:
Charlie Marsh 2023-10-15 21:42:00 -04:00 committed by GitHub
parent 3d03e75a9d
commit aa6846c78c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 5 deletions

View file

@ -0,0 +1,7 @@
.1
1.
1E+1
1E-1
1.E+1
1.0E+1
1.1E+1

View file

@ -142,7 +142,7 @@ fn normalize_floating_number(input: &str) -> Cow<str> {
let mut chars = input.char_indices(); 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 `.`. // Add a leading `0` if `input` starts with `.`.
output.push('0'); output.push('0');
output.push('.'); output.push('.');
@ -155,8 +155,8 @@ fn normalize_floating_number(input: &str) -> Cow<str> {
loop { loop {
match chars.next() { match chars.next() {
Some((index, c @ ('e' | 'E'))) => { Some((index, c @ ('e' | 'E'))) => {
if fraction_ends_with_dot { if prev_char_is_dot {
// Add `0` if fraction part ends with `.`. // Add `0` if the `e` immediately follows a `.` (e.g., `1.e1`).
output.push_str(&input[last_index..index]); output.push_str(&input[last_index..index]);
output.push('0'); output.push('0');
last_index = index; last_index = index;
@ -177,9 +177,12 @@ fn normalize_floating_number(input: &str) -> Cow<str> {
break; break;
} }
Some(_) => continue, Some((_index, c)) => {
prev_char_is_dot = c == '.';
continue;
}
None => { None => {
if input.ends_with('.') { if prev_char_is_dot {
// Add `0` if fraction part ends with `.`. // Add `0` if fraction part ends with `.`.
output.push_str(&input[last_index..]); output.push_str(&input[last_index..]);
output.push('0'); output.push('0');

View file

@ -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
```