mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[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
This commit is contained in:
44
test/SymbolGraph/Module/NestedExtensions.swift
Normal file
44
test/SymbolGraph/Module/NestedExtensions.swift
Normal file
@@ -0,0 +1,44 @@
|
||||
// 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"
|
||||
Reference in New Issue
Block a user