mirror of
https://github.com/apple/swift.git
synced 2025-12-25 12:15:36 +01:00
This includes: - bumping the SWIFT_SYMBOLGRAPH_FORMAT_MINOR version - introduction of the "swift.extension" symbol and "extensionTo" relationship - adding support for ExtensionDecl to the Symbol class - adding a "typeKind" field to the symbol's extension mixin which indicates what kind of symbol was extended - intoduction of the -emit-extension-block-symbols flag, which enables the behavior outlined below - adaptions to SymbolGraphASTWalker that ensure a swift.extension symbol is emitted for each extension to a type that does not exist in the local symbol graph - adaptions to SymbolGraph and SymbolGraphASTWalker that ensure member and conformance relationships are correctly associated with the swift.extension symbol instead of the original type declaration's (extended nominal's) symbol where applicable - adaptions to SymbolGraphASTWalker that ensure swift.extension symbols are connected to their respective extended nominal's symbol using an extensionTo relationship Testing: - adds SymbolGraph tests that test behavior only relevant in -emit-extension-block-symbols mode - adapts some SymbolGraph tests to additionally test similar behavior for extensions to external types in -emit-extension-block-symbols mode - adapts some SymbolGraph tests to (additionally or exclusively) test the behavior with -emit-extension-block-symbols mode enabled Bugfixes: - fixes a bug where some conformsTo relationships implicated by the conformances declared on an extension to an external type were not emitted (see test/SymbolGraph/Relationships/ConformsTo/Indirect.swift) Further changes: - documents the strategy for naming and associating children declared in extensions to typealiases (see test/SymbolGraph/Relationships/MemberOf/Typealias.swift, test/SymbolGraph/Symbols/Names.swift)
72 lines
3.0 KiB
Swift
72 lines
3.0 KiB
Swift
// Testing with Extension Block Symbols Off:
|
|
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/
|
|
// RUN: %target-swift-symbolgraph-extract -module-name BasicExtension -I %t -pretty-print -output-dir %t
|
|
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,EXTRACT,EBSOff,EBSOff_EXTRACT
|
|
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/ -emit-symbol-graph -emit-symbol-graph-dir %t
|
|
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,BUILD,EBSOff,EBSOff_BUILD
|
|
|
|
|
|
// Testing with Extension Block Symbols On:
|
|
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/
|
|
// RUN: %target-swift-symbolgraph-extract -module-name BasicExtension -I %t -pretty-print -output-dir %t -emit-extension-block-symbols
|
|
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,EXTRACT,EBSOn,EBSOn_EXTRACT
|
|
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/ -emit-symbol-graph -emit-symbol-graph-dir %t -emit-extension-block-symbols
|
|
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,BUILD,EBSOn,EBSOn_BUILD
|
|
|
|
/// We add some useless capabilities to ``Swift/String``.
|
|
extension String {
|
|
/// Return something.
|
|
public var something: String {
|
|
return "something"
|
|
}
|
|
}
|
|
|
|
|
|
// Check for module name:
|
|
|
|
// ALL-LABEL: module
|
|
|
|
// ALL: {{"name": ?"BasicExtension"}}
|
|
|
|
|
|
// Check for Symbols and Documentation Strings:
|
|
|
|
// Symbols and relationships are not ordered. Therefore, we have to use
|
|
// the `-DAG` variant if we have more than one symbol/relationship.
|
|
|
|
// ALL-LABEL: symbols
|
|
|
|
// ALL-DAG: {{"precise": ?"s:SS14BasicExtensionE9somethingSSvp"}}
|
|
// EBSOn-DAG: {{"precise": ?"s:e:s:SS14BasicExtensionE9somethingSSvp"}}
|
|
|
|
// BUILD-DAG: Return something.
|
|
// EBSOn_BUILD-DAG: We add some useless capabilities to ``Swift/String``.
|
|
|
|
// EBSOn-DAG: {{"swiftExtension": ?{[[:space:]]*"extendedModule": ?"Swift",[[:space:]]*"typeKind": ?"swift.struct"[[:space:]]*}}}
|
|
|
|
// Check for Relationships:
|
|
|
|
// ALL-LABEL: relationships
|
|
|
|
// EBSOff: {{"kind": ?"memberOf",[[:space:]]*"source": ?"s:SS14BasicExtensionE9somethingSSvp",[[:space:]]*"target": ?"s:SS"}}
|
|
|
|
// EBSOn-DAG: {{"kind": ?"memberOf",[[:space:]]*"source": ?"s:SS14BasicExtensionE9somethingSSvp",[[:space:]]*"target": ?"s:e:s:SS14BasicExtensionE9somethingSSvp"}}
|
|
// EBSOn-DAG: {{"kind": ?"extensionTo",[[:space:]]*"source": ?"s:e:s:SS14BasicExtensionE9somethingSSvp",[[:space:]]*"target": ?"s:SS"}}
|
|
|
|
|
|
// Check for Symbols that should NOT be included:
|
|
|
|
// Extending `String` creates a memberOf relationship above.
|
|
// However, it should not be included as a node because `String`
|
|
// is owned by the Swift module.
|
|
// rdar://58876107
|
|
// ALL-NOT: {{"precise": ?"s:SS"}}
|