mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The logic here for completion wasn't actually helping things since it would result in adding the var overload to the system, which would result in an ErrorType binding. We could turn the ErrorType into a placeholder when resolving the overload, but the simpler solution is to just allow CSGen to turn the reference into a PlaceholderType. This matches what we do for regular solving, and fixes a crash with an IUO completion. rdar://89369091
108 lines
4.6 KiB
Swift
108 lines
4.6 KiB
Swift
()
|
|
let var1 = 1
|
|
let var2: Int = 1
|
|
// RUN: %sourcekitd-test -req=complete -pos=1:2 %s -- %s | %FileCheck %s -check-prefix=COMPLETE_1
|
|
// RUN: %sourcekitd-test -req=complete -pos=2:12 %s -- %s | %FileCheck %s -check-prefix=COMPLETE_1
|
|
// RUN: %sourcekitd-test -req=complete -pos=3:17 %s -- %s | %FileCheck %s -check-prefix=COMPLETE_2
|
|
|
|
// COMPLETE_1-NOT: source.lang.swift.literal
|
|
// COMPLETE_1: source.lang.swift.literal.color
|
|
// COMPLETE_1: source.lang.swift.literal.image
|
|
// COMPLETE_1-NOT: source.lang.swift.literal
|
|
// COMPLETE_1: key.name: "nil"
|
|
// COMPLETE_1-NOT: source.lang.swift.literal
|
|
|
|
// COMPLETE_2-NOT: source.lang.swift.literal
|
|
// COMPLETE_2: key.name: "nil"
|
|
// COMPLETE_2-NOT: source.lang.swift.literal
|
|
|
|
// RUN: %sourcekitd-test -req=complete.open -pos=1:2 %s -- %s | %FileCheck %s -check-prefix=LITERALS
|
|
// LITERALS: key.kind: source.lang.swift.literal.string
|
|
// LITERALS: key.sourcetext: "\"<#{{.*}}#>\""
|
|
// LITERALS: key.kind: source.lang.swift.literal.boolean
|
|
// LITERALS: key.kind: source.lang.swift.literal.array
|
|
// LITERALS: key.sourcetext: "[<#{{.*}}#>]"
|
|
// LITERALS: key.kind: source.lang.swift.literal.dictionary
|
|
// LITERALS: key.sourcetext: "[<#{{.*}}#>: <#{{.*}}#>]"
|
|
// LITERALS: key.kind: source.lang.swift.literal.tuple
|
|
// LITERALS: key.sourcetext: "(<#{{.*}}#>)"
|
|
// LITERALS: key.kind: source.lang.swift.literal.nil
|
|
|
|
// RUN: %complete-test -tok=STMT1 %s -raw | %FileCheck %s -check-prefix=STMT
|
|
// RUN: %complete-test -tok=STMT2 %s -raw | %FileCheck %s -check-prefix=STMT
|
|
// RUN: %complete-test -tok=STMT3 %s -raw | %FileCheck %s -check-prefix=STMT
|
|
// STMT-NOT: source.lang.swift.literal
|
|
|
|
#^STMT1^#
|
|
|
|
if true {
|
|
#^STMT2^#
|
|
}
|
|
func foo(_ x: Int) {
|
|
#^STMT3^#
|
|
}
|
|
|
|
// RUN: %complete-test -tok=EXPR1 %s -raw | %FileCheck %s -check-prefix=LITERALS
|
|
// RUN: %complete-test -tok=EXPR2 %s -raw | %FileCheck %s -check-prefix=LITERALS_PLUS
|
|
// RUN: %complete-test -tok=EXPR2 %s -raw | %FileCheck %s -check-prefix=LITERALS_PLUS_NOT
|
|
let x1 = #^EXPR1^#
|
|
x1 + #^EXPR2^#
|
|
// LITERALS_PLUS: key.kind: source.lang.swift.literal.integer
|
|
// LITERALS_PLUS: key.kind: source.lang.swift.literal.string
|
|
// LITERALS_PLUS: key.sourcetext: "\"<#{{.*}}#>\""
|
|
// LITERALS_PLUS: key.kind: source.lang.swift.literal.array
|
|
// LITERALS_PLUS: key.sourcetext: "[<#{{.*}}#>]"
|
|
|
|
// LITERALS_PLUS_NOT-NOT: key.kind: source.lang.swift.literal.boolean
|
|
// LITERALS_PLUS_NOT-NOT: key.kind: source.lang.swift.literal.dictionary
|
|
// LITERALS_PLUS_NOT-NOT: key.kind: source.lang.swift.literal.tuple
|
|
// LITERALS_PLUS_NOT-NOT: key.kind: source.lang.swift.literal.nil
|
|
|
|
// RUN: %complete-test -tok=EXPR3 %s -raw | %FileCheck %s -check-prefix=LITERAL_BOOL
|
|
if #^EXPR3^# { }
|
|
// LITERAL_BOOL-NOT: source.lang.swift.literal
|
|
// LITERAL_BOOL: key.kind: source.lang.swift.literal.boolean
|
|
// LITERAL_BOOL-NOT: source.lang.swift.literal
|
|
// LITERAL_BOOL: key.kind: source.lang.swift.literal.boolean
|
|
// LITERAL_BOOL-NOT: source.lang.swift.literal
|
|
|
|
// RUN: %complete-test -tok=EXPR4 %s -raw | %FileCheck %s -check-prefix=LITERAL_INT
|
|
foo(#^EXPR4^#)
|
|
// LITERAL_INT-NOT: source.lang.swift.literal
|
|
// LITERAL_INT: key.kind: source.lang.swift.literal.integer
|
|
// LITERAL_INT-NOT: source.lang.swift.literal
|
|
|
|
// RUN: %complete-test -tok=EXPR5 %s -raw | %FileCheck %s -check-prefix=LITERAL_TUPLE
|
|
let x2: (String, Int) = #^EXPR5^#
|
|
// LITERAL_TUPLE-NOT: source.lang.swift.literal
|
|
// LITERAL_TUPLE: key.kind: source.lang.swift.literal.tuple
|
|
// LITERAL_TUPLE-NOT: source.lang.swift.literal
|
|
|
|
// RUN: %complete-test -tok=EXPR6 %s -raw | %FileCheck %s -check-prefix=LITERAL_NO_TYPE
|
|
// When there is a type context that doesn't match, we should see no literals
|
|
// except the keywords and they should be prioritized like keywords not
|
|
// literals.
|
|
struct Opaque {}
|
|
let x3: Opaque = #^EXPR6,,colo,ni,tru,fals^#
|
|
// LITERAL_NO_TYPE-LABEL: Results for filterText: [
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: ]
|
|
// LITERAL_NO_TYPE-LABEL: Results for filterText: colo [
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: ]
|
|
// LITERAL_NO_TYPE-LABEL: Results for filterText: ni [
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: key.kind: source.lang.swift.literal.nil
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: ]
|
|
// LITERAL_NO_TYPE-LABEL: Results for filterText: tru [
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: key.kind: source.lang.swift.literal.boolean
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: ]
|
|
// LITERAL_NO_TYPE-LABEL: Results for filterText: fals [
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: key.kind: source.lang.swift.literal.boolean
|
|
// LITERAL_NO_TYPE-NOT: source.lang.swift.literal
|
|
// LITERAL_NO_TYPE: ]
|