Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
),
)
case_stmt_ref = (
keyword("case").suppress() + test - colon.suppress() - newline.suppress()
- indent.suppress() - Group(OneOrMore(case_match))
- dedent.suppress() - Optional(keyword("else").suppress() - suite)
)
exec_stmt = Forward()
assert_stmt = addspace(keyword("assert") - testlist)
if_stmt = condense(
addspace(keyword("if") - condense(namedexpr_test - suite))
- ZeroOrMore(addspace(keyword("elif") - condense(namedexpr_test - suite)))
- Optional(else_stmt),
)
while_stmt = addspace(keyword("while") - condense(namedexpr_test - suite - Optional(else_stmt)))
for_stmt = addspace(keyword("for") - assignlist - keyword("in") - condense(testlist - suite - Optional(else_stmt)))
except_clause = attach(
keyword("except").suppress() + (
testlist_has_comma("list") | test("test")
) - Optional(keyword("as").suppress() - name),
except_handle,
)
try_stmt = condense(
keyword("try") - suite + (
keyword("finally") - suite
| (
OneOrMore(except_clause - suite) - Optional(keyword("except") - suite)
| keyword("except") - suite
) - Optional(else_stmt) - Optional(keyword("finally") - suite)
),
)
with_item = addspace(test - Optional(keyword("as") - name))
with_item_list = Group(maybeparens(lparen, tokenlist(with_item, comma), rparen))
with_stmt_ref = keyword("with").suppress() - with_item_list - suite
with_stmt = Forward()
return_typedef = Forward()
name_funcdef = trace(condense(dotted_name + parameters))
op_tfpdef = unsafe_typedef_default | condense(name + Optional(default))
op_funcdef_arg = name | condense(lparen.suppress() + op_tfpdef + rparen.suppress())
op_funcdef_name = unsafe_backtick.suppress() + dotted_name + unsafe_backtick.suppress()
op_funcdef = trace(
attach(
Group(Optional(op_funcdef_arg))
+ op_funcdef_name
+ Group(Optional(op_funcdef_arg)),
op_funcdef_handle,
),
)
return_typedef_ref = arrow.suppress() + typedef_test
end_func_colon = return_typedef + colon.suppress() | colon
base_funcdef = op_funcdef | name_funcdef
funcdef = trace(addspace(keyword("def") + condense(base_funcdef + end_func_colon + nocolon_suite)))
name_match_funcdef = Forward()
op_match_funcdef = Forward()
op_match_funcdef_arg = Group(
Optional(
lparen.suppress()
+ Group(match + Optional(equals.suppress() + test))
+ rparen.suppress(),
),
matchlist_list = Group(Optional(tokenlist(match, comma)))
matchlist_tuple = Group(
Optional(
match + OneOrMore(comma.suppress() + match) + Optional(comma.suppress())
| match + comma.suppress(),
),
)
matchlist_star = (
Optional(Group(OneOrMore(match + comma.suppress())))
+ star.suppress() + name
+ Optional(Group(OneOrMore(comma.suppress() + match)))
+ Optional(comma.suppress())
)
matchlist_data = (
Optional(Group(OneOrMore(match + comma.suppress())), default=())
+ star.suppress() + match
+ Optional(comma.suppress())
) | matchlist_list
match_const = const_atom | condense(equals.suppress() + atom_item)
match_string = (
(string + plus.suppress() + name + plus.suppress() + string)("mstring")
| (string + plus.suppress() + name)("string")
| (name + plus.suppress() + string)("rstring")
)
matchlist_set = Group(Optional(tokenlist(match_const, comma)))
match_pair = Group(match_const + colon.suppress() + match)
matchlist_dict = Group(Optional(tokenlist(match_pair, comma)))
match_list = lbrack + matchlist_list + rbrack.suppress()
match_tuple = lparen + matchlist_tuple + rparen.suppress()
match_lazy = lbanana + matchlist_list + rbanana.suppress()
def tokenlist(item, sep, suppress=True):
"""Create a list of tokens matching the item."""
if suppress:
sep = sep.suppress()
return item + ZeroOrMore(sep + item) + Optional(sep)
test + ~colon_eq
| namedexpr,
)
async_comp_for = Forward()
classlist_ref = Optional(
lparen.suppress() + rparen.suppress()
| Group(
condense(lparen + testlist + rparen)("tests")
| function_call("args"),
),
)
class_suite = suite | attach(newline, class_suite_handle)
classdef = condense(addspace(keyword("class") - name) - classlist - class_suite)
comp_iter = Forward()
base_comp_for = addspace(keyword("for") + assignlist + keyword("in") + test_item + Optional(comp_iter))
async_comp_for_ref = addspace(keyword("async") + base_comp_for)
comp_for <<= async_comp_for | base_comp_for
comp_if = addspace(keyword("if") + test_no_cond + Optional(comp_iter))
comp_iter <<= comp_for | comp_if
complex_raise_stmt = Forward()
pass_stmt = keyword("pass")
break_stmt = keyword("break")
continue_stmt = keyword("continue")
return_stmt = addspace(keyword("return") - Optional(testlist))
simple_raise_stmt = addspace(keyword("raise") + Optional(test))
complex_raise_stmt_ref = keyword("raise").suppress() + test + keyword("from").suppress() - test
raise_stmt = complex_raise_stmt | simple_raise_stmt
flow_stmt = break_stmt | continue_stmt | return_stmt | raise_stmt | yield_expr
dotted_as_name = Group(dotted_name - Optional(keyword("as").suppress() - name))
integer = Combine(Word(nums) + ZeroOrMore(underscore.suppress() + Word(nums)))
binint = Combine(Word("01") + ZeroOrMore(underscore.suppress() + Word("01")))
octint = Combine(Word("01234567") + ZeroOrMore(underscore.suppress() + Word("01234567")))
hexint = Combine(Word(hexnums) + ZeroOrMore(underscore.suppress() + Word(hexnums)))
imag_j = CaselessLiteral("j") | fixto(CaselessLiteral("i"), "j")
basenum = Combine(
integer + dot + (integer | FollowedBy(imag_j) | ~name)
| Optional(integer) + dot + integer,
) | integer
sci_e = Combine(CaselessLiteral("e") + Optional(plus | neg_minus))
numitem = ~(Literal("0") + Word(nums + "_", exact=1)) + Combine(basenum + Optional(sci_e + integer))
imag_num = Combine(numitem + imag_j)
bin_num = Combine(CaselessLiteral("0b") + Optional(underscore.suppress()) + binint)
oct_num = Combine(CaselessLiteral("0o") + Optional(underscore.suppress()) + octint)
hex_num = Combine(CaselessLiteral("0x") + Optional(underscore.suppress()) + hexint)
number = addspace((
bin_num
| oct_num
| hex_num
| imag_num
| numitem
) + Optional(condense(dot + name)))
moduledoc_item = Forward()
unwrap = Literal(unwrapper)
comment = Forward()
comment_ref = Combine(pound + integer + unwrap)
string_item = Combine(Literal(strwrapper) + integer + unwrap)
passthrough = Combine(backslash + integer + unwrap)
passthrough_block = Combine(fixto(dubbackslash, "\\") + integer + unwrap)
| Group(lparen.suppress() + match_args_list + match_guard + rparen.suppress()),
default="(_=None)",
)
stmt_lambdef_ref = (
keyword("def").suppress() + stmt_lambdef_params + arrow.suppress()
+ (
Group(OneOrMore(simple_stmt_item + semicolon.suppress())) + Optional(closing_stmt)
| Group(ZeroOrMore(simple_stmt_item + semicolon.suppress())) + closing_stmt
)
)
lambdef <<= trace(addspace(lambdef_base + test) | stmt_lambdef)
lambdef_no_cond = trace(addspace(lambdef_base + test_no_cond))
typedef_callable_params = (
lparen.suppress() + Optional(testlist, default="") + rparen.suppress()
| Optional(atom_item)
)
typedef_callable = attach(typedef_callable_params + arrow.suppress() + typedef_test, typedef_callable_handle)
_typedef_test, typedef_callable, _typedef_atom = disable_outside(
test,
typedef_callable,
typedef_atom_ref,
)
typedef_atom <<= _typedef_atom
typedef_test <<= _typedef_test
test <<= trace(
typedef_callable
| lambdef
| addspace(test_item + Optional(keyword("if") + test_item + keyword("else") + test)),
)
)
class_suite = suite | attach(newline, class_suite_handle)
classdef = condense(addspace(keyword("class") - name) - classlist - class_suite)
comp_iter = Forward()
base_comp_for = addspace(keyword("for") + assignlist + keyword("in") + test_item + Optional(comp_iter))
async_comp_for_ref = addspace(keyword("async") + base_comp_for)
comp_for <<= async_comp_for | base_comp_for
comp_if = addspace(keyword("if") + test_no_cond + Optional(comp_iter))
comp_iter <<= comp_for | comp_if
complex_raise_stmt = Forward()
pass_stmt = keyword("pass")
break_stmt = keyword("break")
continue_stmt = keyword("continue")
return_stmt = addspace(keyword("return") - Optional(testlist))
simple_raise_stmt = addspace(keyword("raise") + Optional(test))
complex_raise_stmt_ref = keyword("raise").suppress() + test + keyword("from").suppress() - test
raise_stmt = complex_raise_stmt | simple_raise_stmt
flow_stmt = break_stmt | continue_stmt | return_stmt | raise_stmt | yield_expr
dotted_as_name = Group(dotted_name - Optional(keyword("as").suppress() - name))
import_as_name = Group(name - Optional(keyword("as").suppress() - name))
import_names = Group(maybeparens(lparen, tokenlist(dotted_as_name, comma), rparen))
from_import_names = Group(maybeparens(lparen, tokenlist(import_as_name, comma), rparen))
basic_import = keyword("import").suppress() - (import_names | Group(star))
from_import = (
keyword("from").suppress()
- condense(ZeroOrMore(unsafe_dot) + dotted_name | OneOrMore(unsafe_dot) | star)
- keyword("import").suppress() - (from_import_names | Group(star))
)
import_stmt = Forward()
import_stmt_ref = from_import | basic_import
nocolon_suite = Forward()
base_suite = Forward()
classlist = Forward()
classic_lambdef = Forward()
classic_lambdef_params = maybeparens(lparen, var_args_list, rparen)
new_lambdef_params = lparen.suppress() + var_args_list + rparen.suppress() | name
classic_lambdef_ref = addspace(keyword("lambda") + condense(classic_lambdef_params + colon))
new_lambdef = attach(new_lambdef_params + arrow.suppress(), lambdef_handle)
implicit_lambdef = fixto(arrow, "lambda _=None:")
lambdef_base = classic_lambdef | new_lambdef | implicit_lambdef
stmt_lambdef = Forward()
match_guard = Optional(keyword("if").suppress() + test)
closing_stmt = longest(testlist("tests"), unsafe_simple_stmt_item)
stmt_lambdef_params = Optional(
attach(name, add_paren_handle)
| parameters
| Group(lparen.suppress() + match_args_list + match_guard + rparen.suppress()),
default="(_=None)",
)
stmt_lambdef_ref = (
keyword("def").suppress() + stmt_lambdef_params + arrow.suppress()
+ (
Group(OneOrMore(simple_stmt_item + semicolon.suppress())) + Optional(closing_stmt)
| Group(ZeroOrMore(simple_stmt_item + semicolon.suppress())) + closing_stmt
)
)
lambdef <<= trace(addspace(lambdef_base + test) | stmt_lambdef)
lambdef_no_cond = trace(addspace(lambdef_base + test_no_cond))
expr = Forward()
star_expr = Forward()
dubstar_expr = Forward()
comp_for = Forward()
test_no_cond = Forward()
namedexpr_test = Forward()
testlist = trace(itemlist(test, comma, suppress_trailing=False))
testlist_star_expr = trace(itemlist(test | star_expr, comma, suppress_trailing=False))
testlist_star_namedexpr = trace(itemlist(namedexpr_test | star_expr, comma, suppress_trailing=False))
testlist_has_comma = trace(addspace(OneOrMore(condense(test + comma)) + Optional(test)))
yield_from = Forward()
dict_comp = Forward()
yield_classic = addspace(keyword("yield") + Optional(testlist))
yield_from_ref = keyword("yield").suppress() + keyword("from").suppress() + test
yield_expr = yield_from | yield_classic
dict_comp_ref = lbrace.suppress() + (test + colon.suppress() + test | dubstar_expr) + comp_for + rbrace.suppress()
dict_item = condense(
lbrace
+ Optional(
itemlist(
addspace(condense(test + colon) + test) | dubstar_expr,
comma,
),
)
+ rbrace,
)
test_expr = yield_expr | testlist_star_expr
op_item = (