File tree 2 files changed +57
-0
lines changed
2 files changed +57
-0
lines changed Original file line number Diff line number Diff line change @@ -247,6 +247,17 @@ module Browser_only = struct
247
247
in
248
248
let item = { fn with pexp_attributes = expr.pexp_attributes } in
249
249
make_vb_with_browser_only ~loc pattern item
250
+ | Pexp_function _cases ->
251
+ (* Because pexp_function doesn't have a pattern, neither a label, we construct an empty pattern and use it to generate the vb *)
252
+ let original_function_name = get_function_name pattern.ppat_desc in
253
+ let fn =
254
+ Builder. pexp_fun ~loc Nolabel None
255
+ [% pat? _]
256
+ (last_expr_to_raise_impossible ~loc original_function_name
257
+ expression)
258
+ in
259
+ let item = { fn with pexp_attributes = expression.pexp_attributes } in
260
+ make_vb_with_browser_only ~loc pattern item
250
261
| Pexp_ident { txt = _longident ; loc } ->
251
262
let item = [% expr Obj. magic () ] in
252
263
make_vb_with_browser_only ~loc pattern item
Original file line number Diff line number Diff line change
1
+ $ cat > input. re << EOF
2
+ > let % browser_only foo = fun
3
+ > | x when x < 0. = > None
4
+ > | x => Some(" bar" );
5
+ >
6
+ > let make = () => {
7
+ > let % browser_only foo = fun
8
+ > | x when x < 0. = > None
9
+ > | x => Some(" bar" );
10
+ > ();
11
+ > };
12
+ > EOF
13
+
14
+ $ refmt -- parse re -- print ml input. re > input. ml
15
+
16
+ With -js flag everything keeps as it is and browser_only extension disappears
17
+
18
+ $ ./ standalone. exe -impl input. ml -js | ocamlformat - -- enable-outside-detected-project -- impl
19
+ let foo = function x when x < 0. - > None | x -> Some " bar" [@ explicit_arity ]
20
+
21
+ let make () =
22
+ let foo = function
23
+ | x when x < 0. - > None
24
+ | x -> Some " bar" [@ explicit_arity ]
25
+ in
26
+ ()
27
+
28
+ Without -js flag, the compilation to native errors out indicating that a function must be used
29
+
30
+ $ ./ standalone. exe -impl input. ml | ocamlformat - -- enable-outside-detected-project -- impl
31
+ let (foo
32
+ [@ alert
33
+ browser_only
34
+ " This expression is marked to only run on the browser where JavaScript \
35
+ can run. You can only use it inside a let% browser_only function." ]) =
36
+ fun [@ alert " -browser_only" ] _ -> Runtime. fail_impossible_action_in_ssr " foo"
37
+ [@@ warning " -27-32" ]
38
+
39
+ let make () =
40
+ let foo =
41
+ [% ocaml . error
42
+ " [browser_ppx] browser_only works on function definitions. For other \
43
+ cases, use switch% platform or feel free to open an issue in \
44
+ https://github.com/ml-in-barcelona/server-reason-react." ]
45
+ in
46
+ ()
You can’t perform that action at this time.
0 commit comments