Skip to content

Commit e692581

Browse files
authored
Merge pull request #142 from bcaller/bc-f-string
Add f-strings to label visitor
2 parents c7a932f + 67004af commit e692581

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

pyt/helper_visitors/label_visitor.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,3 +288,35 @@ def visit_Name(self, node):
288288

289289
def visit_Str(self, node):
290290
self.result += "'" + node.s + "'"
291+
292+
def visit_joined_str(self, node, surround=True):
293+
for val in node.values:
294+
if isinstance(val, ast.Str):
295+
self.result += val.s
296+
else:
297+
self.visit(val)
298+
299+
def visit_JoinedStr(self, node):
300+
"""
301+
JoinedStr(expr* values)
302+
"""
303+
self.result += "f\'"
304+
self.visit_joined_str(node)
305+
self.result += "'"
306+
307+
def visit_FormattedValue(self, node):
308+
"""
309+
FormattedValue(expr value, int? conversion, expr? format_spec)
310+
"""
311+
self.result += '{'
312+
self.visit(node.value)
313+
self.result += {
314+
-1: '', # no formatting
315+
97: '!a', # ascii formatting
316+
114: '!r', # repr formatting
317+
115: '!s', # string formatting
318+
}[node.conversion]
319+
if node.format_spec:
320+
self.result += ':'
321+
self.visit_joined_str(node.format_spec)
322+
self.result += '}'

tests/helper_visitors/label_visitor_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,11 @@ def test_list_one_element(self):
7171
def test_list_two_elements(self):
7272
label = self.perform_labeling_on_expression('[1, 2]')
7373
self.assertEqual(label.result, '[1, 2]')
74+
75+
def test_joined_str(self):
76+
label = self.perform_labeling_on_expression('f"a{f(b)}{c}d"')
77+
self.assertEqual(label.result, 'f\'a{f(b)}{c}d\'')
78+
79+
def test_joined_str_with_format_spec(self):
80+
label = self.perform_labeling_on_expression('f"a{b!s:.{length}}"')
81+
self.assertEqual(label.result, 'f\'a{b!s:.{length}}\'')

0 commit comments

Comments
 (0)