Files
swift-mirror/test/SymbolGraph/Module/NestedExtensions.swift
Ashley Garland d6e49a98db [SymbolGraph] Put extending declarations in rootmost module
When extending another module's type in your module, serialize declarations in
the extension into the other module's "extension" symbol graph file, including
relationships. This mechanic should continue up to the rootmost module. For
example:

A.AStruct <- B.BStruct < C.CStruct

Both BStruct and CStruct should go in `@A` symbol graph files because AStruct
owns BStruct and by extension owns CStruct. This is reflected in
documentation curation in some form already.

rdar://60796811
2020-04-07 15:41:59 -07:00

45 lines
1.7 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-build-swift %S/Inputs/NestedExtensions/A.swift -I %t -module-name A -emit-module -emit-module-path %t/
// RUN: %target-build-swift %S/Inputs/NestedExtensions/B.swift -I %t -module-name B -emit-module -emit-module-path %t/
// RUN: %target-build-swift %s -module-name NestedExtensions -emit-module -I %t -emit-module-path %t/
// RUN: %target-swift-symbolgraph-extract -module-name A -I %t -pretty-print -output-dir %t
// RUN: %target-swift-symbolgraph-extract -module-name B -I %t -pretty-print -output-dir %t
// RUN: %target-swift-symbolgraph-extract -module-name NestedExtensions -I %t -pretty-print -output-dir %t
// RUN: %FileCheck %s --input-file %t/B.symbols.json --check-prefix=MODULEB
// RUN: %FileCheck %s --input-file %t/B@A.symbols.json --check-prefix=MODULEBATA
// RUN: %FileCheck %s --input-file %t/NestedExtensions@A.symbols.json --check-prefix=NESTEDATA
// RUN: %FileCheck %s --input-file %t/NestedExtensions.symbols.json --check-prefix=NESTED
import A
import B
extension AStruct.BStruct {
public struct CStruct: P {
public func foo() -> UInt8 {
return 0
}
}
}
extension AStruct.BStruct {
public func baz() {}
}
extension AStruct.BStruct.CStruct where Thing: Equatable {
public func baz() {}
}
// BStruct belongs to AStruct and so should only ever appear in B@A extension symbol graph files.
// MODULEB-NOT: BStruct
// MODULEBATA: "precise": "s:1A7AStructV1BE7BStructV"
// CStruct belongs to BStruct, and BStruct belongs to AStruct, so should only appear in NestedExtension@A.
// NESTED-NOT: BStruct
// NESTED-NOT: CStruct
// NESTEDATB-NOT: BStruct
// NESTEDATA: "precise": "s:1A7AStructV1BE7BStructV16NestedExtensionsE7CStructV"