Skip to content

Commit 0850c6d

Browse files
committed
feat: add --keep-string-format flag
1 parent df14c9a commit 0850c6d

File tree

5 files changed

+15
-2
lines changed

5 files changed

+15
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -641,6 +641,7 @@ Availability:
641641

642642
Availability:
643643
- `--py36-plus` is passed on the commandline.
644+
- Unless `--keep-string-format` is passed.
644645

645646
```diff
646647
-'{foo} {bar}'.format(foo=foo, bar=bar)

pyupgrade/_data.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Settings(NamedTuple):
2222
keep_percent_format: bool = False
2323
keep_mock: bool = False
2424
keep_runtime_typing: bool = False
25+
keep_string_format: bool = False
2526

2627

2728
class State(NamedTuple):

pyupgrade/_main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ def _fix_file(filename: str, args: argparse.Namespace) -> int:
322322
keep_percent_format=args.keep_percent_format,
323323
keep_mock=args.keep_mock,
324324
keep_runtime_typing=args.keep_runtime_typing,
325+
keep_string_format=args.keep_string_format,
325326
),
326327
)
327328
contents_text = _fix_tokens(contents_text)
@@ -346,6 +347,7 @@ def main(argv: Sequence[str] | None = None) -> int:
346347
parser.add_argument('--keep-percent-format', action='store_true')
347348
parser.add_argument('--keep-mock', action='store_true')
348349
parser.add_argument('--keep-runtime-typing', action='store_true')
350+
parser.add_argument('--keep-string-format', action='store_true')
349351
parser.add_argument(
350352
'--py3-plus', '--py3-only',
351353
action='store_const', dest='min_version', default=(3,), const=(3,),

pyupgrade/_plugins/fstrings.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ def visit_Call(
134134
i += 1
135135
else:
136136
if (
137-
state.settings.min_version >= (3, 7) or
138-
not contains_await(node)
137+
not state.settings.keep_string_format and
138+
(state.settings.min_version >= (3, 7) or
139+
not contains_await(node))
139140
):
140141
yield ast_to_offset(node), _fix_fstring

tests/features/fstrings_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,11 @@ def test_fix_fstrings_await_py37():
7979
s = "async def c(): return '{}'.format(await 1+foo())"
8080
expected = "async def c(): return f'{await 1+foo()}'"
8181
assert _fix_plugins(s, settings=Settings(min_version=(3, 7))) == expected
82+
83+
84+
def test_keep_string_format():
85+
s = '"{} {}".format(a, b)'
86+
assert _fix_plugins(
87+
s,
88+
settings=Settings(min_version=(3, 6), keep_string_format=True),
89+
) == s

0 commit comments

Comments
 (0)