@@ -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-
8782 let attribute_name = function
8883 | `Component ->
8984 " component"
@@ -92,31 +87,30 @@ module Declaration_ppx = struct
9287
9388 let transform_component_expr ~useDynamicKey ~attribute ~component_name expr =
9489 let 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 ->
10499 Location. 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 seenUnit then
114- let loc = child_expression.pexp_loc in
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 seenUnit then
109+ let loc = child_expression.pexp_loc in
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]]
121115 in
122116 loop ~seen Unit:false expr
0 commit comments