diff --git a/src/scanner.c b/src/scanner.c index 13fbfc90..02b93d1b 100644 --- a/src/scanner.c +++ b/src/scanner.c @@ -126,19 +126,6 @@ static inline void set_end_character(Delimiter *delimiter, int32_t character) { } } -static inline const char *delimiter_string(Delimiter *delimiter) { - if (delimiter->flags & SingleQuote) { - return "\'"; - } - if (delimiter->flags & DoubleQuote) { - return "\""; - } - if (delimiter->flags & BackQuote) { - return "`"; - } - return ""; -} - typedef struct { uint32_t len; uint32_t cap; diff --git a/test/corpus/expressions.txt b/test/corpus/expressions.txt index 512880d0..9e1dea7e 100644 --- a/test/corpus/expressions.txt +++ b/test/corpus/expressions.txt @@ -95,6 +95,8 @@ Await expressions await i(j, 5) return await i(j, 5) +async def region_exists(region: str) -> bool: + return region in await all_regions() -------------------------------------------------------------------------------- @@ -112,7 +114,24 @@ return await i(j, 5) (identifier) (argument_list (identifier) - (integer)))))) + (integer))))) + (function_definition + (identifier) + (parameters + (typed_parameter + (identifier) + (type + (identifier)))) + (type + (identifier)) + (block + (return_statement + (comparison_operator + (identifier) + (await + (call + (identifier) + (argument_list)))))))) ================================================================================ Call expressions @@ -918,6 +937,32 @@ Tuples with yield (identifier) (identifier)))))) +================================================================================ +Default Tuple Arguments +================================================================================ + +def comp_args((a, b)=(3, 4)): + return a, b + +-------------------------------------------------------------------------------- + +(module + (function_definition + (identifier) + (parameters + (default_parameter + (tuple_pattern + (identifier) + (identifier)) + (tuple + (integer) + (integer)))) + (block + (return_statement + (expression_list + (identifier) + (identifier)))))) + ================================================================================ Conditional if expressions ================================================================================ @@ -984,9 +1029,9 @@ async with a as b: left: (identifier) right: (identifier))))))))) -=========================================== +================================================================================ Arbitrary indentation between brackets -========================================== +================================================================================ def a(): b( @@ -998,7 +1043,7 @@ def a(): 3 ] ---- +-------------------------------------------------------------------------------- (module (function_definition @@ -1016,3 +1061,36 @@ def a(): (identifier) (list (integer))))))) + +================================================================================ +Splat Inside of Expression List +================================================================================ + +a,c = [1,2],3 +w, x, y, z = 0, *a, c + +-------------------------------------------------------------------------------- + +(module + (expression_statement + (assignment + (pattern_list + (identifier) + (identifier)) + (expression_list + (list + (integer) + (integer)) + (integer)))) + (expression_statement + (assignment + (pattern_list + (identifier) + (identifier) + (identifier) + (identifier)) + (expression_list + (integer) + (list_splat + (identifier)) + (identifier))))) diff --git a/test/corpus/literals.txt b/test/corpus/literals.txt index b703f574..7fe7ec8d 100644 --- a/test/corpus/literals.txt +++ b/test/corpus/literals.txt @@ -134,6 +134,7 @@ string" b"\x12\u12\U12\x13\N{WINKING FACE}" "\xab\123\'\"\a\b\f\r\n\t\v\\" "\xgh\o123\p\q\c\d\e\u12\U1234" +f'\N{GREEK CAPITAL LETTER DELTA}' -------------------------------------------------------------------------------- @@ -213,6 +214,12 @@ b"\x12\u12\U12\x13\N{WINKING FACE}" (string (string_start) (string_content) + (string_end))) + (expression_statement + (string + (string_start) + (string_content + (escape_sequence)) (string_end)))) ================================================================================ @@ -311,6 +318,12 @@ f"a {{b}}" f"a {{{b}}}" f"{c,}" f"{yield d}" +f"{*a,}" + +def function(): + return f""" +{"string1" if True else + "string2"}""" -------------------------------------------------------------------------------- @@ -395,7 +408,35 @@ f"{yield d}" (interpolation (yield (identifier))) - (string_end)))) + (string_end))) + (expression_statement + (string + (string_start) + (interpolation + (expression_list + (list_splat + (identifier)))) + (string_end))) + (function_definition + (identifier) + (parameters) + (block + (return_statement + (string + (string_start) + (string_content) + (interpolation + (conditional_expression + (string + (string_start) + (string_content) + (string_end)) + (true) + (string + (string_start) + (string_content) + (string_end)))) + (string_end)))))) ================================================================================ Format strings with format specifiers diff --git a/test/corpus/statements.txt b/test/corpus/statements.txt index 3c8b2b78..b4f13cba 100644 --- a/test/corpus/statements.txt +++ b/test/corpus/statements.txt @@ -124,6 +124,7 @@ print a print b, c print 0 or 1, 1 or 0, print 0 or 1 +print not True -------------------------------------------------------------------------------- @@ -143,7 +144,10 @@ print 0 or 1 (print_statement (boolean_operator (integer) - (integer)))) + (integer))) + (print_statement + (not_operator + (true)))) ================================================================================ Print statements with redirection @@ -808,6 +812,11 @@ def h(*a): i((*a)) j(((*a))) +def foo(): + pass \ +\ +\ + -------------------------------------------------------------------------------- (module @@ -889,7 +898,15 @@ def h(*a): (parenthesized_expression (parenthesized_expression (list_splat - (identifier)))))))))) + (identifier))))))))) + (function_definition + name: (identifier) + parameters: (parameters) + body: (block + (pass_statement))) + (line_continuation) + (line_continuation) + (line_continuation)) ================================================================================ Empty blocks @@ -1270,6 +1287,8 @@ Exec statements exec '1+1' exec 'x+=1' in None exec 'x+=1' in a, b +func = "print" +exec func in {} -------------------------------------------------------------------------------- @@ -1291,7 +1310,17 @@ exec 'x+=1' in a, b (string_content) (string_end)) (identifier) - (identifier))) + (identifier)) + (expression_statement + (assignment + (identifier) + (string + (string_start) + (string_content) + (string_end)))) + (exec_statement + (identifier) + (dictionary))) ================================================================================ Extra newlines