Skip to content

Commit 255e578

Browse files
authored
Revert "Test using normal filename concat without trying to normalize ./foo." (#201)
* Revert "No Infix." This reverts commit f36bef2. * Revert "Test using normal filename concat without trying to normalize `./foo`." This reverts commit 8b0b7c5.
1 parent d8ae158 commit 255e578

File tree

8 files changed

+53
-36
lines changed

8 files changed

+53
-36
lines changed

analysis/.depend

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
src/BuildSystem.cmx : src/ModuleResolution.cmx src/Log.cmx src/Files.cmx
1+
src/BuildSystem.cmx : src/ModuleResolution.cmx src/Log.cmx src/Infix.cmx \
2+
src/Files.cmx
23
src/Cli.cmx : src/Commands.cmx
34
src/Commands.cmx : src/Utils.cmx src/Uri2.cmx src/SharedTypes.cmx \
45
src/Shared.cmx src/References.cmx src/Protocol.cmx src/ProcessCmt.cmx \
@@ -9,9 +10,9 @@ src/FindFiles.cmx : src/Utils.cmx src/SharedTypes.cmx \
910
src/Files.cmx src/BuildSystem.cmx
1011
src/Hover.cmx : src/Utils.cmx src/SharedTypes.cmx src/Shared.cmx \
1112
src/References.cmx src/ProcessCmt.cmx
12-
src/Infix.cmx : src/Log.cmx
13+
src/Infix.cmx : src/Log.cmx src/Files.cmx
1314
src/Log.cmx :
14-
src/ModuleResolution.cmx : src/Files.cmx
15+
src/ModuleResolution.cmx : src/Infix.cmx src/Files.cmx
1516
src/NewCompletions.cmx : src/Utils.cmx src/Uri2.cmx src/SharedTypes.cmx \
1617
src/Shared.cmx src/Protocol.cmx src/ProcessCmt.cmx src/PartialParser.cmx \
1718
src/Log.cmx src/Infix.cmx src/Hover.cmx
@@ -32,7 +33,7 @@ src/References.cmx : src/Utils.cmx src/Uri2.cmx src/SharedTypes.cmx \
3233
src/Shared.cmx : src/PrintType.cmx src/Files.cmx
3334
src/SharedTypes.cmx : src/Utils.cmx src/Uri2.cmx src/Shared.cmx \
3435
src/Infix.cmx
35-
src/Uri2.cmx :
36+
src/Uri2.cmx : src/Files.cmx
3637
src/Utils.cmx : src/Protocol.cmx
3738
src/vendor/Json.cmx :
3839
src/vendor/res_outcome_printer/res_comment.cmx : \

analysis/src/BuildSystem.ml

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
let namespacedName namespace name =
2-
match namespace with None -> name | Some namespace -> name ^ "-" ^ namespace
2+
match namespace with
3+
| None -> name
4+
| Some namespace -> name ^ "-" ^ namespace
5+
6+
open Infix
37

48
let getBsPlatformDir rootPath =
59
let result =
@@ -17,11 +21,9 @@ let getBsPlatformDir rootPath =
1721
Log.log message;
1822
Error message
1923

20-
let getCompiledBase root =
21-
Files.ifExists (Filename.concat (Filename.concat root "lib") "bs")
24+
let getCompiledBase root = Files.ifExists (root /+ "lib" /+ "bs")
2225

2326
let getStdlib base =
2427
match getBsPlatformDir base with
2528
| Error e -> Error e
26-
| Ok bsPlatformDir ->
27-
Ok (Filename.concat (Filename.concat bsPlatformDir "lib") "ocaml")
29+
| Ok bsPlatformDir -> Ok (bsPlatformDir /+ "lib" /+ "ocaml")

analysis/src/Files.ml

+14
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,17 @@ let rec collect ?(checkDir = fun _ -> true) path test =
9797
|> List.concat
9898
else []
9999
| _ -> if test path then [path] else []
100+
101+
let fileConcat a b =
102+
if
103+
b <> ""
104+
&& b.[0] = '.'
105+
&& String.length b >= 2
106+
&& b.[1] = Filename.dir_sep.[0]
107+
then Filename.concat a (String.sub b 2 (String.length b - 2))
108+
else Filename.concat a b
109+
110+
let isFullPath b =
111+
b.[0] = '/' || (Sys.win32 && String.length b > 1 && b.[1] = ':')
112+
113+
let maybeConcat a b = if b <> "" && isFullPath b then b else fileConcat a b

analysis/src/FindFiles.ml

+18-20
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ let ifDebug debug name fn v =
44
if debug then Log.log (name ^ ": " ^ fn v);
55
v
66

7-
let ( ++ ) = Filename.concat
8-
97
(* Returns a list of paths, relative to the provided `base` *)
108
let getSourceDirectories ~includeDev base config =
119
let rec handleItem current item =
1210
match item with
1311
| Json.Array contents ->
1412
List.map (handleItem current) contents |> List.concat
15-
| Json.String text -> [current ++ text]
13+
| Json.String text -> [current /+ text]
1614
| Json.Object _ -> (
1715
let dir =
1816
Json.get "dir" item |?> Json.string |? "Must specify directory"
@@ -24,13 +22,13 @@ let getSourceDirectories ~includeDev base config =
2422
if typ = "dev" then []
2523
else
2624
match item |> Json.get "subdirs" with
27-
| None | Some Json.False -> [current ++ dir]
25+
| None | Some Json.False -> [current /+ dir]
2826
| Some Json.True ->
29-
Files.collectDirs (base ++ current ++ dir)
27+
Files.collectDirs (base /+ current /+ dir)
3028
(* |> ifDebug(true, "Subdirs", String.concat(" - ")) *)
3129
|> List.filter (fun name -> name <> Filename.current_dir_name)
3230
|> List.map (Files.relpath base)
33-
| Some item -> (current ++ dir) :: handleItem (current ++ dir) item)
31+
| Some item -> (current /+ dir) :: handleItem (current /+ dir) item)
3432
| _ -> failwith "Invalid subdirs entry"
3533
in
3634
match config |> Json.get "sources" with
@@ -106,11 +104,11 @@ let collectFiles directory =
106104
compileds
107105
|> List.map (fun path ->
108106
let modName = getName path in
109-
let compiled = directory ++ path in
107+
let compiled = directory /+ path in
110108
let source =
111109
Utils.find
112110
(fun name ->
113-
if getName name = modName then Some (directory ++ name) else None)
111+
if getName name = modName then Some (directory /+ name) else None)
114112
sources
115113
in
116114
(modName, SharedTypes.Impl (compiled, source)))
@@ -119,7 +117,7 @@ let collectFiles directory =
119117
let findProjectFiles ~debug namespace root sourceDirectories compiledBase =
120118
let files =
121119
sourceDirectories
122-
|> List.map (Filename.concat root)
120+
|> List.map (Files.fileConcat root)
123121
|> ifDebug debug "Source directories" (String.concat " - ")
124122
|> List.map (fun name -> Files.collect name isSourceFile)
125123
|> List.concat |> Utils.dedup
@@ -129,8 +127,8 @@ let findProjectFiles ~debug namespace root sourceDirectories compiledBase =
129127
|> Utils.filterMap(path => {
130128
let rel = Files.relpath(root, path);
131129
ifOneExists([
132-
compiledBase ++ cmtName(~namespace, rel),
133-
compiledBase ++ cmiName(~namespace, rel),
130+
compiledBase /+ cmtName(~namespace, rel),
131+
compiledBase /+ cmiName(~namespace, rel),
134132
]) |?>> cm => (cm, path)
135133
})
136134
|> ifDebug(debug, "With compiled base", (items) => String.concat("\n", List.map(((a, b)) => a ++ " : " ++ b, items)))
@@ -163,8 +161,8 @@ let findProjectFiles ~debug namespace root sourceDirectories compiledBase =
163161
let base = compiledBaseName ~namespace (Files.relpath root path) in
164162
match intf with
165163
| Some intf ->
166-
let cmti = (compiledBase ++ base) ^ ".cmti" in
167-
let cmt = (compiledBase ++ base) ^ ".cmt" in
164+
let cmti = (compiledBase /+ base) ^ ".cmti" in
165+
let cmt = (compiledBase /+ base) ^ ".cmt" in
168166
if Files.exists cmti then
169167
if Files.exists cmt then
170168
(* Log.log("Intf and impl " ++ cmti ++ " " ++ cmt) *)
@@ -173,15 +171,15 @@ let findProjectFiles ~debug namespace root sourceDirectories compiledBase =
173171
else (
174172
(* Log.log("Just intf " ++ cmti) *)
175173
Log.log
176-
("Bad source file (no cmt/cmti/cmi) " ^ (compiledBase ++ base)
174+
("Bad source file (no cmt/cmti/cmi) " ^ (compiledBase /+ base)
177175
);
178176
None)
179177
| None ->
180-
let cmt = (compiledBase ++ base) ^ ".cmt" in
178+
let cmt = (compiledBase /+ base) ^ ".cmt" in
181179
if Files.exists cmt then Some (mname, Impl (cmt, Some path))
182180
else (
183181
Log.log
184-
("Bad source file (no cmt/cmi) " ^ (compiledBase ++ base));
182+
("Bad source file (no cmt/cmi) " ^ (compiledBase /+ base));
185183
None))
186184
else (
187185
Log.log ("Bad source file (extension) " ^ path);
@@ -193,7 +191,7 @@ let findProjectFiles ~debug namespace root sourceDirectories compiledBase =
193191
(fun mname intf res ->
194192
let base = compiledBaseName ~namespace (Files.relpath root intf) in
195193
Log.log ("Extra intf " ^ intf);
196-
let cmti = (compiledBase ++ base) ^ ".cmti" in
194+
let cmti = (compiledBase /+ base) ^ ".cmti" in
197195
if Files.exists cmti then
198196
(mname, SharedTypes.Intf (cmti, intf)) :: res
199197
else res)
@@ -207,7 +205,7 @@ let findProjectFiles ~debug namespace root sourceDirectories compiledBase =
207205
| None -> result
208206
| Some namespace ->
209207
let mname = nameSpaceToName namespace in
210-
let cmt = (compiledBase ++ namespace) ^ ".cmt" in
208+
let cmt = (compiledBase /+ namespace) ^ ".cmt" in
211209
Log.log ("adding namespace " ^ namespace ^ " : " ^ mname ^ " : " ^ cmt);
212210
(mname, Impl (cmt, None)) :: result
213211

@@ -236,7 +234,7 @@ let findDependencyFiles ~debug base config =
236234
let result =
237235
ModuleResolution.resolveNodeModulePath ~startPath:base name
238236
|?> fun loc ->
239-
let innerPath = loc ++ "bsconfig.json" in
237+
let innerPath = loc /+ "bsconfig.json" in
240238
Log.log ("Dep loc " ^ innerPath);
241239
match Files.readFile innerPath with
242240
| Some text -> (
@@ -250,7 +248,7 @@ let findDependencyFiles ~debug base config =
250248
| Some compiledBase ->
251249
if debug then Log.log ("Compiled base: " ^ compiledBase);
252250
let compiledDirectories =
253-
directories |> List.map (Filename.concat compiledBase)
251+
directories |> List.map (Files.fileConcat compiledBase)
254252
in
255253
let compiledDirectories =
256254
match namespace with

analysis/src/Infix.ml

+2
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ let logIfAbsent message x =
2626
Log.log message;
2727
None
2828
| _ -> x
29+
30+
let ( /+ ) = Files.fileConcat

analysis/src/ModuleResolution.ml

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
open Infix
2+
13
let rec resolveNodeModulePath ~startPath name =
2-
let path = Filename.concat (Filename.concat startPath "node_modules") name in
4+
let path = startPath /+ "node_modules" /+ name in
35
if Files.exists path then Some path
46
else if Filename.dirname startPath = startPath then None
57
else resolveNodeModulePath ~startPath:(Filename.dirname startPath) name

analysis/src/Packages.ml

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
open Infix
22

3-
let ( ++ ) = Filename.concat
4-
53
(* Creates the `pathsForModule` hashtbl, which maps a `moduleName` to it's `paths` (the ml/re, mli/rei, cmt, and cmti files) *)
64
let makePathsForModule (localModules : (string * SharedTypes.paths) list)
75
(dependencyModules : (string * SharedTypes.paths) list) =
@@ -15,7 +13,7 @@ let makePathsForModule (localModules : (string * SharedTypes.paths) list)
1513
pathsForModule
1614

1715
let newBsPackage rootPath =
18-
let path = rootPath ++ "bsconfig.json" in
16+
let path = rootPath /+ "bsconfig.json" in
1917
match Files.readFile path with
2018
| None -> Error ("Unable to read " ^ path)
2119
| Some raw -> (
@@ -65,7 +63,7 @@ let newBsPackage rootPath =
6563
match namespace with
6664
| None -> []
6765
| Some namespace ->
68-
let cmt = (compiledBase ++ namespace) ^ ".cmt" in
66+
let cmt = (compiledBase /+ namespace) ^ ".cmt" in
6967
Log.log ("############ Namespaced as " ^ namespace ^ " at " ^ cmt);
7068
Hashtbl.add pathsForModule namespace (Impl (cmt, None));
7169
[FindFiles.nameSpaceToName namespace]
@@ -108,7 +106,7 @@ let findRoot ~uri packagesByRoot =
108106
let rec loop path =
109107
if path = "/" then None
110108
else if Hashtbl.mem packagesByRoot path then Some (`Root path)
111-
else if Files.exists (path ++ "bsconfig.json") then Some (`Bs path)
109+
else if Files.exists (path /+ "bsconfig.json") then Some (`Bs path)
112110
else
113111
let parent = Filename.dirname path in
114112
if parent = path then (* reached root *) None else loop parent

analysis/src/Uri2.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ end = struct
2929
let fromPath path = {path; uri = pathToUri path}
3030

3131
let fromLocalPath localPath =
32-
let path = Filename.concat (Unix.getcwd ()) localPath in
32+
let path = Files.maybeConcat (Unix.getcwd ()) localPath in
3333
fromPath path
3434

3535
let isInterface {path} = Filename.check_suffix path "i"

0 commit comments

Comments
 (0)