File: expansion_context.ml

package info (click to toggle)
ppxlib 0.15.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid
  • size: 1,284 kB
  • sloc: ml: 17,184; sh: 149; makefile: 36; python: 36
file content (49 lines) | stat: -rw-r--r-- 1,413 bytes parent folder | download
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
module Base = struct
  type t =
    { tool_name : string
    ; code_path : Code_path.t
    }

  let top_level ~tool_name ~file_path =
    let code_path = Code_path.top_level ~file_path in
    {tool_name; code_path}

  let enter_expr t = {t with code_path = Code_path.enter_expr t.code_path}
  let enter_module ~loc name t = {t with code_path = Code_path.enter_module ~loc name t.code_path}
  let enter_value ~loc name t = {t with code_path = Code_path.enter_value ~loc name t.code_path}
end

module Extension = struct
  type t =
    { extension_point_loc : Location.t
    ; base : Base.t
    }

  let make ~extension_point_loc ~base () = {extension_point_loc; base}

  let extension_point_loc t = t.extension_point_loc
  let code_path t = t.base.code_path
  let tool_name t = t.base.tool_name

  let with_loc_and_path f =
    fun ~ctxt ->
      f ~loc:ctxt.extension_point_loc ~path:(Code_path.to_string_path ctxt.base.code_path)
end

module Deriver = struct
  type t =
    { derived_item_loc : Location.t
    ; inline : bool
    ; base : Base.t
    }

  let make ~derived_item_loc ~inline ~base () = {derived_item_loc; base; inline}

  let derived_item_loc t = t.derived_item_loc
  let code_path t = t.base.code_path
  let tool_name t = t.base.tool_name
  let inline t = t.inline

  let with_loc_and_path f =
    fun ~ctxt -> f ~loc:ctxt.derived_item_loc ~path:(Code_path.to_string_path ctxt.base.code_path)
end