Skip to content

Commit 3a09df6

Browse files
committed
Address comments
1 parent 65c7c18 commit 3a09df6

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

Sources/SourceKitLSP/TestDiscovery.swift

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -441,13 +441,13 @@ fileprivate extension Array<AnnotatedTestItem> {
441441
// as the root item.
442442
if rootItem.isExtension && !item.isExtension {
443443
var newItem = item
444-
newItem.testItem.children = (newItem.testItem.children + rootItem.testItem.children).deduplicateIds()
444+
newItem.testItem.children = (newItem.testItem.children + rootItem.testItem.children).deduplicatingIds()
445445
rootItem = newItem
446446
} else if rootItem.testItem.children.isEmpty && item.testItem.children.isEmpty {
447447
itemDict[item.testItem.ambiguousTestDifferentiator] = item
448448
continue
449449
} else {
450-
rootItem.testItem.children = (rootItem.testItem.children + item.testItem.children).deduplicateIds()
450+
rootItem.testItem.children = (rootItem.testItem.children + item.testItem.children).deduplicatingIds()
451451
}
452452

453453
itemDict[id] = rootItem
@@ -487,7 +487,7 @@ fileprivate extension Array<AnnotatedTestItem> {
487487
.mergingTestsInExtensions()
488488
return newItem
489489
}
490-
return result.deduplicateIds()
490+
return result.deduplicatingIds()
491491
}
492492

493493
func prefixTestsWithModuleName(workspace: Workspace) async -> Self {
@@ -518,16 +518,25 @@ fileprivate extension Array<TestItem> {
518518
///
519519
/// If we encounter one of these cases, we need to deduplicate the ID
520520
/// by appending `/filename:filename:lineNumber`.
521-
func deduplicateIds() -> [TestItem] {
521+
func deduplicatingIds() -> [TestItem] {
522522
var idCounts: [String: Int] = [:]
523523
var result: [TestItem] = []
524+
var hasDuplicates = false
525+
result.reserveCapacity(self.count)
524526

525527
for element in self where element.children.isEmpty {
526528
idCounts[element.id, default: 0] += 1
529+
if idCounts[element.id, default: 0] > 1 {
530+
hasDuplicates = true
531+
}
532+
}
533+
534+
if !hasDuplicates {
535+
return self
527536
}
528537

529538
for element in self {
530-
if idCounts[element.id] ?? 0 > 1 {
539+
if idCounts[element.id, default: 0] > 1 {
531540
var newItem = element
532541
newItem.id = newItem.ambiguousTestDifferentiator
533542
result.append(newItem)

0 commit comments

Comments
 (0)