Skip to content

Commit 8683df8

Browse files
authored
Merge pull request #316 from tayloraswift/deduplicate-link-resolver-diagnostics
de-duplicate link resolver diagnostics
2 parents 30d12ea + 3e9bdfa commit 8683df8

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

Sources/LinkResolution/UCF.ProjectWideResolver.swift

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import FNV1
12
import InlineArray
23
import UCF
34

@@ -30,7 +31,7 @@ extension UCF.ProjectWideResolver
3031
public
3132
func resolve(_ selector:UCF.Selector) -> UCF.Resolution<any UCF.ResolvableOverload>
3233
{
33-
var rejected:[any UCF.ResolvableOverload]
34+
var rejected:[FNV24: any UCF.ResolvableOverload]
3435

3536
if let causal:UCF.ResolutionTable<UCF.CausalOverload> = self.causal
3637
{
@@ -43,18 +44,18 @@ extension UCF.ProjectWideResolver
4344
return .overload(overload)
4445

4546
case .ambiguous(let overloads, rejected: let rejections):
46-
rejected = rejections
47+
rejected = rejections.reduce(into: [:]) { $0[$1.hash] = $1 }
4748

4849
guard overloads.isEmpty
4950
else
5051
{
51-
return .ambiguous(overloads, rejected: rejected)
52+
return .ambiguous(overloads, rejected: [_].init(rejected.values))
5253
}
5354
}
5455
}
5556
else
5657
{
57-
rejected = []
58+
rejected = [:]
5859
}
5960

6061
switch self.global.resolve(selector, in: self.scope)
@@ -66,9 +67,12 @@ extension UCF.ProjectWideResolver
6667
return .overload(overload)
6768

6869
case .ambiguous(let overloads, rejected: let rejections):
69-
rejected += rejections
70+
for overload:any UCF.ResolvableOverload in rejections
71+
{
72+
rejected[overload.hash] = overload
73+
}
7074

71-
return .ambiguous(overloads, rejected: rejected)
75+
return .ambiguous(overloads, rejected: [_].init(rejected.values))
7276
}
7377
}
7478
}

0 commit comments

Comments
 (0)