@@ -79,11 +79,6 @@ module JSX_ppx = struct
7979end
8080
8181module Declaration_ppx = struct
82- let func_pattern= Ppxlib.Ast_pattern. (pexp_fun __ __ __ __)
83-
84- let match_ pattern ?on_error loc ast_node ~with_ =
85- Ppxlib.Ast_pattern. parse pattern ?on_error loc ast_node with_
86-
8782let attribute_name = function
8883| `Component ->
8984" component"
@@ -92,31 +87,30 @@ module Declaration_ppx = struct
9287
9388let transform_component_expr ~useDynamicKey ~attribute ~component_name expr =
9489let map_component_expression expr =
95- let rec loop ~seenUnit ({P. pexp_loc =loc } as expr )=
96- try
97- match_ func_pattern loc expr
98- ~with_: ( fun lbl opt_arg pat child_expression ->
99- let make_fun_with_expr ~ expr =
100- Ast_builder. pexp_fun ~loc lbl opt_arg pat expr
101- in
102- let loc = pat. Ppxlib. ppat_loc in
90+ let rec loop ~seenUnit ({P. pexp_loc =loc ; pexp_desc } as expr )=
91+ match pexp_desc with
92+ | P. Pexp_fun ( lbl , opt_arg , pat , child_expression ) ->
93+ let make_fun_with_expr ~ expr =
94+ Ast_builder. pexp_fun ~loc lbl opt_arg pat expr
95+ in
96+ let loc = pat. Ppxlib. ppat_loc in
97+ ( match (lbl, pat) with
10398| (Ppxlib. Optional_ ),_ when seenUnit ->
10499Location. raise_errorf~loc
105100" Optional arguments not allowed after ()"
106- | (Ppxlib. Labelled _ |Optional _ ),_ ->
107- make_fun_with_expr
108- ~expr: (loop~seen Unit child_expression)
109- | Ppxlib. Nolabel , [% pat?() ] ->
110- make_fun_with_expr
111- ~expr: (loop~seen Unit:true child_expression)
112- | _ ->
113- if seenUnitthen
114- let loc= child_expression.pexp_locin
115- [% expr [% e component_ident~loc ]~key [% e make_fun_with_expr~expr: child_expression]]
116- else
117- Location. raise_errorf~loc
118- " A labelled argument or () was expected" )
119- with
101+ | (Ppxlib. Labelled _ |Optional _ ),_ ->
102+ make_fun_with_expr
103+ ~expr: (loop~seen Unit child_expression)
104+ | Ppxlib. Nolabel , [% pat?() ] ->
105+ make_fun_with_expr
106+ ~expr: (loop~seen Unit:true child_expression)
107+ | _ ->
108+ if seenUnitthen
109+ let loc= child_expression.pexp_locin
110+ [% expr [% e component_ident~loc ]~key [% e make_fun_with_expr~expr: child_expression]]
111+ else
112+ Location. raise_errorf~loc
113+ " A labelled argument or () was expected" )
120114| _ -> [% expr [% e component_ident~loc ]~key [% e expr]]
121115in
122116 loop~seen Unit:false expr