Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
special_stmt = (
keyword_stmt
| augassign_stmt
| typed_assign_stmt
)
unsafe_simple_stmt_item <<= trace(special_stmt | longest(basic_stmt, destructuring_stmt))
end_simple_stmt_item = FollowedBy(semicolon | newline)
simple_stmt_item <<= trace(
special_stmt
| basic_stmt + end_simple_stmt_item
| destructuring_stmt + end_simple_stmt_item,
)
simple_stmt <<= trace(
condense(
simple_stmt_item
+ ZeroOrMore(fixto(semicolon, "\n") + simple_stmt_item)
+ (newline | endline_semicolon),
),
)
stmt <<= final(trace(compound_stmt | simple_stmt))
base_suite <<= condense(newline + indent - OneOrMore(stmt) - dedent)
simple_suite = attach(stmt, make_suite_handle)
nocolon_suite <<= trace(base_suite | simple_suite)
suite <<= condense(colon + nocolon_suite)
line = trace(newline | stmt)
single_input = trace(condense(Optional(line) - ZeroOrMore(newline)))
file_input = trace(condense(moduledoc_marker - ZeroOrMore(line)))
eval_input = trace(condense(testlist - ZeroOrMore(newline)))
single_parser = condense(start_marker - single_input - end_marker)
file_parser = condense(start_marker - file_input - end_marker)
questionmark = ~dubquestion + Literal("?")
ellipsis = Forward()
ellipsis_ref = Literal("...") | Literal("\u2026")
lt = ~Literal("<<") + ~Literal("<=") + ~Literal("<..") + Literal("<")
gt = ~Literal(">>") + ~Literal(">=") + Literal(">")
le = Literal("<=") | fixto(Literal("\u2264"), "<=")
ge = Literal(">=") | fixto(Literal("\u2265"), ">=")
ne = Literal("!=") | fixto(Literal("\xac=") | Literal("\u2260"), "!=")
mul_star = star | fixto(Literal("\xd7"), "*")
exp_dubstar = dubstar | fixto(Literal("\u2191"), "**")
neg_minus = minus | fixto(Literal("\u207b"), "-")
sub_minus = minus | fixto(Literal("\u2212"), "-")
div_slash = slash | fixto(Literal("\xf7") + ~slash, "/")
div_dubslash = dubslash | fixto(Combine(Literal("\xf7") + slash), "//")
matrix_at_ref = at | fixto(Literal("\u22c5"), "@")
matrix_at = Forward()
test = Forward()
test_no_chain, dubcolon = disable_inside(test, unsafe_dubcolon)
test_no_infix, backtick = disable_inside(test, unsafe_backtick)
name = Forward()
base_name = Regex(r"\b(?![0-9])\w+\b", re.U)
for k in keywords + const_vars:
base_name = ~keyword(k) + base_name
for k in reserved_vars:
base_name |= backslash.suppress() + keyword(k)
dotted_base_name = condense(base_name + ZeroOrMore(dot + base_name))
dotted_name = condense(name + ZeroOrMore(dot + name))
| fixto(back_star_pipe, "_coconut_back_star_pipe")
| fixto(pipe, "_coconut_pipe")
| fixto(back_pipe, "_coconut_back_pipe")
# must go dubstar then star then no star
| fixto(comp_dubstar_pipe, "_coconut_forward_dubstar_compose")
| fixto(comp_back_dubstar_pipe, "_coconut_back_dubstar_compose")
| fixto(comp_star_pipe, "_coconut_forward_star_compose")
| fixto(comp_back_star_pipe, "_coconut_back_star_compose")
| fixto(comp_pipe, "_coconut_forward_compose")
| fixto(dotdot | comp_back_pipe, "_coconut_back_compose")
| fixto(keyword("assert"), "_coconut_assert")
| fixto(keyword("and"), "_coconut_bool_and")
| fixto(keyword("or"), "_coconut_bool_or")
| fixto(dubquestion, "_coconut_none_coalesce")
| fixto(minus, "_coconut_minus")
| fixto(dot, "_coconut.getattr")
| fixto(unsafe_dubcolon, "_coconut.itertools.chain")
| fixto(dollar + lbrack + rbrack, "_coconut_igetitem")
| fixto(dollar, "_coconut.functools.partial")
| fixto(exp_dubstar, "_coconut.operator.pow")
| fixto(mul_star, "_coconut.operator.mul")
| fixto(div_dubslash, "_coconut.operator.floordiv")
| fixto(div_slash, "_coconut.operator.truediv")
| fixto(percent, "_coconut.operator.mod")
| fixto(plus, "_coconut.operator.add")
| fixto(amp, "_coconut.operator.and_")
| fixto(caret, "_coconut.operator.xor")
| fixto(unsafe_bar, "_coconut.operator.or_")
| fixto(lshift, "_coconut.operator.lshift")
| fixto(rshift, "_coconut.operator.rshift")
| fixto(amp, "_coconut.operator.and_")
| fixto(caret, "_coconut.operator.xor")
| fixto(unsafe_bar, "_coconut.operator.or_")
| fixto(lshift, "_coconut.operator.lshift")
| fixto(rshift, "_coconut.operator.rshift")
| fixto(lt, "_coconut.operator.lt")
| fixto(gt, "_coconut.operator.gt")
| fixto(eq, "_coconut.operator.eq")
| fixto(le, "_coconut.operator.le")
| fixto(ge, "_coconut.operator.ge")
| fixto(ne, "_coconut.operator.ne")
| fixto(tilde, "_coconut.operator.inv")
| fixto(matrix_at, "_coconut.operator.matmul")
| fixto(keyword("not"), "_coconut.operator.not_")
| fixto(keyword("is"), "_coconut.operator.is_")
| fixto(keyword("in"), "_coconut.operator.contains")
)
typedef = Forward()
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)
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")
| fixto(back_star_pipe, "_coconut_back_star_pipe")
| fixto(pipe, "_coconut_pipe")
| fixto(back_pipe, "_coconut_back_pipe")
# must go dubstar then star then no star
| fixto(comp_dubstar_pipe, "_coconut_forward_dubstar_compose")
| fixto(comp_back_dubstar_pipe, "_coconut_back_dubstar_compose")
| fixto(comp_star_pipe, "_coconut_forward_star_compose")
| fixto(comp_back_star_pipe, "_coconut_back_star_compose")
| fixto(comp_pipe, "_coconut_forward_compose")
| fixto(dotdot | comp_back_pipe, "_coconut_back_compose")
| fixto(keyword("assert"), "_coconut_assert")
| fixto(keyword("and"), "_coconut_bool_and")
| fixto(keyword("or"), "_coconut_bool_or")
| fixto(dubquestion, "_coconut_none_coalesce")
| fixto(minus, "_coconut_minus")
| fixto(dot, "_coconut.getattr")
| fixto(unsafe_dubcolon, "_coconut.itertools.chain")
simple_stmt_item = Forward()
unsafe_simple_stmt_item = Forward()
simple_stmt = Forward()
stmt = Forward()
suite = Forward()
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
# must go dubstar then star then no star
| fixto(comp_dubstar_pipe, "_coconut_forward_dubstar_compose")
| fixto(comp_back_dubstar_pipe, "_coconut_back_dubstar_compose")
| fixto(comp_star_pipe, "_coconut_forward_star_compose")
| fixto(comp_back_star_pipe, "_coconut_back_star_compose")
| fixto(comp_pipe, "_coconut_forward_compose")
| fixto(dotdot | comp_back_pipe, "_coconut_back_compose")
| fixto(keyword("assert"), "_coconut_assert")
| fixto(keyword("and"), "_coconut_bool_and")
| fixto(keyword("or"), "_coconut_bool_or")
| fixto(dubquestion, "_coconut_none_coalesce")
| fixto(minus, "_coconut_minus")
| fixto(dot, "_coconut.getattr")
| fixto(unsafe_dubcolon, "_coconut.itertools.chain")
| fixto(dollar + lbrack + rbrack, "_coconut_igetitem")
| fixto(dollar, "_coconut.functools.partial")
| fixto(exp_dubstar, "_coconut.operator.pow")
| fixto(mul_star, "_coconut.operator.mul")
| fixto(div_dubslash, "_coconut.operator.floordiv")
| fixto(div_slash, "_coconut.operator.truediv")
| fixto(percent, "_coconut.operator.mod")
| fixto(plus, "_coconut.operator.add")
| fixto(amp, "_coconut.operator.and_")
| fixto(caret, "_coconut.operator.xor")
| fixto(unsafe_bar, "_coconut.operator.or_")
| fixto(lshift, "_coconut.operator.lshift")
| fixto(rshift, "_coconut.operator.rshift")
| fixto(lt, "_coconut.operator.lt")
| fixto(gt, "_coconut.operator.gt")
| fixto(eq, "_coconut.operator.eq")
+ 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")
| fixto(back_star_pipe, "_coconut_back_star_pipe")
| fixto(pipe, "_coconut_pipe")
| fixto(back_pipe, "_coconut_back_pipe")
# must go dubstar then star then no star
| fixto(comp_dubstar_pipe, "_coconut_forward_dubstar_compose")
| fixto(comp_back_dubstar_pipe, "_coconut_back_dubstar_compose")
| fixto(comp_star_pipe, "_coconut_forward_star_compose")
| fixto(comp_back_star_pipe, "_coconut_back_star_compose")
| fixto(comp_pipe, "_coconut_forward_compose")
| fixto(dotdot | comp_back_pipe, "_coconut_back_compose")
| fixto(keyword("assert"), "_coconut_assert")
| fixto(keyword("and"), "_coconut_bool_and")
| fixto(keyword("or"), "_coconut_bool_or")
| fixto(dubquestion, "_coconut_none_coalesce")
| fixto(minus, "_coconut_minus")
| fixto(keyword("assert"), "_coconut_assert")
| fixto(keyword("and"), "_coconut_bool_and")
| fixto(keyword("or"), "_coconut_bool_or")
| fixto(dubquestion, "_coconut_none_coalesce")
| fixto(minus, "_coconut_minus")
| fixto(dot, "_coconut.getattr")
| fixto(unsafe_dubcolon, "_coconut.itertools.chain")
| fixto(dollar + lbrack + rbrack, "_coconut_igetitem")
| fixto(dollar, "_coconut.functools.partial")
| fixto(exp_dubstar, "_coconut.operator.pow")
| fixto(mul_star, "_coconut.operator.mul")
| fixto(div_dubslash, "_coconut.operator.floordiv")
| fixto(div_slash, "_coconut.operator.truediv")
| fixto(percent, "_coconut.operator.mod")
| fixto(plus, "_coconut.operator.add")
| fixto(amp, "_coconut.operator.and_")
| fixto(caret, "_coconut.operator.xor")
| fixto(unsafe_bar, "_coconut.operator.or_")
| fixto(lshift, "_coconut.operator.lshift")
| fixto(rshift, "_coconut.operator.rshift")
| fixto(lt, "_coconut.operator.lt")
| fixto(gt, "_coconut.operator.gt")
| fixto(eq, "_coconut.operator.eq")
| fixto(le, "_coconut.operator.le")
| fixto(ge, "_coconut.operator.ge")
| fixto(ne, "_coconut.operator.ne")
| fixto(tilde, "_coconut.operator.inv")
| fixto(matrix_at, "_coconut.operator.matmul")
| fixto(keyword("not"), "_coconut.operator.not_")
| fixto(keyword("is"), "_coconut.operator.is_")
| fixto(keyword("in"), "_coconut.operator.contains")
)
| fixto(dotdot | comp_back_pipe, "_coconut_back_compose")
| fixto(keyword("assert"), "_coconut_assert")
| fixto(keyword("and"), "_coconut_bool_and")
| fixto(keyword("or"), "_coconut_bool_or")
| fixto(dubquestion, "_coconut_none_coalesce")
| fixto(minus, "_coconut_minus")
| fixto(dot, "_coconut.getattr")
| fixto(unsafe_dubcolon, "_coconut.itertools.chain")
| fixto(dollar + lbrack + rbrack, "_coconut_igetitem")
| fixto(dollar, "_coconut.functools.partial")
| fixto(exp_dubstar, "_coconut.operator.pow")
| fixto(mul_star, "_coconut.operator.mul")
| fixto(div_dubslash, "_coconut.operator.floordiv")
| fixto(div_slash, "_coconut.operator.truediv")
| fixto(percent, "_coconut.operator.mod")
| fixto(plus, "_coconut.operator.add")
| fixto(amp, "_coconut.operator.and_")
| fixto(caret, "_coconut.operator.xor")
| fixto(unsafe_bar, "_coconut.operator.or_")
| fixto(lshift, "_coconut.operator.lshift")
| fixto(rshift, "_coconut.operator.rshift")
| fixto(lt, "_coconut.operator.lt")
| fixto(gt, "_coconut.operator.gt")
| fixto(eq, "_coconut.operator.eq")
| fixto(le, "_coconut.operator.le")
| fixto(ge, "_coconut.operator.ge")
| fixto(ne, "_coconut.operator.ne")
| fixto(tilde, "_coconut.operator.inv")
| fixto(matrix_at, "_coconut.operator.matmul")
| fixto(keyword("not"), "_coconut.operator.not_")
| fixto(keyword("is"), "_coconut.operator.is_")