Files
swift-mirror/test/IDE/complete_implicit_last_expr.swift
Daniel Rodríguez Troitiño ba68faaed5 [test] Mark tests that use experimental/upcoming features as such
Find all the usages of `--enable-experimental-feature` or
`--enable-upcoming-feature` in the tests and replace some of the
`REQUIRES: asserts` to use `REQUIRES: swift-feature-Foo` instead, which
should correctly apply to depending on the asserts/noasserts mode of the
toolchain for each feature.

Remove some comments that talked about enabling asserts since they don't
apply anymore (but I might had miss some).

All this was done with an automated script, so some formatting weirdness
might happen, but I hope I fixed most of those.

There might be some tests that were `REQUIRES: asserts` that might run
in `noasserts` toolchains now. This will normally be because their
feature went from experimental to upcoming/base and the tests were not
updated.
2024-11-02 11:46:46 -07:00

147 lines
3.3 KiB
Swift

// RUN: %batch-code-completion -enable-experimental-feature ImplicitLastExprResults -debug-forbid-typecheck-prefix FORBIDDEN
// REQUIRES: swift_feature_ImplicitLastExprResults
enum E {
case e
case f(Int)
}
struct NO {
// Triggering interface type computation of this will cause an assert to fire,
// ensuring we don't attempt to type-check any references to it.
static var TYPECHECK = FORBIDDEN
}
func test1() -> E {
if .random() {
();
.#^DOT1?check=DOT^#
} else {
.e
}
}
func test2() -> E {
switch Bool.random() {
case true:
.e
case false:
();
.#^DOT2?check=DOT^#
}
}
func test3() throws -> E {
switch Bool.random() {
case true:
NO.TYPECHECK
throw NO.TYPECHECK
case false:
();
.#^DOT3?check=DOT^#
}
}
struct S {
var e: E
}
func test4() throws -> E {
let x = switch Bool.random() {
case true:
NO.TYPECHECK
throw NO.TYPECHECK
case false:
let s = S(e: .e)
s.#^SDOT1?check=SDOT^#
}
return x
}
func test5() -> E {
();
.#^DOT4?check=DOT^#
}
func test6() -> E {
let fn: () -> E = {
();
.#^DOT5?check=DOT^#
}
return fn()
}
func test7() throws -> E {
print("hello")
switch Bool.random() {
case true:
NO.TYPECHECK
throw NO.TYPECHECK
case false:
();
.#^DOT7?check=DOT^#
}
}
// SDOT: Begin completions, 2 items
// SDOT-DAG: Keyword[self]/CurrNominal: self[#S#]; name=self
// SDOT-DAG: Decl[InstanceVar]/CurrNominal: e[#E#]; name=e
// DOT: Begin completions, 2 items
// DOT-DAG: Decl[EnumElement]/CurrNominal/Flair[ExprSpecific]/TypeRelation[Convertible]: e[#E#]; name=e
// DOT-DAG: Decl[EnumElement]/CurrNominal/Flair[ExprSpecific]/TypeRelation[Convertible]: f({#Int#})[#E#]; name=f()
struct TestImplicitLastExprMember {
func void() -> Void {}
func str() -> String { return "" }
func int() -> Int { return 0 }
func test1() -> Int {
print("hello")
#^TestImplicitLastExprMember1?check=IMPLICIT_LAST_EXPR_MEMBER^#
}
func test2() -> Int {
print("hello")
self.#^TestImplicitLastExprMember2?check=IMPLICIT_LAST_EXPR_MEMBER^#
}
func test3() -> Int {
{
print("hello")
#^TestImplicitLastExprMember3?check=IMPLICIT_LAST_EXPR_MEMBER^#
}()
}
func test4() -> Int {
();
{
print("hello")
self.#^TestImplicitLastExprMember4?check=IMPLICIT_LAST_EXPR_MEMBER^#
}()
}
// IMPLICIT_LAST_EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: void()[#Void#]; name=void()
// IMPLICIT_LAST_EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal: str()[#String#]; name=str()
// IMPLICIT_LAST_EXPR_MEMBER-DAG: Decl[InstanceMethod]/CurrNominal/TypeRelation[Convertible]: int()[#Int#]; name=int()
func test5() {
let fn = {
print("hello")
self.#^TestImplicitLastExprMember5?check=IMPLICIT_LAST_EXPR_MEMBER_VOID^#
}
}
func test6() {
let fn: () -> Void = {
print("hello")
#^TestImplicitLastExprMember6?check=IMPLICIT_LAST_EXPR_MEMBER_VOID^#
}
}
// IMPLICIT_LAST_EXPR_MEMBER_VOID-DAG: Decl[InstanceMethod]/CurrNominal: void()[#Void#]; name=void()
// IMPLICIT_LAST_EXPR_MEMBER_VOID-DAG: Decl[InstanceMethod]/CurrNominal: str()[#String#]; name=str()
// IMPLICIT_LAST_EXPR_MEMBER_VOID-DAG: Decl[InstanceMethod]/CurrNominal: int()[#Int#]; name=int()
}