Files
swift-mirror/test/SymbolGraph/Symbols/UnderscoredProtocols.swift
QuietMisdreavus d5d00011f3 [SymbolGraphGen] improve handling of underscored protocols (#77251)
* treat children of underscored protocols as public

Children of underscored protocols should be treated as native children
of their conforming types. To accomplish this, ignore underscored
protocols in the isInherentlyPrivate check.

rdar://124483146

* include underscored protocol methods even when skipping protocols

rdar://128143861
2024-10-28 13:44:03 -07:00

43 lines
1.7 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -module-name UnderscoredProtocols -emit-module -emit-module-path %t/
// RUN: %target-swift-symbolgraph-extract -module-name UnderscoredProtocols -I %t -pretty-print -output-dir %t
// RUN: %FileCheck %s --input-file %t/UnderscoredProtocols.symbols.json
// RUN: %target-swift-symbolgraph-extract -module-name UnderscoredProtocols -I %t -skip-protocol-implementations -pretty-print -output-dir %t
// RUN: %FileCheck %s --input-file %t/UnderscoredProtocols.symbols.json
// Make sure that underscored protocols do not appear in public symbol graphs, but their
// requirements do appear on types which conform to them.
// Also ensure that default implementations of underscored protocols appear on implementing types as
// if they were native children of that type. No 'sourceOrigin' information should appear in their
// relationships and no implementation relationships should exist.
// CHECK-DAG: "precise": "s:20UnderscoredProtocols10SomeStructV8someFuncyyF",
// CHECK-DAG: "precise": "s:20UnderscoredProtocols15_HiddenProtocolPAAE9bonusFuncyyF::SYNTHESIZED::s:20UnderscoredProtocols10SomeStructV"
// CHECK-NOT: "precise": "s:20UnderscoredProtocols15_HiddenProtocolP",
// CHECK-NOT: "defaultImplementationOf"
// CHECK-NOT: "requirementOf"
// CHECK-NOT: "optionalRequirementOf"
// CHECK-NOT: "overrides"
// CHECK-NOT: "sourceOrigin"
// CHECK-NOT: "s:20UnderscoredProtocols15_HiddenProtocolPAAE9bonusFuncyyF"
public protocol _HiddenProtocol {
func someFunc()
}
extension _HiddenProtocol {
public func bonusFunc() {}
}
public struct SomeStruct {}
extension SomeStruct: _HiddenProtocol {
public func someFunc() {}
}