@@ -26,3 +26,69 @@ let fromModule ~package modname =
26
26
let fromPath ~path =
27
27
let uri = Uri2. fromPath path in
28
28
fromUri ~uri
29
+
30
+ let resolveModuleFromCompilerPath ~env ~package path =
31
+ match ProcessCmt. fromCompilerPath ~env path with
32
+ | `Global (moduleName , path ) -> (
33
+ match ProcessCmt. fileForModule ~package moduleName with
34
+ | None -> None
35
+ | Some file -> (
36
+ let env = QueryEnv. fromFile file in
37
+ match ProcessCmt. resolvePath ~env ~package ~path with
38
+ | None -> None
39
+ | Some (env , name ) -> (
40
+ match Exported. find env.exported Exported. Module name with
41
+ | None -> None
42
+ | Some stamp -> (
43
+ match Stamps. findModule env.file.stamps stamp with
44
+ | None -> None
45
+ | Some declared -> Some (env, Some declared)))))
46
+ | `Stamp stamp -> (
47
+ match Stamps. findModule env.file.stamps stamp with
48
+ | None -> None
49
+ | Some declared -> Some (env, Some declared))
50
+ | `GlobalMod moduleName -> (
51
+ match ProcessCmt. fileForModule ~package moduleName with
52
+ | None -> None
53
+ | Some file ->
54
+ let env = QueryEnv. fromFile file in
55
+ Some (env, None ))
56
+ | `Not_found -> None
57
+ | `Exported (env , name ) -> (
58
+ match Exported. find env.exported Exported. Module name with
59
+ | None -> None
60
+ | Some stamp -> (
61
+ match Stamps. findModule env.file.stamps stamp with
62
+ | None -> None
63
+ | Some declared -> Some (env, Some declared)))
64
+
65
+ let resolveFromCompilerPath ~env ~package path =
66
+ match ProcessCmt. fromCompilerPath ~env path with
67
+ | `Global (moduleName , path ) -> (
68
+ let res =
69
+ match ProcessCmt. fileForModule ~package moduleName with
70
+ | None -> None
71
+ | Some file ->
72
+ let env = QueryEnv. fromFile file in
73
+ ProcessCmt. resolvePath ~env ~package ~path
74
+ in
75
+ match res with
76
+ | None -> `Not_found
77
+ | Some (env , name ) -> `Exported (env, name))
78
+ | `Stamp stamp -> `Stamp stamp
79
+ | `GlobalMod _ -> `Not_found
80
+ | `Not_found -> `Not_found
81
+ | `Exported (env , name ) -> `Exported (env, name)
82
+
83
+ let rec getSourceUri ~(env : QueryEnv.t ) ~package path =
84
+ match path with
85
+ | File (uri , _moduleName ) -> uri
86
+ | NotVisible -> env.file.uri
87
+ | IncludedModule (path , inner ) -> (
88
+ Log. log " INCLUDED MODULE" ;
89
+ match resolveModuleFromCompilerPath ~env ~package path with
90
+ | None ->
91
+ Log. log " NOT FOUND" ;
92
+ getSourceUri ~env ~package inner
93
+ | Some (env , _declared ) -> env.file.uri)
94
+ | ExportedModule (_ , inner ) -> getSourceUri ~env ~package inner
0 commit comments