Files
swift-mirror/test/IDE/print_swift_module.swift
Pavel Yaskevich 6b323f1663 [BuilderTransform] Verify that builder type has at least one accessible build{Partial}Block
Check accessibility of all build{Partial}Block overloads and
diagnose if none of them are as accessible as type, otherwise
swift interfaces could end up with invalid result builder
declarations when type is public and all builder methods are
internal.

Resolves: rdar://104384604
2023-03-08 12:46:50 -08:00

71 lines
2.1 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module-path %t/print_swift_module.swiftmodule -emit-module-doc -emit-module-doc-path %t/print_swift_module.swiftdoc %s
// RUN: %target-swift-ide-test -print-module -print-interface -no-empty-line-between-members -module-to-print=print_swift_module -I %t -source-filename=%s > %t.syn.txt
// RUN: %target-swift-ide-test -print-module -access-filter-internal -no-empty-line-between-members -module-to-print=print_swift_module -I %t -source-filename=%s > %t.syn.internal.txt
// RUN: %FileCheck %s -check-prefix=CHECK1 < %t.syn.txt
// RUN: %FileCheck %s -check-prefix=CHECK2 < %t.syn.internal.txt
public protocol P1 {
/// foo1 comment from P1
func foo1()
/// foo2 comment from P1
func foo2()
}
public class C1 : P1 {
public func foo1() {
}
/// foo2 comment from C1
public func foo2() {
}
}
/// Alias comment
public typealias Alias<T> = (T, T)
/// returnsAlias() comment
public func returnsAlias() -> Alias<Int> {
return (0, 0)
}
@resultBuilder
public struct BridgeBuilder {
public static func buildBlock(_: Any...) {}
}
public struct City {
public init(@BridgeBuilder builder: () -> ()) {}
}
// CHECK1: /// Alias comment
// CHECK1-NEXT: typealias Alias<T> = (T, T)
// CHECK1: public class C1 : print_swift_module.P1 {
// CHECK1-NEXT: /// foo1 comment from P1
// CHECK1-NEXT: public func foo1()
// CHECK1-NEXT: /// foo2 comment from C1
// CHECK1-NEXT: public func foo2()
// CHECK1-NEXT: }
// CHECK1: public init(@print_swift_module.BridgeBuilder builder: () -> ())
// CHECK1: public protocol P1 {
// CHECK1-NEXT: /// foo1 comment from P1
// CHECK1-NEXT: func foo1()
// CHECK1-NEXT: /// foo2 comment from P1
// CHECK1-NEXT: func foo2()
// CHECK1-NEXT: }
// CHECK1: /// returnsAlias() comment
// CHECK1-NEXT: func returnsAlias() -> print_swift_module.Alias<Int>
// CHECK2: struct Event {
public struct Event {
public var start: Int
public var end: Int?
public var repeating: ((), Int?)
public var name = "untitled event"
// CHECK2: init(start: Int, end: Int? = nil, repeating: ((), Int?) = ((), nil), name: String = "untitled event")
}
// CHECK2: }