mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 13:51:16 +00:00
[ruff
] Fix syntax error introduced for an empty string followed by a u-prefixed string (UP025
) (#18899)
## Summary /closes #18895 ## Test Plan --------- Co-authored-by: Brent Westbrook <36778786+ntBre@users.noreply.github.com>
This commit is contained in:
parent
dac4e356eb
commit
667dc62038
3 changed files with 111 additions and 5 deletions
|
@ -26,3 +26,9 @@ def hello():
|
|||
|
||||
f"foo"u"bar" # OK
|
||||
f"foo" u"bar" # OK
|
||||
|
||||
# https://github.com/astral-sh/ruff/issues/18895
|
||||
""u""
|
||||
""u"hi"
|
||||
""""""""""""""""""""u"hi"
|
||||
""U"helloooo"
|
|
@ -42,9 +42,28 @@ impl AlwaysFixableViolation for UnicodeKindPrefix {
|
|||
pub(crate) fn unicode_kind_prefix(checker: &Checker, string: &StringLiteral) {
|
||||
if string.flags.prefix().is_unicode() {
|
||||
let mut diagnostic = checker.report_diagnostic(UnicodeKindPrefix, string.range);
|
||||
diagnostic.set_fix(Fix::safe_edit(Edit::range_deletion(TextRange::at(
|
||||
string.start(),
|
||||
TextSize::from(1),
|
||||
))));
|
||||
|
||||
let prefix_range = TextRange::at(string.start(), TextSize::new(1));
|
||||
let locator = checker.locator();
|
||||
let content = locator
|
||||
.slice(TextRange::new(prefix_range.end(), string.end()))
|
||||
.to_owned();
|
||||
|
||||
// If the preceding character is equivalent to the quote character, insert a space to avoid a
|
||||
// syntax error. For example, when removing the `u` prefix in `""u""`, rewrite to `"" ""`
|
||||
// instead of `""""`.
|
||||
// see https://github.com/astral-sh/ruff/issues/18895
|
||||
let edit = if locator
|
||||
.slice(TextRange::up_to(prefix_range.start()))
|
||||
.chars()
|
||||
.last()
|
||||
.is_some_and(|char| content.starts_with(char))
|
||||
{
|
||||
Edit::range_replacement(" ".to_string(), prefix_range)
|
||||
} else {
|
||||
Edit::range_deletion(prefix_range)
|
||||
};
|
||||
|
||||
diagnostic.set_fix(Fix::safe_edit(edit));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -283,12 +283,16 @@ UP025.py:27:7: UP025 [*] Remove unicode literals from strings
|
|||
27 |-f"foo"u"bar" # OK
|
||||
27 |+f"foo" "bar" # OK
|
||||
28 28 | f"foo" u"bar" # OK
|
||||
29 29 |
|
||||
30 30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
|
||||
UP025.py:28:8: UP025 [*] Remove unicode literals from strings
|
||||
|
|
||||
27 | f"foo"u"bar" # OK
|
||||
28 | f"foo" u"bar" # OK
|
||||
| ^^^^^^ UP025
|
||||
29 |
|
||||
30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
|
|
||||
= help: Remove unicode prefix
|
||||
|
||||
|
@ -298,3 +302,80 @@ UP025.py:28:8: UP025 [*] Remove unicode literals from strings
|
|||
27 27 | f"foo"u"bar" # OK
|
||||
28 |-f"foo" u"bar" # OK
|
||||
28 |+f"foo" "bar" # OK
|
||||
29 29 |
|
||||
30 30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
31 31 | ""u""
|
||||
|
||||
UP025.py:31:3: UP025 [*] Remove unicode literals from strings
|
||||
|
|
||||
30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
31 | ""u""
|
||||
| ^^^ UP025
|
||||
32 | ""u"hi"
|
||||
33 | """"""""""""""""""""u"hi"
|
||||
|
|
||||
= help: Remove unicode prefix
|
||||
|
||||
ℹ Safe fix
|
||||
28 28 | f"foo" u"bar" # OK
|
||||
29 29 |
|
||||
30 30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
31 |-""u""
|
||||
31 |+"" ""
|
||||
32 32 | ""u"hi"
|
||||
33 33 | """"""""""""""""""""u"hi"
|
||||
34 34 | ""U"helloooo"
|
||||
|
||||
UP025.py:32:3: UP025 [*] Remove unicode literals from strings
|
||||
|
|
||||
30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
31 | ""u""
|
||||
32 | ""u"hi"
|
||||
| ^^^^^ UP025
|
||||
33 | """"""""""""""""""""u"hi"
|
||||
34 | ""U"helloooo"
|
||||
|
|
||||
= help: Remove unicode prefix
|
||||
|
||||
ℹ Safe fix
|
||||
29 29 |
|
||||
30 30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
31 31 | ""u""
|
||||
32 |-""u"hi"
|
||||
32 |+"" "hi"
|
||||
33 33 | """"""""""""""""""""u"hi"
|
||||
34 34 | ""U"helloooo"
|
||||
|
||||
UP025.py:33:21: UP025 [*] Remove unicode literals from strings
|
||||
|
|
||||
31 | ""u""
|
||||
32 | ""u"hi"
|
||||
33 | """"""""""""""""""""u"hi"
|
||||
| ^^^^^ UP025
|
||||
34 | ""U"helloooo"
|
||||
|
|
||||
= help: Remove unicode prefix
|
||||
|
||||
ℹ Safe fix
|
||||
30 30 | # https://github.com/astral-sh/ruff/issues/18895
|
||||
31 31 | ""u""
|
||||
32 32 | ""u"hi"
|
||||
33 |-""""""""""""""""""""u"hi"
|
||||
33 |+"""""""""""""""""""" "hi"
|
||||
34 34 | ""U"helloooo"
|
||||
|
||||
UP025.py:34:3: UP025 [*] Remove unicode literals from strings
|
||||
|
|
||||
32 | ""u"hi"
|
||||
33 | """"""""""""""""""""u"hi"
|
||||
34 | ""U"helloooo"
|
||||
| ^^^^^^^^^^^ UP025
|
||||
|
|
||||
= help: Remove unicode prefix
|
||||
|
||||
ℹ Safe fix
|
||||
31 31 | ""u""
|
||||
32 32 | ""u"hi"
|
||||
33 33 | """"""""""""""""""""u"hi"
|
||||
34 |-""U"helloooo"
|
||||
34 |+"" "helloooo"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue