diff --git a/parser/src/fstring.rs b/parser/src/fstring.rs index 8ea4985a1..29a588f5e 100644 --- a/parser/src/fstring.rs +++ b/parser/src/fstring.rs @@ -73,10 +73,6 @@ impl<'a> FStringParser<'a> { return Err(ExpectedRbrace); } }); - - if self.chars.peek() != Some(&'}') { - return Err(ExpectedRbrace); - } } // match a python 3.8 self documenting expression diff --git a/tests/snippets/fstrings.py b/tests/snippets/fstrings.py index 8b1e1d5cd..76bf91cd1 100644 --- a/tests/snippets/fstrings.py +++ b/tests/snippets/fstrings.py @@ -71,6 +71,16 @@ assert f'>{v!a}' == r">'\u262e'" +# Test format specifier after conversion flag +#assert f'{"42"!s:<5}' == '42 ', '#' + f'{"42"!s:5}' +'#' # TODO: default alignment in cpython is left + +assert f'{"42"!s:<5}' == '42 ', '#' + f'{"42"!s:5}' +'#' +assert f'{"42"!s:>5}' == ' 42', '#' + f'{"42"!s:5}' +'#' + +#assert f'{"42"=!s:5}' == '42=42 ', '#'+ f'{"42"!s:5}' +'#' # TODO add ' arround string literal in expression # TODO default alingment in cpython is left +assert f'{"42"=!s:<5}' == '42=42 ', '#'+ f'{"42"!s:5}' +'#' # TODO add ' arround string literal in expression +assert f'{"42"=!s:>5}' == '42= 42', '#'+ f'{"42"!s:5}' +'#' # TODO add ' arround string literal in expression + ### Tests for fstring selfdocumenting form CPython @@ -84,17 +94,17 @@ self=C() x = 'A string' self.assertEqual(f'{10=}', '10=10') self.assertEqual(f'{x=}', 'x=' + x )#repr(x)) # TODO: add ' when printing strings -#self.assertEqual(f'{x =}', 'x =' + x )# + repr(x)) # TODO: remove trim in impl -# self.assertEqual(f'{x=!s}', 'x=' + str(x)) # TODO : implement format specs properly +self.assertEqual(f'{x =}', 'x =' + x )# + repr(x)) # TODO: implement ' handling +self.assertEqual(f'{x=!s}', 'x=' + str(x)) # TODO : implement format specs properly # self.assertEqual(f'{x=!r}', 'x=' + x) #repr(x)) -#self.assertEqual(f'{x=!a}', 'x=' + ascii(x)) +self.assertEqual(f'{x=!a}', 'x=' + ascii(x)) x = 2.71828 self.assertEqual(f'{x=:.2f}', 'x=' + format(x, '.2f')) self.assertEqual(f'{x=:}', 'x=' + format(x, '')) -# self.assertEqual(f'{x=!r:^20}', 'x=' + format(repr(x), '^20')) -# self.assertEqual(f'{x=!s:^20}', 'x=' + format(str(x), '^20')) -# self.assertEqual(f'{x=!a:^20}', 'x=' + format(ascii(x), '^20')) +#self.assertEqual(f'{x=!r:^20}', 'x=' + format(repr(x), '^20')) #TODO formatspecifier after conversion flsg is currently not supported (also for classical fstrings) +#self.assertEqual(f'{x=!s:^20}', 'x=' + format(str(x), '^20')) +#self.assertEqual(f'{x=!a:^20}', 'x=' + format(ascii(x), '^20')) x = 9 self.assertEqual(f'{3*x+15=}', '3*x+15=42')