Skip to content

Commit 819703c

Browse files
committed
🐛 Support await in expressions part of f-string
1 parent 6679f2a commit 819703c

4 files changed

Lines changed: 25 additions & 8 deletions

File tree

src/python_minifier/expression_printer.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,3 +783,9 @@ def visit_NamedExpr(self, node):
783783
self._expression(node.target)
784784
self.code += ':='
785785
self._expression(node.value)
786+
787+
def visit_Await(self, node):
788+
assert isinstance(node, ast.Await)
789+
self.token_break()
790+
self.code += 'await'
791+
self._rhs(node.value, node)

src/python_minifier/f_string.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ def candidates(self):
4747
if is_str(v):
4848
try:
4949
candidates = [x + self.str_for(v.s, quote) for x in candidates]
50-
except:
50+
except Exception as e:
5151
continue
5252
elif isinstance(v, ast.FormattedValue):
5353
try:
5454
candidates = [
5555
x + y for x in candidates for y in FormattedValue(v, nested_allowed).get_candidates()
5656
]
57-
except:
57+
except Exception as e:
5858
continue
5959
else:
6060
raise RuntimeError('Unexpected JoinedStr value')

src/python_minifier/module_printer.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -574,12 +574,6 @@ def visit_AsyncFunctionDef(self, node):
574574
assert isinstance(node, ast.AsyncFunctionDef)
575575
self.visit_FunctionDef(node, is_async=True)
576576

577-
def visit_Await(self, node):
578-
assert isinstance(node, ast.Await)
579-
self.token_break()
580-
self.code += 'await'
581-
self._rhs(node.value, node)
582-
583577
def visit_AsyncFor(self, node):
584578
assert isinstance(node, ast.AsyncFor)
585579
self.visit_For(node, is_async=True)

test/test_await_fstring.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import ast
2+
import sys
3+
import pytest
4+
from python_minifier import unparse
5+
from python_minifier.ast_compare import compare_ast
6+
7+
def test_await_fstring():
8+
if sys.version_info < (3, 6):
9+
pytest.skip('No f-string expressions in python < 3.6')
10+
11+
source = '''
12+
f'{await 0}'
13+
'''
14+
15+
expected_ast = ast.parse(source)
16+
actual_ast = unparse(expected_ast)
17+
compare_ast(expected_ast, ast.parse(actual_ast))

0 commit comments

Comments
 (0)