Source file node_of_ocaml.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
open Ppxlib

let make_require_string str =
  Printf.sprintf "require('%s')" str

let expand ~ctxt payload =
  let loc = Expansion_context.Extension.extension_point_loc ctxt in
  let req = make_require_string payload in
  Ast_builder.Default.eapply
    ~loc:loc
    (Ast_builder.Default.pexp_ident ~loc:loc ({txt = Longident.parse "Js.Unsafe.js_expr"; loc=loc}))
    [Ast_builder.Default.estring ~loc:loc req]


let node_of_ocaml =
  Extension.V3.declare
    "require"
    Extension.Context.expression
    Ast_pattern.(single_expr_payload (estring __))
    expand

let rule = Ppxlib.Context_free.Rule.extension node_of_ocaml

let () =
  Driver.register_transformation
  ~rules:[rule]
  "require"