11module ParallelTypeCheckingTests.Code.TrieApproach.DependencyResolution
22
3+ open System.Linq
34open FSharp.Compiler .Syntax
45
56// This is pseudo code of how we could restructure the trie code
@@ -113,7 +114,7 @@ let rec processStateEntry (queryTrie: QueryTrie) (state: FileContentQueryState)
113114 }
114115
115116let getFileNameBefore ( files : FileWithAST array ) idx =
116- files.[ 0 .. ( idx - 1 )] |> Array.map ( fun f -> f.File ) |> Set.ofArray
117+ files.[ 0 .. ( idx - 1 )] |> Array.map ( fun f -> f.Idx ) |> Set.ofArray
117118
118119let time msg f a =
119120 let sw = System.Diagnostics.Stopwatch.StartNew()
@@ -123,21 +124,25 @@ let time msg f a =
123124 result
124125
125126let mkGraph ( files : FileWithAST array ) =
126- let trie =
127- let input =
128- files
129- |> Array.filter ( fun f ->
130- match f.AST with
131- | ParsedInput.SigFile _ -> true
132- | ParsedInput.ImplFile _ -> Array.forall ( fun ( sigFile : FileWithAST ) -> sigFile.File <> $" {f.File}i" ) files)
127+ let trieInput =
128+ files
129+ |> Array.filter ( fun f ->
130+ match f.AST with
131+ | ParsedInput.SigFile _ -> true
132+ | ParsedInput.ImplFile _ -> Array.forall ( fun ( sigFile : FileWithAST ) -> sigFile.File <> $" {f.File}i" ) files)
133133
134- time " TrieMapping.mkTrie" TrieMapping.mkTrie input
134+ let trie = time " TrieMapping.mkTrie" TrieMapping.mkTrie trieInput
135135
136136 let queryTrie : QueryTrie = queryTrieMemoized trie
137137
138138 let fileContents =
139139 time " FileContentMapping.mkFileContent" Array.Parallel.map FileContentMapping.mkFileContent files
140140
141+ let filesWithAutoOpen =
142+ trieInput
143+ |> Array.filter ( fun f -> AutoOpenDetection.hasAutoOpenAttributeInFile f.AST)
144+ |> Array.map ( fun f -> f.Idx)
145+
141146 time
142147 " mkGraph"
143148 Array.Parallel.map
@@ -146,9 +151,18 @@ let mkGraph (files: FileWithAST array) =
146151 let knownFiles = getFileNameBefore files file.Idx
147152
148153 let result =
149- Seq.fold ( processStateEntry queryTrie) ( FileContentQueryState.Create file.File knownFiles) fileContent
154+ Seq.fold ( processStateEntry queryTrie) ( FileContentQueryState.Create file.Idx knownFiles) fileContent
155+
156+ let allDependencies =
157+ if filesWithAutoOpen.Length > 0 then
158+ let autoOpenDependencies =
159+ set ([| 0 .. ( file.Idx - 1 ) |]. Intersect( filesWithAutoOpen))
160+
161+ Set.union result.FoundDependencies autoOpenDependencies
162+ else
163+ result.FoundDependencies
150164
151- file, Set.toArray result.FoundDependencies )
165+ file, Set.toArray allDependencies )
152166 files
153167
154168// =============================================================================================================
@@ -170,7 +184,10 @@ let mkGraphAndReport files =
170184 let graph = mkGraph filesWithAST
171185
172186 for fileName, deps in graph do
173- let depString = String.concat " \n " deps
187+ let depString =
188+ deps
189+ |> Array.map ( fun depIdx -> filesWithAST.[ depIdx]. File)
190+ |> String.concat " \n "
174191
175192 if deps.Length = 0 then
176193 printfn $" %s {fileName.File}: []"
0 commit comments