Files
swift-mirror/test/ModuleInterface/where-clause.swift
Varun Gandhi 02afb9d49b [ModuleInterface] Print full type if ambiguous for extensions.
The patch introduces a new setting instead of changing existing settings
because the generated interfaces in the IDE have slightly different
requirements; the extended type there is unconditionally not printed
qualified (even if it is ambiguous). This is likely because the
ambiguity heuristic is very weak; it doesn't even do name lookup.
Simplifying that logic would be nice, but then we'd need to update
a bunch of IDE/print* tests and end up with more more visual clutter
in the IDE.

Introducing the new setting means we can change the behavior for
swiftinterface files without affecting the behavior for IDE interfaces.

Fixes rdar://79093752.
2021-06-11 20:04:43 -07:00

54 lines
1.9 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -typecheck %s -emit-module-interface-path %t/main.swiftinterface -enable-library-evolution
// RUN: %FileCheck %s < %t/main.swiftinterface
// RUN: %target-swift-frontend -emit-module -module-name main -primary-file %s -emit-module-path %t/main~partial.swiftmodule -enable-library-evolution
// RUN: %target-swift-frontend -merge-modules %t/main~partial.swiftmodule -emit-module-path %t/main.swiftmodule -emit-module-interface-path %t/main.swiftinterface -enable-library-evolution
// RUN: %FileCheck %s < %t/main.swiftinterface
// CHECK: import Swift
// CHECK: public struct Holder<Value> {
public struct Holder<Value> {
var value: Value
// CHECK-NEXT: public init(value: Value){{$}}
public init(value: Value) {
self.value = value
}
// CHECK-NEXT: public init<T>(_ value: T) where Value == Swift.AnyHashable, T : Swift.Hashable{{$}}
public init<T : Hashable>(_ value: T) where Value == AnyHashable {
self.value = value
}
// CHECK-NEXT: public struct Transform<Result> {
public struct Transform<Result> {
var fn: (Value) -> Result
// CHECK-NEXT: public init(fn: @escaping (Value) -> Result){{$}}
public init(fn: @escaping (Value) -> Result) {
self.fn = fn
}
// CHECK-NEXT: func transform(_ holder: main.Holder<Value>) -> Result{{$}}
public func transform(_ holder: Holder<Value>) -> Result {
return fn(holder.value)
}
// CHECK-NEXT: }
}
// CHECK-NEXT: }
}
// CHECK-NEXT: extension main.Holder.Transform where Value == Swift.Int {
extension Holder.Transform where Value == Int {
// CHECK-NEXT: public func negate(_ holder: main.Holder<Value>) -> Result{{$}}
public func negate(_ holder: Holder<Value>) -> Result {
return transform(Holder(value: -holder.value))
}
}