diff --git a/scaladoc/src/dotty/tools/scaladoc/tasty/TastyParser.scala b/scaladoc/src/dotty/tools/scaladoc/tasty/TastyParser.scala index 4b5d4fab2a0a..8b2169ee4b36 100644 --- a/scaladoc/src/dotty/tools/scaladoc/tasty/TastyParser.scala +++ b/scaladoc/src/dotty/tools/scaladoc/tasty/TastyParser.scala @@ -169,7 +169,12 @@ object ScaladocTastyInspector: val withNewMembers = p1.withNewMembers(p2.members) if withNewMembers.docs.isEmpty then withNewMembers.withDocs(p2.docs) else withNewMembers ) - basePck.withMembers((basePck.members ++ rest).sortBy(_.name)) + // Deduplicate members coming from different parser instances by a stable key: + // (location, member fullName, kind name). + val combined = basePck.members ++ rest + val keyed = combined.groupBy(m => (m.dri.location, m.fullName, m.kind.name)) + val uniqueMembers = keyed.values.map(g => g.find(_.docs.nonEmpty).getOrElse(g.head)).toList.sortBy(_.name) + basePck.withMembers(uniqueMembers) }.toList -> inspector.rootDoc end ScaladocTastyInspector