Skip to content

Commit bc35a77

Browse files
committed
findProjectFiles: make dirs and files deterministic.
1 parent b3cc487 commit bc35a77

File tree

2 files changed

+45
-40
lines changed

2 files changed

+45
-40
lines changed

analysis/src/FindFiles.ml

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
let ifDebug debug name fn v =
2-
if debug then Log.log (name ^ ": " ^ fn v);
3-
v
1+
let ifDebug debug name fn v = if debug then Log.log (name ^ ": " ^ fn v)
42

53
let ( /+ ) = Filename.concat
64

@@ -122,24 +120,31 @@ let collectFiles directory =
122120

123121
(* returns a list of (absolute path to cmt(i), relative path from base to source file) *)
124122
let findProjectFiles ~namespace ~path ~sourceDirectories ~libBs =
123+
let module StringSet = Set.Make (String) in
124+
let dirs =
125+
sourceDirectories |> List.map (Filename.concat path) |> StringSet.of_list
126+
in
125127
let files =
126-
sourceDirectories
127-
|> List.map (Filename.concat path)
128-
|> ifDebug true "Source directories" (String.concat " - ")
128+
dirs |> StringSet.elements
129129
|> List.map (fun name -> Files.collect name isSourceFile)
130-
|> List.concat |> Utils.dedup
131-
|> ifDebug true "Source files found" (String.concat " : ")
130+
|> List.concat |> StringSet.of_list
132131
in
132+
dirs
133+
|> ifDebug true "Source directories" (fun s ->
134+
s |> StringSet.elements |> String.concat " - ");
135+
files
136+
|> ifDebug true "Source files found" (fun s ->
137+
s |> StringSet.elements |> String.concat " : ");
133138

134139
let interfaces = Hashtbl.create 100 in
135140
files
136-
|> List.iter (fun path ->
141+
|> StringSet.iter (fun path ->
137142
if isInterface path then (
138143
Log.log ("Adding intf " ^ path);
139144
Hashtbl.replace interfaces (getName path) path));
140145

141146
let normals =
142-
files
147+
files |> StringSet.elements
143148
|> Utils.filterMap (fun file ->
144149
if isImplementation file then (
145150
let moduleName = getName file in

analysis/tests/src/expected/Debug.res.txt

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,58 +5,58 @@ Deps @rescript/react
55
Dep loc tests/node_modules/@rescript/react/bsconfig.json
66
Compiled base: tests/node_modules/@rescript/react/lib/bs
77
Source directories: tests/node_modules/@rescript/react/./src - tests/node_modules/@rescript/react/./src/legacy
8-
Source files found: tests/node_modules/@rescript/react/./src/ReactEvent.resi : tests/node_modules/@rescript/react/./src/RescriptReactErrorBoundary.resi : tests/node_modules/@rescript/react/./src/RescriptReactErrorBoundary.res : tests/node_modules/@rescript/react/./src/ReactDOMStyle.res : tests/node_modules/@rescript/react/./src/ReactTestUtils.resi : tests/node_modules/@rescript/react/./src/legacy/ReactDOMRe.res : tests/node_modules/@rescript/react/./src/legacy/ReasonReact.res : tests/node_modules/@rescript/react/./src/RescriptReactRouter.res : tests/node_modules/@rescript/react/./src/RescriptReactRouter.resi : tests/node_modules/@rescript/react/./src/ReactDOMServer.res : tests/node_modules/@rescript/react/./src/ReactEvent.res : tests/node_modules/@rescript/react/./src/ReactDOM.res : tests/node_modules/@rescript/react/./src/React.res : tests/node_modules/@rescript/react/./src/ReactTestUtils.res
8+
Source files found: tests/node_modules/@rescript/react/./src/React.res : tests/node_modules/@rescript/react/./src/ReactDOM.res : tests/node_modules/@rescript/react/./src/ReactDOMServer.res : tests/node_modules/@rescript/react/./src/ReactDOMStyle.res : tests/node_modules/@rescript/react/./src/ReactEvent.res : tests/node_modules/@rescript/react/./src/ReactEvent.resi : tests/node_modules/@rescript/react/./src/ReactTestUtils.res : tests/node_modules/@rescript/react/./src/ReactTestUtils.resi : tests/node_modules/@rescript/react/./src/RescriptReactErrorBoundary.res : tests/node_modules/@rescript/react/./src/RescriptReactErrorBoundary.resi : tests/node_modules/@rescript/react/./src/RescriptReactRouter.res : tests/node_modules/@rescript/react/./src/RescriptReactRouter.resi : tests/node_modules/@rescript/react/./src/legacy/ReactDOMRe.res : tests/node_modules/@rescript/react/./src/legacy/ReasonReact.res
99
Adding intf tests/node_modules/@rescript/react/./src/ReactEvent.resi
10-
Adding intf tests/node_modules/@rescript/react/./src/RescriptReactErrorBoundary.resi
1110
Adding intf tests/node_modules/@rescript/react/./src/ReactTestUtils.resi
11+
Adding intf tests/node_modules/@rescript/react/./src/RescriptReactErrorBoundary.resi
1212
Adding intf tests/node_modules/@rescript/react/./src/RescriptReactRouter.resi
1313
Got source directories src
1414
Source directories: tests/src
15-
Source files found: tests/src/DefinitionWithInterface.res : tests/src/Div.res : tests/src/Definition.res : tests/src/Debug.res : tests/src/RenameWithInterface.res : tests/src/ReferencesWithInterface.resi : tests/src/Jsx.resi : tests/src/DefinitionWithInterface.resi : tests/src/Rename.res : tests/src/Auto.res : tests/src/RenameWithInterface.resi : tests/src/RecModules.res : tests/src/Hover.res : tests/src/TypeDefinition.res : tests/src/Completion.res : tests/src/Cross.res : tests/src/Patterns.res : tests/src/RecordCompletion.res : tests/src/Component.resi : tests/src/Jsx.res : tests/src/References.res : tests/src/Component.res : tests/src/Fragment.res : tests/src/ReferencesWithInterface.res
16-
Adding intf tests/src/ReferencesWithInterface.resi
17-
Adding intf tests/src/Jsx.resi
15+
Source files found: tests/src/Auto.res : tests/src/Completion.res : tests/src/Component.res : tests/src/Component.resi : tests/src/Cross.res : tests/src/Debug.res : tests/src/Definition.res : tests/src/DefinitionWithInterface.res : tests/src/DefinitionWithInterface.resi : tests/src/Div.res : tests/src/Fragment.res : tests/src/Hover.res : tests/src/Jsx.res : tests/src/Jsx.resi : tests/src/Patterns.res : tests/src/RecModules.res : tests/src/RecordCompletion.res : tests/src/References.res : tests/src/ReferencesWithInterface.res : tests/src/ReferencesWithInterface.resi : tests/src/Rename.res : tests/src/RenameWithInterface.res : tests/src/RenameWithInterface.resi : tests/src/TypeDefinition.res
16+
Adding intf tests/src/Component.resi
1817
Adding intf tests/src/DefinitionWithInterface.resi
18+
Adding intf tests/src/Jsx.resi
19+
Adding intf tests/src/ReferencesWithInterface.resi
1920
Adding intf tests/src/RenameWithInterface.resi
20-
Adding intf tests/src/Component.resi
2121
-- All project files found: 19
22-
DefinitionWithInterface
23-
Both
24-
Div
25-
impl tests/lib/bs/./src/Div.cmt
26-
Definition
27-
impl tests/lib/bs/./src/Definition.cmt
28-
Debug
29-
impl tests/lib/bs/./src/Debug.cmt
30-
RenameWithInterface
31-
Both
32-
Rename
33-
impl tests/lib/bs/./src/Rename.cmt
3422
Auto
3523
impl tests/lib/bs/./src/Auto.cmt
36-
RecModules
37-
impl tests/lib/bs/./src/RecModules.cmt
38-
Hover
39-
impl tests/lib/bs/./src/Hover.cmt
40-
TypeDefinition
41-
impl tests/lib/bs/./src/TypeDefinition.cmt
4224
Completion
4325
impl tests/lib/bs/./src/Completion.cmt
26+
Component
27+
Both
4428
Cross
4529
impl tests/lib/bs/./src/Cross.cmt
30+
Debug
31+
impl tests/lib/bs/./src/Debug.cmt
32+
Definition
33+
impl tests/lib/bs/./src/Definition.cmt
34+
DefinitionWithInterface
35+
Both
36+
Div
37+
impl tests/lib/bs/./src/Div.cmt
38+
Fragment
39+
impl tests/lib/bs/./src/Fragment.cmt
40+
Hover
41+
impl tests/lib/bs/./src/Hover.cmt
42+
Jsx
43+
Both
4644
Patterns
4745
impl tests/lib/bs/./src/Patterns.cmt
46+
RecModules
47+
impl tests/lib/bs/./src/RecModules.cmt
4848
RecordCompletion
4949
impl tests/lib/bs/./src/RecordCompletion.cmt
50-
Jsx
51-
Both
5250
References
5351
impl tests/lib/bs/./src/References.cmt
54-
Component
55-
Both
56-
Fragment
57-
impl tests/lib/bs/./src/Fragment.cmt
5852
ReferencesWithInterface
5953
Both
54+
Rename
55+
impl tests/lib/bs/./src/Rename.cmt
56+
RenameWithInterface
57+
Both
58+
TypeDefinition
59+
impl tests/lib/bs/./src/TypeDefinition.cmt
6060
Dependency dirs tests/node_modules/@rescript/react/lib/bs/./src tests/node_modules/@rescript/react/lib/bs/./src/legacy
6161
Opens from bsconfig:
6262
locItems:

0 commit comments

Comments
 (0)