(ctx: CtxRef, input: ParseStream)
| 614 | } |
| 615 | |
| 616 | fn parse_arrange_by(ctx: CtxRef, input: ParseStream) -> Result { |
| 617 | let arrange_by = input.parse::<kw::ArrangeBy>()?; |
| 618 | |
| 619 | let keys = { |
| 620 | input.parse::<kw::keys>()?; |
| 621 | input.parse::<syn::Token![=]>()?; |
| 622 | let inner; |
| 623 | syn::bracketed!(inner in input); |
| 624 | inner.parse_comma_sep(|input| { |
| 625 | let inner; |
| 626 | syn::bracketed!(inner in input); |
| 627 | scalar::parse_exprs(&inner) |
| 628 | })? |
| 629 | }; |
| 630 | |
| 631 | let parse_input = ParseChildren::new(input, arrange_by.span().start()); |
| 632 | let input = Box::new(parse_input.parse_one(ctx, parse_expr)?); |
| 633 | |
| 634 | Ok(MirRelationExpr::ArrangeBy { input, keys }) |
| 635 | } |
| 636 | |
| 637 | fn parse_local_id(ident: syn::Ident) -> syn::Result<LocalId> { |
| 638 | if ident.to_string().starts_with('l') { |
no test coverage detected