Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
| iter_match
| series_match
| star_match
| (name + lparen.suppress() + matchlist_data + rparen.suppress())("data")
| name("var"),
),
)
matchlist_trailer = base_match + OneOrMore(keyword("as") + name | keyword("is") + atom_item)
as_match = Group(matchlist_trailer("trailer")) | base_match
matchlist_and = as_match + OneOrMore(keyword("and").suppress() + as_match)
and_match = Group(matchlist_and("and")) | as_match
matchlist_or = and_match + OneOrMore(keyword("or").suppress() + and_match)
or_match = Group(matchlist_or("or")) | and_match
match <<= trace(or_match)
else_stmt = condense(keyword("else") - suite)
full_suite = colon.suppress() + Group((newline.suppress() + indent.suppress() + OneOrMore(stmt) + dedent.suppress()) | simple_stmt)
full_match = trace(
attach(
keyword("match").suppress() + match + addspace(Optional(keyword("not")) + keyword("in")) - test - match_guard - full_suite,
match_handle,
),
)
match_stmt = condense(full_match - Optional(else_stmt))
destructuring_stmt = Forward()
destructuring_stmt_ref = Optional(keyword("match").suppress()) + match + equals.suppress() + test_expr
case_stmt = Forward()
case_match = trace(
Group(
keyword("match").suppress() - match - Optional(keyword("if").suppress() - test) - full_suite,
+ Group(match + Optional(equals.suppress() + test))
+ rparen.suppress(),
),
)
name_match_funcdef_ref = keyword("def").suppress() + dotted_name + lparen.suppress() + match_args_list + match_guard + rparen.suppress()
op_match_funcdef_ref = keyword("def").suppress() + op_match_funcdef_arg + op_funcdef_name + op_match_funcdef_arg + match_guard
base_match_funcdef = trace(op_match_funcdef | name_match_funcdef)
def_match_funcdef = trace(
attach(
base_match_funcdef
+ colon.suppress()
+ (
attach(simple_stmt, make_suite_handle)
| newline.suppress() + indent.suppress()
+ Optional(docstring)
+ attach(condense(OneOrMore(stmt)), make_suite_handle)
+ dedent.suppress()
),
join_match_funcdef,
),
)
match_def_modifiers = trace(
Optional(
# we don't suppress addpattern so its presence can be detected later
keyword("match").suppress() + Optional(keyword("addpattern"))
| keyword("addpattern") + Optional(keyword("match")).suppress(),
),
)
match_funcdef = addspace(match_def_modifiers + def_match_funcdef)
where_suite = colon.suppress() - Group(
newline.suppress() + indent.suppress() - OneOrMore(simple_stmt) - dedent.suppress()
| 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)
endline = Forward()
endline_ref = condense(OneOrMore(Literal("\n")))
lineitem = Combine(Optional(comment) + endline)
newline = condense(OneOrMore(lineitem))
start_marker = StringStart()
moduledoc_marker = condense(ZeroOrMore(lineitem) - Optional(moduledoc_item))
end_marker = StringEnd()
indent = Literal(openindent)
dedent = Literal(closeindent)
u_string = Forward()
f_string = Forward()
bit_b = Optional(CaselessLiteral("b"))
raw_r = Optional(CaselessLiteral("r"))
b_string = Combine((bit_b + raw_r | raw_r + bit_b) + string_item)
unicode_u = CaselessLiteral("u").suppress()
u_string_ref = Combine((unicode_u + raw_r | raw_r + unicode_u) + string_item)
format_f = CaselessLiteral("f").suppress()
f_string_ref = Combine((format_f + raw_r | raw_r + format_f) + string_item)
where_suite = colon.suppress() - Group(
newline.suppress() + indent.suppress() - OneOrMore(simple_stmt) - dedent.suppress()
| simple_stmt,
)
where_stmt = attach(unsafe_simple_stmt_item + keyword("where").suppress() - where_suite, where_stmt_handle)
implicit_return = (
attach(return_stmt, invalid_return_stmt_handle)
| attach(testlist, implicit_return_handle)
)
implicit_return_stmt = (
attach(implicit_return + keyword("where").suppress() - where_suite, where_stmt_handle)
| condense(implicit_return + newline)
)
math_funcdef_body = condense(ZeroOrMore(~(implicit_return_stmt + dedent) + stmt) - implicit_return_stmt)
math_funcdef_suite = (
attach(implicit_return_stmt, make_suite_handle)
| condense(newline - indent - math_funcdef_body - dedent)
)
end_func_equals = return_typedef + equals.suppress() | fixto(equals, ":")
math_funcdef = trace(
attach(
condense(addspace(keyword("def") + base_funcdef) + end_func_equals) - math_funcdef_suite,
math_funcdef_handle,
),
)
math_match_funcdef = addspace(
match_def_modifiers
+ trace(
attach(
base_match_funcdef
| Group(op_item) + rparen.suppress()
| Group(attach(addspace(test + comp_for), add_paren_handle)) + rparen.suppress()
| tokenlist(Group(call_item), comma) + rparen.suppress()
)
function_call = attach(function_call_tokens, function_call_handle)
questionmark_call_tokens = Group(
tokenlist(
Group(
questionmark
| call_item,
),
comma,
),
)
methodcaller_args = (
itemlist(condense(call_item), comma)
| op_item
)
slicetest = Optional(test_no_chain)
sliceop = condense(unsafe_colon + slicetest)
subscript = condense(slicetest + sliceop + Optional(sliceop)) | test
subscriptlist = itemlist(subscript, comma, suppress_trailing=False)
slicetestgroup = Optional(test_no_chain, default="")
sliceopgroup = unsafe_colon.suppress() + slicetestgroup
subscriptgroup = attach(slicetestgroup + sliceopgroup + Optional(sliceopgroup) | test, subscriptgroup_handle)
subscriptgrouplist = itemlist(subscriptgroup, comma)
testlist_comp = addspace((namedexpr_test | star_expr) + comp_for) | testlist_star_namedexpr
list_comp = condense(lbrack + Optional(testlist_comp) + rbrack)
paren_atom = condense(lparen + Optional(yield_expr | testlist_comp) + rparen)
match = Forward()
args_list = ~just_op + trace(
addspace(
ZeroOrMore(
condense(
# everything here must end with arg_comma
(star | dubstar) + tfpdef
| star_sep_arg
| slash_sep_arg
| tfpdef_default,
),
),
),
)
parameters = condense(lparen + args_list + rparen)
var_args_list = ~just_op + trace(
addspace(
ZeroOrMore(
condense(
# everything here must end with vararg_comma
(star | dubstar) + name + vararg_comma
| star_sep_vararg
| slash_sep_vararg
| name + Optional(default) + vararg_comma,
),
),
),
)
match_args_list = trace(
Group(
Optional(
typedef_ref = name + colon.suppress() + typedef_test + arg_comma
default = condense(equals + test)
unsafe_typedef_default_ref = name + colon.suppress() + typedef_test + Optional(default)
typedef_default_ref = unsafe_typedef_default_ref + arg_comma
tfpdef = typedef | condense(name + arg_comma)
tfpdef_default = typedef_default | condense(name + Optional(default) + arg_comma)
star_sep_arg = Forward()
star_sep_arg_ref = condense(star + arg_comma)
star_sep_vararg = Forward()
star_sep_vararg_ref = condense(star + vararg_comma)
slash_sep_arg = Forward()
slash_sep_arg_ref = condense(slash + arg_comma)
slash_sep_vararg = Forward()
slash_sep_vararg_ref = condense(slash + vararg_comma)
just_star = star + rparen
just_slash = slash + rparen
just_op = just_star | just_slash
match = Forward()
args_list = ~just_op + trace(
addspace(
ZeroOrMore(
condense(
# everything here must end with arg_comma
(star | dubstar) + tfpdef
| star_sep_arg
| slash_sep_arg
| tfpdef_default,
),
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 = (
# must go dubstar then star then no star
fixto(dubstar_pipe, "_coconut_dubstar_pipe")
| fixto(back_dubstar_pipe, "_coconut_back_dubstar_pipe")
| fixto(star_pipe, "_coconut_star_pipe")
typedef_default = Forward()
unsafe_typedef_default = Forward()
typedef_test = Forward()
# we include (var)arg_comma to ensure the pattern matches the whole arg
arg_comma = comma | fixto(FollowedBy(rparen), "")
vararg_comma = arg_comma | fixto(FollowedBy(colon), "")
typedef_ref = name + colon.suppress() + typedef_test + arg_comma
default = condense(equals + test)
unsafe_typedef_default_ref = name + colon.suppress() + typedef_test + Optional(default)
typedef_default_ref = unsafe_typedef_default_ref + arg_comma
tfpdef = typedef | condense(name + arg_comma)
tfpdef_default = typedef_default | condense(name + Optional(default) + arg_comma)
star_sep_arg = Forward()
star_sep_arg_ref = condense(star + arg_comma)
star_sep_vararg = Forward()
star_sep_vararg_ref = condense(star + vararg_comma)
slash_sep_arg = Forward()
slash_sep_arg_ref = condense(slash + arg_comma)
slash_sep_vararg = Forward()
slash_sep_vararg_ref = condense(slash + vararg_comma)
just_star = star + rparen
just_slash = slash + rparen
just_op = just_star | just_slash
match = Forward()
args_list = ~just_op + trace(
addspace(
ZeroOrMore(
Group(fixto(lbrack + rbrack, "type:[]"))
| Group(fixto(dollar + lbrack + rbrack, "type:$[]"))
| Group(fixto(questionmark + ~questionmark, "type:?"))
)
simple_trailer = (
condense(lbrack + subscriptlist + rbrack)
| condense(dot + name)
)
call_trailer = (
function_call
| Group(dollar + ~lparen + ~lbrack + ~questionmark) # keep $ for item_handle
)
known_trailer = typedef_atom | (
Group(condense(dollar + lbrack) + subscriptgroup + rbrack.suppress()) # $[
| Group(condense(dollar + lbrack + rbrack)) # $[]
| Group(condense(lbrack + rbrack)) # []
| Group(dot + ~name + ~lbrack) # .
| Group(questionmark) # ?
) + ~questionmark
partial_trailer = (
Group(fixto(dollar, "$(") + function_call) # $(
| Group(fixto(dollar + lparen, "$(?") + questionmark_call_tokens) + rparen.suppress() # $(?
) + ~questionmark
partial_trailer_tokens = Group(dollar.suppress() + function_call_tokens)
no_call_trailer = simple_trailer | partial_trailer | known_trailer
no_partial_complex_trailer = call_trailer | known_trailer
no_partial_trailer = simple_trailer | no_partial_complex_trailer
complex_trailer = partial_trailer | no_partial_complex_trailer