Skip to content

Commit b3b9e2f

Browse files
committed
improve naming, add comments for added misoreded implementation scenario
1 parent 277a6dc commit b3b9e2f

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

src/Compiler/Driver/GraphChecking/DependencyResolution.fs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,10 @@ let mkGraph (filePairs: FilePairMap) (files: FileInProject array) : Graph<FileIn
236236
| None -> Array.empty
237237
| Some sigIdx -> Array.singleton sigIdx
238238

239-
let wrongOrderSignature =
240-
match filePairs.TryGetWrongOrderSignatureToImplementationIndex file.Idx with
239+
// Add a link from signature files to their implementation files, if the implementation file comes before the signature file.
240+
// This allows us to emit FS0238 (implementation already given).
241+
let implementationGivenBeforeSignature =
242+
match filePairs.TryGetOutOfOrderImplementationIndex file.Idx with
241243
| None -> Array.empty
242244
| Some idx -> Array.singleton idx
243245

@@ -246,7 +248,7 @@ let mkGraph (filePairs: FilePairMap) (files: FileInProject array) : Graph<FileIn
246248
yield! depsResult.FoundDependencies
247249
yield! ghostDependencies
248250
yield! signatureDependency
249-
yield! wrongOrderSignature
251+
yield! implementationGivenBeforeSignature
250252
|]
251253
|> Array.distinct
252254

src/Compiler/Driver/GraphChecking/Types.fs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,14 @@ type internal FilePairMap(files: FileInProject array) =
173173
|> Option.map (fun (implFile: FileInProject) -> (sigFile.Idx, implFile.Idx)))
174174
|> Array.choose id
175175

176-
let goodPairs, wrongOrderPairs =
176+
let goodPairs, misorderedPairs =
177177
pairs |> Array.partition (fun (sigIdx, implIdx) -> sigIdx < implIdx)
178178

179179
let sigToImpl, implToSig = buildBiDirectionalMaps goodPairs
180180

181-
// Pairs where the signature file comes after the implementation file in the project order. We need to track them to report such errors.
182-
let wrongOrder = wrongOrderPairs |> Map.ofArray
181+
// Pairs where the signature file comes after the implementation file in the project order.
182+
// We need to track them to report FS0238 (implementation already given).
183+
let misordered = misorderedPairs |> Map.ofArray
183184

184185
member x.GetSignatureIndex(implementationIndex: FileIndex) = Map.find implementationIndex implToSig
185186
member x.GetImplementationIndex(signatureIndex: FileIndex) = Map.find signatureIndex sigToImpl
@@ -195,7 +196,8 @@ type internal FilePairMap(files: FileInProject array) =
195196

196197
member x.IsSignature(index: FileIndex) = Map.containsKey index sigToImpl
197198

198-
member x.TryGetWrongOrderSignatureToImplementationIndex(index: FileIndex) = wrongOrder |> Map.tryFind index
199+
member x.TryGetOutOfOrderImplementationIndex(signatureIndex: FileIndex) =
200+
misordered |> Map.tryFind signatureIndex
199201

200202
/// Callback that returns a previously calculated 'Result and updates 'State accordingly.
201203
type internal Finisher<'Node, 'State, 'Result> = Finisher of node: 'Node * finisher: ('State -> 'Result * 'State)

src/Compiler/Driver/GraphChecking/Types.fsi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ type internal FilePairMap =
117117
member HasSignature: implementationIndex: FileIndex -> bool
118118
member TryGetSignatureIndex: implementationIndex: FileIndex -> FileIndex option
119119
member IsSignature: index: FileIndex -> bool
120-
member TryGetWrongOrderSignatureToImplementationIndex: index: FileIndex -> FileIndex option
120+
/// Covers the case where the implementation file appears before the signature file in the project.
121+
/// This is needed only to correctly trigger FS0238 (implementation already given).
122+
member TryGetOutOfOrderImplementationIndex: signatureIndex: FileIndex -> FileIndex option
121123

122124
/// Callback that returns a previously calculated 'Result and updates 'State accordingly.
123125
type internal Finisher<'Node, 'State, 'Result> = Finisher of node: 'Node * finisher: ('State -> 'Result * 'State)

0 commit comments

Comments
 (0)