Files
swift-mirror/test/Sema/accessibility_package_contextual_keyword.swift
2023-03-17 17:01:47 -07:00

67 lines
2.1 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: split-file %s %t
// RUN: %target-swift-frontend-typecheck -verify -disable-availability-checking %t/main.swift -package-name myPkg
// RUN: %target-swift-frontend-typecheck -verify -disable-availability-checking %t/A.swift -package-name myPkg
// RUN: %target-swift-frontend-typecheck -verify -disable-availability-checking %t/B.swift -package-name myPkg
// RUN: %target-swift-frontend-typecheck -verify -disable-availability-checking %t/D.swift -package-name myPkg
// RUN: not %target-swift-frontend-typecheck -verify -disable-availability-checking %t/C.swift -package-name myPkg 2>&1 | %FileCheck %s
//--- main.swift
package(set) public var a: String // should pass when `package` modifier is used at top level decls
public package(set) var b: String
package let c: Int
package var d: Int
package func f() {}
package func package() {}
package()
//--- A.swift
package class package { // package can be a type name
package init() {}
package var package: String? // package can be a var name
}
package class pkg {
package init() {}
package func package() {} // package can be a func name
package func package(arg: Int) {}
package func package(_ arg: Double) {}
}
public class MyClass {
var myVar1: package = package()
var myVar2: pkg = pkg()
func myFunc() {
_ = myVar1.package
myVar2.package()
myVar2.package(arg: 1)
myVar2.package(2.0)
}
}
//--- B.swift
public class Foo {
package(set) public var x: String?
public package(set) var y: Int?
}
//--- C.swift
public class Bar {
package package(set) package: String? // CHECK: warning: 'package(set)' modifier is redundant for a package var
package(set) package package: String? // CHECK: warning: 'package(set)' modifier is redundant for a package var
}
//--- D.swift
enum MyColor {
case red, green, blue
}
let packages: [MyColor] = [MyColor.red, MyColor.blue].compactMap { package in
switch package {
case .blue: return package // Should not error when `case` follows the `package` contextual keyword
case .red: return package
default: return nil
}
}