Files
swift-mirror/test/SourceKit/CodeComplete/complete_literals.swift
Ben Langmuir 3c9c52010b [CodeCompletion] Add image and color literals to results
Surface these results in the codecomplete code path (they're already
there in the codecomplete.open code path) so we can use them from IDEs.
For now, just use ad-hoc filtering to show them when the type matches
(or there is no expected type).  Ideally we would make this filtering
configurable like we do in the codecomplete.open code path.

rdar://problem/25836544
2016-06-21 11:41:15 -07:00

92 lines
3.7 KiB
Swift

()
let var1 = 1
let var2: Int = 1
// XFAIL: broken_std_regex
// 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
// RUN: %complete-test -tok=EXPR3 %s -raw | FileCheck %s -check-prefix=LITERALS
let x1 = #^EXPR1^#
x1 + #^EXPR2^#
if #^EXPR3^# { }
// 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: ]