From bfb90dc4f1e9d86a24207b252c5f3405037928b1 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 8 Aug 2018 14:43:14 +0300 Subject: Fn-style type params --- src/grammar/paths.rs | 11 +++++- .../data/parser/inline/0093_path_fn_trait_args.rs | 1 + .../data/parser/inline/0093_path_fn_trait_args.txt | 45 ++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 tests/data/parser/inline/0093_path_fn_trait_args.rs create mode 100644 tests/data/parser/inline/0093_path_fn_trait_args.txt diff --git a/src/grammar/paths.rs b/src/grammar/paths.rs index fe69db096..6d406645f 100644 --- a/src/grammar/paths.rs +++ b/src/grammar/paths.rs @@ -71,7 +71,16 @@ fn path_segment(p: &mut Parser, mode: Mode, first: bool) { fn path_generic_args(p: &mut Parser, mode: Mode) { match mode { Mode::Use => return, - Mode::Type => type_args::type_arg_list(p, false), + Mode::Type => { + // test path_fn_trait_args + // type F = Box ()>; + if p.at(L_PAREN) { + params::param_list(p); + fn_ret_type(p); + } else { + type_args::type_arg_list(p, false) + } + }, Mode::Expr => type_args::type_arg_list(p, true), } } diff --git a/tests/data/parser/inline/0093_path_fn_trait_args.rs b/tests/data/parser/inline/0093_path_fn_trait_args.rs new file mode 100644 index 000000000..aef45e561 --- /dev/null +++ b/tests/data/parser/inline/0093_path_fn_trait_args.rs @@ -0,0 +1 @@ +type F = Box ()>; diff --git a/tests/data/parser/inline/0093_path_fn_trait_args.txt b/tests/data/parser/inline/0093_path_fn_trait_args.txt new file mode 100644 index 000000000..800a4ac14 --- /dev/null +++ b/tests/data/parser/inline/0093_path_fn_trait_args.txt @@ -0,0 +1,45 @@ +FILE@[0; 32) + TYPE_ITEM@[0; 31) + TYPE_KW@[0; 4) + WHITESPACE@[4; 5) + NAME@[5; 6) + IDENT@[5; 6) "F" + WHITESPACE@[6; 7) + EQ@[7; 8) + WHITESPACE@[8; 9) + PATH_TYPE@[9; 30) + PATH@[9; 30) + PATH_SEGMENT@[9; 30) + NAME_REF@[9; 12) + IDENT@[9; 12) "Box" + TYPE_ARG_LIST@[12; 30) + L_ANGLE@[12; 13) + TYPE_ARG@[13; 29) + PATH_TYPE@[13; 29) + PATH@[13; 29) + PATH_SEGMENT@[13; 29) + NAME_REF@[13; 15) + IDENT@[13; 15) "Fn" + PARAM_LIST@[15; 23) + L_PAREN@[15; 16) + PARAM@[16; 22) + BIND_PAT@[16; 17) + NAME@[16; 17) + IDENT@[16; 17) "x" + COLON@[17; 18) + WHITESPACE@[18; 19) + PATH_TYPE@[19; 22) + PATH@[19; 22) + PATH_SEGMENT@[19; 22) + NAME_REF@[19; 22) + IDENT@[19; 22) "i32" + R_PAREN@[22; 23) + WHITESPACE@[23; 24) + THIN_ARROW@[24; 26) + WHITESPACE@[26; 27) + TUPLE_TYPE@[27; 29) + L_PAREN@[27; 28) + R_PAREN@[28; 29) + R_ANGLE@[29; 30) + SEMI@[30; 31) + WHITESPACE@[31; 32) -- cgit v1.2.3