mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
When a variable is re-declared using shorthand syntax (`[foo]` closure capture or `if let foo {`), the user doesn’t perceive this as a new variable declaration. Thus, we should return the original declaration as a secondary result.
rdar://91311033
rdar://75455650
109 lines
4.1 KiB
Swift
109 lines
4.1 KiB
Swift
func simple(bar: Int?) {
|
|
if let bar {
|
|
print(bar)
|
|
}
|
|
}
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=1:13 %s -- %s | %FileCheck %s --check-prefix=SIMPLE_PARAM
|
|
// SIMPLE_PARAM: source.lang.swift.decl.var.parameter (1:13-1:16)
|
|
// SIMPLE_PARAM: Int
|
|
// SIMPLE_PARAM: SECONDARY SYMBOLS BEGIN
|
|
// There should be no secondary symbols
|
|
// SIMPLE_PARAM-NEXT: SECONDARY SYMBOLS END
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=2:10 %s -- %s | %FileCheck %s --check-prefix=SIMPLE_CAPTURE
|
|
// SIMPLE_CAPTURE: source.lang.swift.decl.var.local (2:10-2:13)
|
|
// SIMPLE_CAPTURE: Int
|
|
// SIMPLE_CAPTURE: SECONDARY SYMBOLS BEGIN
|
|
// SIMPLE_CAPTURE: source.lang.swift.ref.var.local (1:13-1:16)
|
|
// SIMPLE_CAPTURE: Int?
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=3:11 %s -- %s | %FileCheck %s --check-prefix=SIMPLE_REF
|
|
// SIMPLE_REF: source.lang.swift.ref.var.local (2:10-2:13)
|
|
// SIMPLE_REF: Int
|
|
// SIMPLE_REF: SECONDARY SYMBOLS BEGIN
|
|
// SIMPLE_REF: source.lang.swift.ref.var.local (1:13-1:16)
|
|
// SIMPLE_REF: Int?
|
|
|
|
func doubleNested(bar: Int??) {
|
|
if let bar {
|
|
if let bar {
|
|
print(bar)
|
|
}
|
|
}
|
|
}
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=29:10 %s -- %s | %FileCheck %s --check-prefix=DOUBLE_NESTED_FIRST_CAPTURE
|
|
// DOUBLE_NESTED_FIRST_CAPTURE: source.lang.swift.decl.var.local (29:10-29:13)
|
|
// DOUBLE_NESTED_FIRST_CAPTURE: Int?
|
|
// DOUBLE_NESTED_FIRST_CAPTURE: SECONDARY SYMBOLS BEGIN
|
|
// DOUBLE_NESTED_FIRST_CAPTURE: source.lang.swift.ref.var.local (28:19-28:22)
|
|
// DOUBLE_NESTED_FIRST_CAPTURE: Int??
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=30:12 %s -- %s | %FileCheck %s --check-prefix=DOUBLE_NESTED_SECOND_CAPTURE
|
|
// DOUBLE_NESTED_SECOND_CAPTURE: source.lang.swift.decl.var.local (30:12-30:15)
|
|
// DOUBLE_NESTED_SECOND_CAPTURE: Int
|
|
// DOUBLE_NESTED_SECOND_CAPTURE: SECONDARY SYMBOLS BEGIN
|
|
// DOUBLE_NESTED_SECOND_CAPTURE: source.lang.swift.ref.var.local (29:10-29:13)
|
|
// DOUBLE_NESTED_SECOND_CAPTURE: Int?
|
|
// DOUBLE_NESTED_SECOND_CAPTURE: source.lang.swift.ref.var.local (28:19-28:22)
|
|
// DOUBLE_NESTED_SECOND_CAPTURE: Int??
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=31:13 %s -- %s | %FileCheck %s --check-prefix=DOUBLE_NESTED_REF
|
|
// DOUBLE_NESTED_REF: source.lang.swift.ref.var.local (30:12-30:15)
|
|
// DOUBLE_NESTED_REF: Int
|
|
// DOUBLE_NESTED_REF: SECONDARY SYMBOLS BEGIN
|
|
// DOUBLE_NESTED_REF: source.lang.swift.ref.var.local (29:10-29:13)
|
|
// DOUBLE_NESTED_REF: Int?
|
|
// DOUBLE_NESTED_REF: source.lang.swift.ref.var.local (28:19-28:22)
|
|
// DOUBLE_NESTED_REF: Int??
|
|
|
|
// Make sure we don't report secondary symbols if the variable is captured explicitly using '='
|
|
func explicitCapture(bar: Int?) {
|
|
if let bar = bar {
|
|
print(bar)
|
|
}
|
|
}
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=64:11 %s -- %s | %FileCheck %s --check-prefix=EXPLICIT_CAPTURE_REF
|
|
// EXPLICIT_CAPTURE_REF: source.lang.swift.ref.var.local (63:10-63:13)
|
|
// EXPLICIT_CAPTURE_REF: Int
|
|
// EXPLICIT_CAPTURE_REF: SECONDARY SYMBOLS BEGIN
|
|
// There should be no secondary symbols
|
|
// EXPLICIT_CAPTURE_REF-NEXT: SECONDARY SYMBOLS END
|
|
|
|
func multipleShorthand(bar: Int?, baz: Int?) {
|
|
if let bar, let baz {
|
|
print(bar)
|
|
print(baz)
|
|
}
|
|
}
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=77:11 %s -- %s | %FileCheck %s --check-prefix=MULTIPLE_SHORTHAND_BAR
|
|
// MULTIPLE_SHORTHAND_BAR: source.lang.swift.ref.var.local (76:10-76:13)
|
|
// MULTIPLE_SHORTHAND_BAR: Int
|
|
// MULTIPLE_SHORTHAND_BAR: SECONDARY SYMBOLS BEGIN
|
|
// MULTIPLE_SHORTHAND_BAR.lang.swift.ref.var.local (75:23-75:26)
|
|
// MULTIPLE_SHORTHAND_BAR: Int?
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=78:11 %s -- %s | %FileCheck %s --check-prefix=MULTIPLE_SHORTHAND_BAZ
|
|
// MULTIPLE_SHORTHAND_BAZ: source.lang.swift.ref.var.local (76:19-76:22)
|
|
// MULTIPLE_SHORTHAND_BAZ: Int
|
|
// MULTIPLE_SHORTHAND_BAZ: SECONDARY SYMBOLS BEGIN
|
|
// MULTIPLE_SHORTHAND_BAZ.lang.swift.ref.var.local (63:33-63:36)
|
|
// MULTIPLE_SHORTHAND_BAZ: Int?
|
|
|
|
func guardLet(bar: Int?) {
|
|
guard let bar else {
|
|
return
|
|
}
|
|
print(bar)
|
|
}
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=100:9 %s -- %s | %FileCheck %s --check-prefix=GUARD_LET
|
|
// GUARD_LET: source.lang.swift.ref.var.local (97:13-97:16)
|
|
// GUARD_LET: Int
|
|
// GUARD_LET: SECONDARY SYMBOLS BEGIN
|
|
// GUARD_LET.lang.swift.ref.var.local (96:15-96:18)
|
|
// GUARD_LET: Int?
|