Skip to content

[pyupgrade] Ignore strings with string-only escapes (UP012)#16058

Merged
dylwil3 merged 2 commits intoastral-sh:mainfrom
InSyncWithFoo:UP012
Apr 2, 2026
Merged

[pyupgrade] Ignore strings with string-only escapes (UP012)#16058
dylwil3 merged 2 commits intoastral-sh:mainfrom
InSyncWithFoo:UP012

Conversation

@InSyncWithFoo
Copy link
Copy Markdown
Contributor

@InSyncWithFoo InSyncWithFoo commented Feb 10, 2025

Summary

Resolves #12753.

After this change, UP012 will no longer report strings containing any of the following:

  • Name escapes (\N{NAME})
  • Short (\u0000) and long (\U00000000) Unicode escapes
  • Octal escapes (\0, \00, \000) where the codepoint value is greater than 255 (3778)

Test Plan

cargo nextest run and cargo insta test.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 10, 2025

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

✅ ecosystem check detected no linter changes.

@MichaReiser MichaReiser added bug Something isn't working rule Implementing or modifying a lint rule labels Feb 10, 2025
Copy link
Copy Markdown
Member

@amyreese amyreese left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Needs a rebase or merge from latest main.

@InSyncWithFoo
Copy link
Copy Markdown
Contributor Author

@amyreese I'll rebase this PR if someone from Astral (like you or Micha) confirms that it will be reviewed.

@amyreese
Copy link
Copy Markdown
Member

Yes, it will be reviewed after rebasing.

@InSyncWithFoo
Copy link
Copy Markdown
Contributor Author

@amyreese Rebased.

Copy link
Copy Markdown
Collaborator

@dylwil3 dylwil3 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, sorry for the delay in reviewing!

@dylwil3 dylwil3 enabled auto-merge (squash) April 2, 2026 14:27
@dylwil3 dylwil3 dismissed stale reviews from amyreese and MichaReiser April 2, 2026 14:53

rebased

@dylwil3 dylwil3 merged commit 5c59f8a into astral-sh:main Apr 2, 2026
42 checks passed
carljm added a commit that referenced this pull request Apr 2, 2026
* main:
  Add a "release-gate" step to the release workflow (#24365)
  Disallow starred expressions as values of starred expressions (#24280)
  [`pyupgrade`] Ignore strings with string-only escapes (`UP012`) (#16058)
  [ty] Improve consistency and quality of diagnostics relating to invalid type forms (#24325)
  [flake8-type-checking] Clarify import cycle wording for TC001/TC002/TC003 (#24322)
  [`flake8-errmsg`] Avoid shadowing existing `msg` in fix for `EM101` (#24363)
  `RUF072`: skip formfeeds on dedent (#24308)
  Replace unmaintained `unic-ucd-category` crate with `icu_properties` (#24344)
  [ty] Replace markdown hard line breaks in snapshot tests (#24361)
  [ty] Move snapshot for code action test with trailing whitespace to external file (#24359)
dylwil3 added a commit that referenced this pull request Apr 3, 2026
This fixes two errors introduced by #16058 : 

- An off-by-one error caused a panic when `UP012` was run on strings
ending in an octal (and could also cause the rule to trigger when it
should not, e.g. for `"\000\N{DIGIT ONE}"`).
- When checking that an octal `\abc` was not larger than `\377`, it was
parsed using `"abc".parse::<u8>()`. But this uses base 10. We need to
use `u8::from_str_radix("abc",8)` instead.

Closes #24389
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working rule Implementing or modifying a lint rule

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UP012 fix does not handle non-bytes escape sequences

5 participants