mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[SymbolGraph] Only include where clause constraints in swiftExtension
Otherwise, this creates noise in conditional conformance phrasings. rdar://64425199
This commit is contained in:
@@ -69,9 +69,7 @@ void swift::symbolgraphgen::serialize(const ExtensionDecl *Extension,
|
||||
|
||||
SmallVector<Requirement, 4> FilteredRequirements;
|
||||
|
||||
filterGenericRequirements(Extension->getGenericRequirements(),
|
||||
Extension->getExtendedNominal()
|
||||
->getDeclContext()->getSelfNominalTypeDecl(),
|
||||
filterGenericRequirements(Extension,
|
||||
FilteredRequirements);
|
||||
|
||||
if (!FilteredRequirements.empty()) {
|
||||
@@ -122,24 +120,36 @@ void swift::symbolgraphgen::filterGenericRequirements(
|
||||
const NominalTypeDecl *Self,
|
||||
SmallVectorImpl<Requirement> &FilteredRequirements) {
|
||||
for (const auto &Req : Requirements) {
|
||||
if (Req.getKind() == RequirementKind::Layout) {
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
Don't serialize constraints that aren't applicable for display.
|
||||
|
||||
For example:
|
||||
|
||||
extension Equatable {
|
||||
func foo(_ thing: Self) {}
|
||||
}
|
||||
|
||||
`foo` includes a constraint `Self: Equatable` for the compiler's purposes,
|
||||
but that's redundant for the purposes of documentation.
|
||||
This is extending Equatable, after all!
|
||||
*/
|
||||
if (Req.getFirstType()->getString() == "Self" &&
|
||||
Req.getSecondType()->getAnyNominal() == Self) {
|
||||
if (Req.getKind() == RequirementKind::Layout) {
|
||||
continue;
|
||||
}
|
||||
// extension /* protocol */ Q {
|
||||
// func foo() {}
|
||||
// }
|
||||
// ignore Self : Q, obvious
|
||||
if (Req.getSecondType()->getAnyNominal() == Self) {
|
||||
continue;
|
||||
}
|
||||
FilteredRequirements.push_back(Req);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
swift::symbolgraphgen::filterGenericRequirements(const ExtensionDecl *Extension,
|
||||
SmallVectorImpl<Requirement> &FilteredRequirements) {
|
||||
for (const auto &Req : Extension->getGenericRequirements()) {
|
||||
if (Req.getKind() == RequirementKind::Layout) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isa<ProtocolDecl>(Extension->getExtendedNominal()) &&
|
||||
Req.getFirstType()->isEqual(Extension->getExtendedType())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// extension /* protocol */ Q
|
||||
// ignore Self : Q, obvious
|
||||
if (Req.getSecondType()->isEqual(Extension->getExtendedType())) {
|
||||
continue;
|
||||
}
|
||||
FilteredRequirements.push_back(Req);
|
||||
|
||||
Reference in New Issue
Block a user