Files
swift-mirror/test/SourceKit/CodeComplete/complete_literals.swift
Ben Langmuir a927dc8a5a [CodeCompletion] Hide literals that don't match the type context in SourceKit
If there is a type context, hide literal suggesetions that don't match
it, unless they are keywords and we have filtered to their names.

Incidentally fix an output buffering issue when combining filtering with
the -raw flag in complete-test.

Part of rdar://problem/23865118
2016-02-03 10:51:07 -08:00

79 lines
3.2 KiB
Swift

()
// RUN: %sourcekitd-test -req=complete -pos=1:2 %s -- %s | FileCheck %s -check-prefix=KEYWORDS
// RUN: %sourcekitd-test -req=complete.open -pos=1:2 %s -- %s | FileCheck %s -check-prefix=LITERALS
// KEYWORDS-NOT: source.lang.swift.literal
// KEYWORDS: key.name: "nil"
// KEYWORDS-NOT: source.lang.swift.literal
// 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: ]