Skip to content

Commit 4dc3fe2

Browse files
committed
Split out a specific type for the module used to implement namespaces.
1 parent 23f7b44 commit 4dc3fe2

File tree

4 files changed

+17
-13
lines changed

4 files changed

+17
-13
lines changed

analysis/.depend

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ src/Protocol.cmx : src/vendor/Json.cmx
3030
src/References.cmx : src/Utils.cmx src/Uri2.cmx src/SharedTypes.cmx \
3131
src/ProcessCmt.cmx src/Log.cmx src/Infix.cmx
3232
src/Shared.cmx : src/PrintType.cmx src/Log.cmx src/Files.cmx
33-
src/SharedTypes.cmx : src/Utils.cmx src/Uri2.cmx src/Shared.cmx \
34-
src/Infix.cmx
33+
src/SharedTypes.cmx : src/Utils.cmx src/Uri2.cmx src/Shared.cmx
3534
src/Uri2.cmx :
3635
src/Utils.cmx : src/Protocol.cmx
3736
src/vendor/Json.cmx :

analysis/src/FindFiles.ml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ let collectFiles directory =
107107
let compileds = allFiles |> List.filter isCompiledFile |> filterDuplicates in
108108
let sources = allFiles |> List.filter isSourceFile |> filterDuplicates in
109109
compileds
110-
|> List.map (fun path ->
110+
|> Utils.filterMap (fun path ->
111111
let modName = getName path in
112112
let cmt = directory /+ path in
113113
let resOpt =
@@ -116,7 +116,9 @@ let collectFiles directory =
116116
if getName name = modName then Some (directory /+ name) else None)
117117
sources
118118
in
119-
(modName, SharedTypes.Impl {cmt; resOpt}))
119+
match resOpt with
120+
| None -> None
121+
| Some res -> Some (modName, SharedTypes.Impl {cmt; res}))
120122

121123
(* returns a list of (absolute path to cmt(i), relative path from base to source file) *)
122124
let findProjectFiles ~namespace ~path ~sourceDirectories ~libBs =
@@ -161,8 +163,7 @@ let findProjectFiles ~namespace ~path ~sourceDirectories ~libBs =
161163
None)
162164
| None ->
163165
let cmt = (libBs /+ base) ^ ".cmt" in
164-
if Files.exists cmt then
165-
Some (moduleName, Impl {cmt; resOpt = Some file})
166+
if Files.exists cmt then Some (moduleName, Impl {cmt; res = file})
166167
else (
167168
Log.log ("Bad source file (no cmt/cmi) " ^ (libBs /+ base));
168169
None))
@@ -181,7 +182,7 @@ let findProjectFiles ~namespace ~path ~sourceDirectories ~libBs =
181182
let moduleName = nameSpaceToName namespace in
182183
let cmt = (libBs /+ namespace) ^ ".cmt" in
183184
Log.log ("adding namespace " ^ namespace ^ " : " ^ moduleName ^ " : " ^ cmt);
184-
(moduleName, Impl {cmt; resOpt = None}) :: result
185+
(moduleName, Namespace {cmt}) :: result
185186

186187
let findDependencyFiles base config =
187188
let open Infix in

analysis/src/Packages.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ let newBsPackage rootPath =
5959
| Some namespace ->
6060
let cmt = Filename.concat libBs namespace ^ ".cmt" in
6161
Log.log ("############ Namespaced as " ^ namespace ^ " at " ^ cmt);
62-
Hashtbl.add pathsForModule namespace (Impl {cmt; resOpt = None});
62+
Hashtbl.add pathsForModule namespace (Namespace {cmt});
6363
[FindFiles.nameSpaceToName namespace]
6464
in
6565
Log.log ("Dependency dirs " ^ String.concat " " dependencyDirectories);

analysis/src/SharedTypes.ml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,28 +114,32 @@ end
114114
type filePath = string
115115

116116
type paths =
117-
| Impl of {cmt : filePath; resOpt : filePath option}
117+
| Impl of {cmt : filePath; res : filePath}
118+
| Namespace of {cmt : filePath}
118119
| IntfAndImpl of {
119120
cmti : filePath;
120121
resi : filePath;
121122
cmt : filePath;
122123
res : filePath;
123124
}
124125

125-
open Infix
126-
127126
let showPaths paths =
128127
match paths with
129-
| Impl {cmt; resOpt} -> Printf.sprintf "Impl(%s, %s)" cmt (resOpt |? "nil")
128+
| Impl {cmt; res} -> Printf.sprintf "Impl(%s, %s)" cmt res
129+
| Namespace {cmt} -> Printf.sprintf "Namespace(%s)" cmt
130130
| IntfAndImpl {cmti; resi; cmt; res} ->
131131
Printf.sprintf "IntfAndImpl(%s, %s, %s, %s)" cmti resi cmt res
132132

133133
let getSrc p =
134-
match p with Impl {resOpt} -> resOpt | IntfAndImpl {resi} -> Some resi
134+
match p with
135+
| Impl {res} -> Some res
136+
| Namespace _ -> None
137+
| IntfAndImpl {resi} -> Some resi
135138

136139
let getCmt ?(interface = true) p =
137140
match p with
138141
| Impl {cmt} -> cmt
142+
| Namespace {cmt} -> cmt
139143
| IntfAndImpl {cmti; cmt} -> if interface then cmti else cmt
140144

141145
let emptyDeclared name =

0 commit comments

Comments
 (0)