@@ -26,3 +26,69 @@ let fromModule ~package modname =
2626let fromPath ~path =
2727 let uri = Uri2. fromPath path in
2828 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