mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Constructor call patterns already get a real priority, but because of the way we do function call patterns we don't have enough information, and previously we were setting it to "expression specific", which is unnecessarily high, particularly since functions (unlike inits) have other better ways to code-complete already. rdar://31113161
1796 lines
102 KiB
Swift
1796 lines
102 KiB
Swift
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OBJECT_DOT_1 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OBJECT_DOT_2 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OBJECT_DOT_3 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OBJECT_DOT_4 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OBJECT_DOT_5 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OBJECT_NO_DOT_1 | %FileCheck %s -check-prefix=FOO_OBJECT_NO_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_OBJECT_NO_DOT_2 | %FileCheck %s -check-prefix=FOO_OBJECT_NO_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_STRUCT_DOT_1 | %FileCheck %s -check-prefix=FOO_STRUCT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FOO_STRUCT_NO_DOT_1 | %FileCheck %s -check-prefix=FOO_STRUCT_NO_DOT
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_FUNC_0 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_FUNC_0
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_FUNC_1 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_FUNC_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_FUNC_2 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_FUNC_2
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_VARARG_FUNC_0 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_VARARG_FUNC_0
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_VARARG_FUNC_1 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_VARARG_FUNC_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_VARARG_FUNC_2 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_VARARG_FUNC_2
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_OVERLOADED_FUNC_1 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_OVERLOADED_FUNC_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICITLY_CURRIED_OVERLOADED_FUNC_2 | %FileCheck %s -check-prefix=IMPLICITLY_CURRIED_OVERLOADED_FUNC_2
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_SWITCH_CASE_1 | %FileCheck %s -check-prefix=IN_SWITCH_CASE
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_SWITCH_CASE_2 | %FileCheck %s -check-prefix=IN_SWITCH_CASE
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_SWITCH_CASE_3 | %FileCheck %s -check-prefix=IN_SWITCH_CASE
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IN_SWITCH_CASE_4 | %FileCheck %s -check-prefix=IN_SWITCH_CASE
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=VF1 | %FileCheck %s -check-prefix=VF1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=VF2 | %FileCheck %s -check-prefix=VF2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=BASE_MEMBERS | %FileCheck %s -check-prefix=BASE_MEMBERS
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=BASE_MEMBERS_STATIC | %FileCheck %s -check-prefix=BASE_MEMBERS_STATIC
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTO_MEMBERS_NO_DOT_1 | %FileCheck %s -check-prefix=PROTO_MEMBERS_NO_DOT_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTO_MEMBERS_NO_DOT_2 | %FileCheck %s -check-prefix=PROTO_MEMBERS_NO_DOT_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTO_MEMBERS_NO_DOT_3 | %FileCheck %s -check-prefix=PROTO_MEMBERS_NO_DOT_3
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTO_MEMBERS_1 | %FileCheck %s -check-prefix=PROTO_MEMBERS_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTO_MEMBERS_2 | %FileCheck %s -check-prefix=PROTO_MEMBERS_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTO_MEMBERS_3 | %FileCheck %s -check-prefix=PROTO_MEMBERS_3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTO_MEMBERS_4 | %FileCheck %s -check-prefix=PROTO_MEMBERS_4
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_0 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_0
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_1 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_2 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_3 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_4 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_4
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_5 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_5
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_6 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_6
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_7 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_7
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_8 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_8
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_9 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_9
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_10 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_10
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_11 -code-complete-call-pattern-heuristics | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_11
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_11 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_4
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_12 -code-complete-call-pattern-heuristics | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_12
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_12 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_4
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_VARARG_FUNCTION_CALL_1 | %FileCheck %s -check-prefix=INSIDE_VARARG_FUNCTION_CALL_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_VARARG_FUNCTION_CALL_2 | %FileCheck %s -check-prefix=INSIDE_VARARG_FUNCTION_CALL_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_VARARG_FUNCTION_CALL_3 | %FileCheck %s -check-prefix=INSIDE_VARARG_FUNCTION_CALL_3
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_OVERLOADED_FUNCTION_CALL_1 | %FileCheck %s -check-prefix=INSIDE_OVERLOADED_FUNCTION_CALL_1
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSIDE_FUNCTION_CALL_ON_CLASS_INSTANCE_1 | %FileCheck %s -check-prefix=INSIDE_FUNCTION_CALL_ON_CLASS_INSTANCE_1
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_FUNC_PARAM_1 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_FUNC_PARAM_2 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_FUNC_PARAM_3 | %FileCheck %s -check-prefix=RESOLVE_FUNC_PARAM_3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_FUNC_PARAM_4 | %FileCheck %s -check-prefix=RESOLVE_FUNC_PARAM_4
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_FUNC_PARAM_5 | %FileCheck %s -check-prefix=RESOLVE_FUNC_PARAM_5
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_FUNC_PARAM_6 | %FileCheck %s -check-prefix=RESOLVE_FUNC_PARAM_6
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_CONSTRUCTOR_PARAM_1 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_CONSTRUCTOR_PARAM_2 | %FileCheck %s -check-prefix=RESOLVE_CONSTRUCTOR_PARAM_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_CONSTRUCTOR_PARAM_3 | %FileCheck %s -check-prefix=RESOLVE_CONSTRUCTOR_PARAM_3
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_PAREN_PATTERN_1 | %FileCheck %s -check-prefix=FUNC_PAREN_PATTERN_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_PAREN_PATTERN_2 | %FileCheck %s -check-prefix=FUNC_PAREN_PATTERN_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_PAREN_PATTERN_3 | %FileCheck %s -check-prefix=FUNC_PAREN_PATTERN_3
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CHAINED_CALLS_1 | %FileCheck %s -check-prefix=CHAINED_CALLS_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CHAINED_CALLS_2 | %FileCheck %s -check-prefix=CHAINED_CALLS_2
|
|
|
|
// Disabled because we aren't handling failures well.
|
|
// FIXME: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CHAINED_CALLS_3 | %FileCheck %s -check-prefix=CHAINED_CALLS_3
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_1 | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_2 | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_3 | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_4 | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_4
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_5 | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_5
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_ERROR_1 | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_ERROR_1
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_1_STATIC | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_1_STATIC
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_2_STATIC | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_2_STATIC
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_3_STATIC | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_3_STATIC
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_4_STATIC | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_4_STATIC
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_GENERIC_PARAMS_5_STATIC | %FileCheck %s -check-prefix=RESOLVE_GENERIC_PARAMS_5_STATIC
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_UNSOLVED_VARIABLES_1 | %FileCheck %s -check-prefix=TC_UNSOLVED_VARIABLES_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_UNSOLVED_VARIABLES_2 | %FileCheck %s -check-prefix=TC_UNSOLVED_VARIABLES_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_UNSOLVED_VARIABLES_3 | %FileCheck %s -check-prefix=TC_UNSOLVED_VARIABLES_3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=TC_UNSOLVED_VARIABLES_4 | %FileCheck %s -check-prefix=TC_UNSOLVED_VARIABLES_4
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=RESOLVE_MODULES_1 | %FileCheck %s -check-prefix=RESOLVE_MODULES_1
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INTERPOLATED_STRING_1 | %FileCheck %s -check-prefix=FOO_OBJECT_DOT1
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_P1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_P2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_P3 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_WILLCONFORMP1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_WILLCONFORMP1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_DIDCONFORMP2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_DIDCONFORMP2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_DIDCONFORMP3 | %FileCheck %s -check-prefix=PROTOCOL_EXT_DIDCONFORMP3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_GENERICP1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_GENERICP1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_GENERICP2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_GENERICP2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_GENERICP3 | %FileCheck %s -check-prefix=PROTOCOL_EXT_GENERICP3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_P4 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONCRETE1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_P1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONCRETE2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_P1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONSTRAINED_GENERIC_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_P1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONSTRAINED_GENERIC_2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_P1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_INSIDE_CONCRETE1_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_P1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_INSIDE_CONCRETE1_2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_P1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONCRETE3 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_ONLYME
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONCRETE3_SUB | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_ONLYME_SUB
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONCRETE4 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_ONLYME
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONSTRAINED_GENERIC_3 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_ONLYME
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_CONSTRAINED_GENERIC_3_SUB | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_ONLYME_SUB
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_INSIDE_CONCRETE2_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_ONLYME
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_INSIDE_CONCRETE2_2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_ONLYME
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_TA_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_TA
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_TA_2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_TA
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_INIT_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_INIT_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_INIT_2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_INIT_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_P4_DOT_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_P4_DOT_2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_DOT
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_P4_T_DOT_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_P4_T_DOT_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_UNUSABLE_EXISTENTIAL | %FileCheck %s -check-prefix=PROTOCOL_EXT_UNUSABLE_EXISTENTIAL
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_DEDUP_1 | %FileCheck %s -check-prefix=PROTOCOL_EXT_DEDUP_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_DEDUP_2 | %FileCheck %s -check-prefix=PROTOCOL_EXT_DEDUP_2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT_DEDUP_3 | %FileCheck %s -check-prefix=PROTOCOL_EXT_DEDUP_3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=THROWS1 | %FileCheck %s -check-prefix=THROWS1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=THROWS2 | %FileCheck %s -check-prefix=THROWS2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=MEMBER_THROWS1 | %FileCheck %s -check-prefix=MEMBER_THROWS1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=MEMBER_THROWS2 | %FileCheck %s -check-prefix=MEMBER_THROWS2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=MEMBER_THROWS3 | %FileCheck %s -check-prefix=MEMBER_THROWS3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INIT_THROWS1 | %FileCheck %s -check-prefix=INIT_THROWS1
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=AUTOCLOSURE1 > %t.autoclosure1
|
|
// RUN: %FileCheck %s -check-prefix=AUTOCLOSURE_STRING < %t.autoclosure1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=AUTOCLOSURE2 > %t.autoclosure2
|
|
// RUN: %FileCheck %s -check-prefix=AUTOCLOSURE_STRING < %t.autoclosure2
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=AUTOCLOSURE3 > %t.autoclosure3
|
|
// RUN: %FileCheck %s -check-prefix=AUTOCLOSURE_STRING < %t.autoclosure3
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=AUTOCLOSURE4 > %t.autoclosure4
|
|
// RUN: %FileCheck %s -check-prefix=AUTOCLOSURE_STRING < %t.autoclosure4
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=AUTOCLOSURE5 > %t.autoclosure5
|
|
// RUN: %FileCheck %s -check-prefix=AUTOCLOSURE_STRING < %t.autoclosure5
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GENERIC_TYPEALIAS_1 | %FileCheck %s -check-prefix=GENERIC_TYPEALIAS_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GENERIC_TYPEALIAS_2 | %FileCheck %s -check-prefix=GENERIC_TYPEALIAS_2
|
|
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DEPRECATED_1 | %FileCheck %s -check-prefix=DEPRECATED_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DOT_EXPR_NON_NOMINAL_1 | %FileCheck %s -check-prefix=DOT_EXPR_NON_NOMINAL_1
|
|
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DOT_EXPR_NON_NOMINAL_2 | %FileCheck %s -check-prefix=DOT_EXPR_NON_NOMINAL_2
|
|
|
|
// Test code completion of expressions that produce a value.
|
|
|
|
struct FooStruct {
|
|
lazy var lazyInstanceVar = 0
|
|
var instanceVar = 0
|
|
|
|
mutating
|
|
func instanceFunc0() {}
|
|
mutating
|
|
func instanceFunc1(_ a: Int) {}
|
|
mutating
|
|
func instanceFunc2(_ a: Int, b: inout Double) {}
|
|
mutating
|
|
func instanceFunc3(_ a: Int, _: (Float, Double)) {}
|
|
mutating
|
|
func instanceFunc4(_ a: Int?, b: Int!, c: inout Int?, d: inout Int!) {}
|
|
mutating
|
|
func instanceFunc5() -> Int? {}
|
|
mutating
|
|
func instanceFunc6() -> Int! {}
|
|
mutating
|
|
func instanceFunc7(a a: Int) {}
|
|
mutating
|
|
func instanceFunc8(_ a: (Int, Int)) {}
|
|
mutating
|
|
func instanceFunc9(a: @autoclosure () -> Int) {}
|
|
|
|
mutating
|
|
func varargInstanceFunc0(_ v: Int...) {}
|
|
mutating
|
|
func varargInstanceFunc1(_ a: Float, v: Int...) {}
|
|
mutating
|
|
func varargInstanceFunc2(_ a: Float, b: Double, v: Int...) {}
|
|
|
|
mutating
|
|
func overloadedInstanceFunc1() -> Int {}
|
|
mutating
|
|
func overloadedInstanceFunc1() -> Double {}
|
|
|
|
mutating
|
|
func overloadedInstanceFunc2(_ x: Int) -> Int {}
|
|
mutating
|
|
func overloadedInstanceFunc2(_ x: Double) -> Int {}
|
|
|
|
mutating
|
|
func builderFunc1(_ a: Int) -> FooStruct { return self }
|
|
|
|
subscript(i: Int) -> Double {
|
|
get {
|
|
return Double(i)
|
|
}
|
|
set(v) {
|
|
instanceVar = i
|
|
}
|
|
}
|
|
|
|
subscript(i: Int, j: Int) -> Double {
|
|
get {
|
|
return Double(i + j)
|
|
}
|
|
set(v) {
|
|
instanceVar = i + j
|
|
}
|
|
}
|
|
|
|
mutating
|
|
func selectorVoidFunc1(_ a: Int, b x: Float) {}
|
|
mutating
|
|
func selectorVoidFunc2(_ a: Int, b x: Float, c y: Double) {}
|
|
mutating
|
|
func selectorVoidFunc3(_ a: Int, b _: (Float, Double)) {}
|
|
|
|
mutating
|
|
func selectorStringFunc1(_ a: Int, b x: Float) -> String {}
|
|
mutating
|
|
func selectorStringFunc2(_ a: Int, b x: Float, c y: Double) -> String {}
|
|
mutating
|
|
func selectorStringFunc3(_ a: Int, b _: (Float, Double)) -> String{}
|
|
|
|
struct NestedStruct {}
|
|
class NestedClass {}
|
|
enum NestedEnum {}
|
|
// Cannot declare a nested protocol.
|
|
// protocol NestedProtocol {}
|
|
|
|
typealias NestedTypealias = Int
|
|
|
|
static var staticVar: Int = 4
|
|
|
|
static func staticFunc0() {}
|
|
static func staticFunc1(_ a: Int) {}
|
|
|
|
static func overloadedStaticFunc1() -> Int {}
|
|
static func overloadedStaticFunc1() -> Double {}
|
|
|
|
static func overloadedStaticFunc2(_ x: Int) -> Int {}
|
|
static func overloadedStaticFunc2(_ x: Double) -> Int {}
|
|
}
|
|
|
|
extension FooStruct {
|
|
var extProp: Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set(v) {}
|
|
}
|
|
|
|
mutating
|
|
func extFunc0() {}
|
|
|
|
static var extStaticProp: Int {
|
|
get {
|
|
return 42
|
|
}
|
|
set(v) {}
|
|
}
|
|
|
|
static func extStaticFunc0() {}
|
|
|
|
struct ExtNestedStruct {}
|
|
class ExtNestedClass {}
|
|
enum ExtNestedEnum {
|
|
case ExtEnumX(Int)
|
|
}
|
|
|
|
typealias ExtNestedTypealias = Int
|
|
}
|
|
|
|
var fooObject: FooStruct
|
|
|
|
// FOO_OBJECT_DOT: Begin completions
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceVar]/CurrNominal: lazyInstanceVar[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc2({#(a): Int#}, {#b: &Double#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc3({#(a): Int#}, {#(Float, Double)#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc4({#(a): Int?#}, {#b: Int!#}, {#c: &Int?#}, {#d: &Int!#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc5()[#Int?#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc6()[#Int!#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc7({#a: Int#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc8({#(a): (Int, Int)#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc9({#a: Int#})[#Void#]{{; name=.+$}}
|
|
//
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: varargInstanceFunc0({#(v): Int...#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: varargInstanceFunc1({#(a): Float#}, {#v: Int...#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: varargInstanceFunc2({#(a): Float#}, {#b: Double#}, {#v: Int...#})[#Void#]{{; name=.+$}}
|
|
//
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc1()[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc1()[#Double#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc2({#(x): Int#})[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc2({#(x): Double#})[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: builderFunc1({#(a): Int#})[#FooStruct#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorVoidFunc1({#(a): Int#}, {#b: Float#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorVoidFunc2({#(a): Int#}, {#b: Float#}, {#c: Double#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorVoidFunc3({#(a): Int#}, {#b: (Float, Double)#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorStringFunc1({#(a): Int#}, {#b: Float#})[#String#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorStringFunc2({#(a): Int#}, {#b: Float#}, {#c: Double#})[#String#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorStringFunc3({#(a): Int#}, {#b: (Float, Double)#})[#String#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceVar]/CurrNominal: extProp[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: extFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT-NEXT: End completions
|
|
|
|
// FOO_OBJECT_NO_DOT: Begin completions
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceVar]/CurrNominal: .lazyInstanceVar[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc2({#(a): Int#}, {#b: &Double#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc3({#(a): Int#}, {#(Float, Double)#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc4({#(a): Int?#}, {#b: Int!#}, {#c: &Int?#}, {#d: &Int!#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc5()[#Int?#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc6()[#Int!#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc7({#a: Int#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc8({#(a): (Int, Int)#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc9({#a: Int#})[#Void#]{{; name=.+$}}
|
|
//
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .varargInstanceFunc0({#(v): Int...#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .varargInstanceFunc1({#(a): Float#}, {#v: Int...#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .varargInstanceFunc2({#(a): Float#}, {#b: Double#}, {#v: Int...#})[#Void#]{{; name=.+$}}
|
|
//
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc1()[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc1()[#Double#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc2({#(x): Int#})[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc2({#(x): Double#})[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .builderFunc1({#(a): Int#})[#FooStruct#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[Subscript]/CurrNominal: [{#Int#}][#Double#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[Subscript]/CurrNominal: [{#Int#}, {#Int#}][#Double#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorVoidFunc1({#(a): Int#}, {#b: Float#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorVoidFunc2({#(a): Int#}, {#b: Float#}, {#c: Double#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorVoidFunc3({#(a): Int#}, {#b: (Float, Double)#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorStringFunc1({#(a): Int#}, {#b: Float#})[#String#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorStringFunc2({#(a): Int#}, {#b: Float#}, {#c: Double#})[#String#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorStringFunc3({#(a): Int#}, {#b: (Float, Double)#})[#String#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceVar]/CurrNominal: .extProp[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .extFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_NO_DOT-NEXT: BuiltinOperator/None: = {#Foo
|
|
// FOO_OBJECT_NO_DOT-NEXT: End completions
|
|
|
|
// FOO_STRUCT_DOT: Begin completions
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc0({#self: &FooStruct#})[#() -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc1({#self: &FooStruct#})[#(Int) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc2({#self: &FooStruct#})[#(Int, b: inout Double) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc3({#self: &FooStruct#})[#(Int, (Float, Double)) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc4({#self: &FooStruct#})[#(Int?, b: Int!, c: inout Int?, d: inout Int!) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc5({#self: &FooStruct#})[#() -> Int?#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc6({#self: &FooStruct#})[#() -> Int!#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc7({#self: &FooStruct#})[#(a: Int) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc8({#self: &FooStruct#})[#((Int, Int)) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc9({#self: &FooStruct#})[#(a: @autoclosure () -> Int) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: varargInstanceFunc0({#self: &FooStruct#})[#(Int...) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: varargInstanceFunc1({#self: &FooStruct#})[#(Float, v: Int...) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: varargInstanceFunc2({#self: &FooStruct#})[#(Float, b: Double, v: Int...) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc1({#self: &FooStruct#})[#() -> Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc1({#self: &FooStruct#})[#() -> Double#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc2({#self: &FooStruct#})[#(Int) -> Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: overloadedInstanceFunc2({#self: &FooStruct#})[#(Double) -> Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: builderFunc1({#self: &FooStruct#})[#(Int) -> FooStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorVoidFunc1({#self: &FooStruct#})[#(Int, b: Float) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorVoidFunc2({#self: &FooStruct#})[#(Int, b: Float, c: Double) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorVoidFunc3({#self: &FooStruct#})[#(Int, b: (Float, Double)) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorStringFunc1({#self: &FooStruct#})[#(Int, b: Float) -> String#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorStringFunc2({#self: &FooStruct#})[#(Int, b: Float, c: Double) -> String#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: selectorStringFunc3({#self: &FooStruct#})[#(Int, b: (Float, Double)) -> String#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Struct]/CurrNominal: NestedStruct[#FooStruct.NestedStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Class]/CurrNominal: NestedClass[#FooStruct.NestedClass#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Enum]/CurrNominal: NestedEnum[#FooStruct.NestedEnum#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[TypeAlias]/CurrNominal: NestedTypealias[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticVar]/CurrNominal: staticVar[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticMethod]/CurrNominal: staticFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticMethod]/CurrNominal: staticFunc1({#(a): Int#})[#Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticMethod]/CurrNominal: overloadedStaticFunc1()[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticMethod]/CurrNominal: overloadedStaticFunc1()[#Double#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticMethod]/CurrNominal: overloadedStaticFunc2({#(x): Int#})[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticMethod]/CurrNominal: overloadedStaticFunc2({#(x): Double#})[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Constructor]/CurrNominal: init({#lazyInstanceVar: Int?#}, {#instanceVar: Int#})[#FooStruct#]; name=init(lazyInstanceVar: Int?, instanceVar: Int){{$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Constructor]/CurrNominal: init()[#FooStruct#]; name=init(){{$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: extFunc0({#self: &FooStruct#})[#() -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticVar]/CurrNominal: extStaticProp[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[StaticMethod]/CurrNominal: extStaticFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Struct]/CurrNominal: ExtNestedStruct[#FooStruct.ExtNestedStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Class]/CurrNominal: ExtNestedClass[#FooStruct.ExtNestedClass#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[Enum]/CurrNominal: ExtNestedEnum[#FooStruct.ExtNestedEnum#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: Decl[TypeAlias]/CurrNominal: ExtNestedTypealias[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_DOT-NEXT: End completions
|
|
|
|
// FOO_STRUCT_NO_DOT: Begin completions
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc0({#self: &FooStruct#})[#() -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc1({#self: &FooStruct#})[#(Int) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc2({#self: &FooStruct#})[#(Int, b: inout Double) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc3({#self: &FooStruct#})[#(Int, (Float, Double)) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc4({#self: &FooStruct#})[#(Int?, b: Int!, c: inout Int?, d: inout Int!) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc5({#self: &FooStruct#})[#() -> Int?#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc6({#self: &FooStruct#})[#() -> Int!#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc7({#self: &FooStruct#})[#(a: Int) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc8({#self: &FooStruct#})[#((Int, Int)) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc9({#self: &FooStruct#})[#(a: @autoclosure () -> Int) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .varargInstanceFunc0({#self: &FooStruct#})[#(Int...) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .varargInstanceFunc1({#self: &FooStruct#})[#(Float, v: Int...) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .varargInstanceFunc2({#self: &FooStruct#})[#(Float, b: Double, v: Int...) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc1({#self: &FooStruct#})[#() -> Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc1({#self: &FooStruct#})[#() -> Double#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc2({#self: &FooStruct#})[#(Int) -> Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .overloadedInstanceFunc2({#self: &FooStruct#})[#(Double) -> Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .builderFunc1({#self: &FooStruct#})[#(Int) -> FooStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorVoidFunc1({#self: &FooStruct#})[#(Int, b: Float) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorVoidFunc2({#self: &FooStruct#})[#(Int, b: Float, c: Double) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorVoidFunc3({#self: &FooStruct#})[#(Int, b: (Float, Double)) -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorStringFunc1({#self: &FooStruct#})[#(Int, b: Float) -> String#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorStringFunc2({#self: &FooStruct#})[#(Int, b: Float, c: Double) -> String#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .selectorStringFunc3({#self: &FooStruct#})[#(Int, b: (Float, Double)) -> String#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Struct]/CurrNominal: .NestedStruct[#FooStruct.NestedStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Class]/CurrNominal: .NestedClass[#FooStruct.NestedClass#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Enum]/CurrNominal: .NestedEnum[#FooStruct.NestedEnum#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[TypeAlias]/CurrNominal: .NestedTypealias[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticVar]/CurrNominal: .staticVar[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticMethod]/CurrNominal: .staticFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticMethod]/CurrNominal: .staticFunc1({#(a): Int#})[#Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticMethod]/CurrNominal: .overloadedStaticFunc1()[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticMethod]/CurrNominal: .overloadedStaticFunc1()[#Double#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticMethod]/CurrNominal: .overloadedStaticFunc2({#(x): Int#})[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticMethod]/CurrNominal: .overloadedStaticFunc2({#(x): Double#})[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Constructor]/CurrNominal: ({#lazyInstanceVar: Int?#}, {#instanceVar: Int#})[#FooStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Constructor]/CurrNominal: ()[#FooStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .extFunc0({#self: &FooStruct#})[#() -> Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticVar]/CurrNominal: .extStaticProp[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[StaticMethod]/CurrNominal: .extStaticFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Struct]/CurrNominal: .ExtNestedStruct[#FooStruct.ExtNestedStruct#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Class]/CurrNominal: .ExtNestedClass[#FooStruct.ExtNestedClass#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[Enum]/CurrNominal: .ExtNestedEnum[#FooStruct.ExtNestedEnum#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: Decl[TypeAlias]/CurrNominal: .ExtNestedTypealias[#Int#]{{; name=.+$}}
|
|
// FOO_STRUCT_NO_DOT-NEXT: End completions
|
|
|
|
func testObjectExpr() {
|
|
fooObject.#^FOO_OBJECT_DOT_1^#
|
|
}
|
|
|
|
func testDotDotTokenSplitWithCodeCompletion() {
|
|
fooObject.#^FOO_OBJECT_DOT_2^#.bar
|
|
}
|
|
|
|
func testObjectExprBuilderStyle1() {
|
|
fooObject
|
|
.#^FOO_OBJECT_DOT_3^#
|
|
}
|
|
|
|
func testObjectExprBuilderStyle2() {
|
|
fooObject
|
|
.builderFunc1(42).#^FOO_OBJECT_DOT_4^#
|
|
}
|
|
|
|
func testObjectExprBuilderStyle3() {
|
|
fooObject
|
|
.builderFunc1(42)
|
|
.#^FOO_OBJECT_DOT_5^#
|
|
}
|
|
|
|
func testObjectExprWithoutDot() {
|
|
fooObject#^FOO_OBJECT_NO_DOT_1^#
|
|
}
|
|
|
|
func testObjectExprWithoutSpaceAfterCodeCompletion() {
|
|
fooObject#^FOO_OBJECT_NO_DOT_2^#.bar
|
|
}
|
|
|
|
func testMetatypeExpr() {
|
|
FooStruct.#^FOO_STRUCT_DOT_1^#
|
|
}
|
|
|
|
func testMetatypeExprWithoutDot() {
|
|
FooStruct#^FOO_STRUCT_NO_DOT_1^#
|
|
}
|
|
|
|
func testImplicitlyCurriedFunc(_ fs: inout FooStruct) {
|
|
FooStruct.instanceFunc0(&fs)#^IMPLICITLY_CURRIED_FUNC_0^#
|
|
// IMPLICITLY_CURRIED_FUNC_0: Begin completions
|
|
// IMPLICITLY_CURRIED_FUNC_0-NEXT: Pattern/CurrModule: ()[#Void#]{{; name=.+$}}
|
|
// IMPLICITLY_CURRIED_FUNC_0-NEXT: End completions
|
|
|
|
FooStruct.instanceFunc1(&fs)#^IMPLICITLY_CURRIED_FUNC_1^#
|
|
// IMPLICITLY_CURRIED_FUNC_1: Begin completions
|
|
// IMPLICITLY_CURRIED_FUNC_1-NEXT: Pattern/CurrModule: ({#(a): Int#})[#Void#]{{; name=.+$}}
|
|
// IMPLICITLY_CURRIED_FUNC_1-NEXT: End completions
|
|
|
|
FooStruct.instanceFunc2(&fs)#^IMPLICITLY_CURRIED_FUNC_2^#
|
|
// IMPLICITLY_CURRIED_FUNC_2: Begin completions
|
|
// IMPLICITLY_CURRIED_FUNC_2-NEXT: Pattern/CurrModule: ({#(a): Int#}, {#b: &Double#})[#Void#]{{; name=.+$}}
|
|
// IMPLICITLY_CURRIED_FUNC_2-NEXT: End completions
|
|
|
|
FooStruct.varargInstanceFunc0(&fs)#^IMPLICITLY_CURRIED_VARARG_FUNC_0^#
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_0: Begin completions
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_0-NEXT: Pattern/CurrModule: ({#(v): Int...#})[#Void#]{{; name=.+$}}
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_0-NEXT: End completions
|
|
|
|
FooStruct.varargInstanceFunc1(&fs)#^IMPLICITLY_CURRIED_VARARG_FUNC_1^#
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_1: Begin completions
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_1-NEXT: Pattern/CurrModule: ({#(a): Float#}, {#v: Int...#})[#Void#]{{; name=.+$}}
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_1-NEXT: End completions
|
|
|
|
FooStruct.varargInstanceFunc2(&fs)#^IMPLICITLY_CURRIED_VARARG_FUNC_2^#
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_2: Begin completions
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_2-NEXT: Pattern/CurrModule: ({#(a): Float#}, {#b: Double#}, {#v: Int...#})[#Void#]{{; name=.+$}}
|
|
// IMPLICITLY_CURRIED_VARARG_FUNC_2-NEXT: End completions
|
|
|
|
// This call is ambiguous, and the expression is invalid.
|
|
// Ensure that we don't suggest to call the result.
|
|
FooStruct.overloadedInstanceFunc1(&fs)#^IMPLICITLY_CURRIED_OVERLOADED_FUNC_1^#
|
|
// IMPLICITLY_CURRIED_OVERLOADED_FUNC_1: found code completion token
|
|
// IMPLICITLY_CURRIED_OVERLOADED_FUNC_1-NOT: Begin completions
|
|
|
|
// This call is ambiguous, and the expression is invalid.
|
|
// Ensure that we don't suggest to call the result.
|
|
FooStruct.overloadedInstanceFunc2(&fs)#^IMPLICITLY_CURRIED_OVERLOADED_FUNC_2^#
|
|
// IMPLICITLY_CURRIED_OVERLOADED_FUNC_2: found code completion token
|
|
// IMPLICITLY_CURRIED_OVERLOADED_FUNC_2-NOT: Begin completions
|
|
}
|
|
|
|
//===---
|
|
//===--- Test that we can complete inside 'case'.
|
|
//===---
|
|
|
|
func testSwitch1() {
|
|
switch fooObject {
|
|
case #^IN_SWITCH_CASE_1^#
|
|
}
|
|
|
|
switch fooObject {
|
|
case 1, #^IN_SWITCH_CASE_2^#
|
|
}
|
|
|
|
switch unknown_var {
|
|
case #^IN_SWITCH_CASE_3^#
|
|
}
|
|
|
|
switch {
|
|
case #^IN_SWITCH_CASE_4^#
|
|
}
|
|
}
|
|
|
|
// IN_SWITCH_CASE: Begin completions
|
|
// IN_SWITCH_CASE-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// IN_SWITCH_CASE-DAG: Decl[Struct]/CurrModule: FooStruct[#FooStruct#]{{; name=.+$}}
|
|
// IN_SWITCH_CASE: End completions
|
|
|
|
//===--- Helper types that are used in this test
|
|
|
|
struct FooGenericStruct<T> {
|
|
init(t: T) { fooInstanceVarT = t }
|
|
|
|
var fooInstanceVarT: T
|
|
var fooInstanceVarTBrackets: [T]
|
|
mutating
|
|
func fooVoidInstanceFunc1(_ a: T) {}
|
|
mutating
|
|
func fooTInstanceFunc1(_ a: T) -> T { return a }
|
|
mutating
|
|
func fooUInstanceFunc1<U>(_ a: U) -> U { return a }
|
|
|
|
static var fooStaticVarT: Int = 0
|
|
static var fooStaticVarTBrackets: [Int] = [0]
|
|
static func fooVoidStaticFunc1(_ a: T) {}
|
|
static func fooTStaticFunc1(_ a: T) -> T { return a }
|
|
static func fooUInstanceFunc1<U>(_ a: U) -> U { return a }
|
|
}
|
|
|
|
class FooClass {
|
|
var fooClassInstanceVar = 0
|
|
func fooClassInstanceFunc0() {}
|
|
func fooClassInstanceFunc1(_ a: Int) {}
|
|
}
|
|
|
|
enum FooEnum {
|
|
}
|
|
|
|
protocol FooProtocol {
|
|
var fooInstanceVar1: Int { get set }
|
|
var fooInstanceVar2: Int { get }
|
|
typealias FooTypeAlias1
|
|
func fooInstanceFunc0() -> Double
|
|
func fooInstanceFunc1(_ a: Int) -> Double
|
|
subscript(i: Int) -> Double { get set }
|
|
}
|
|
|
|
class FooProtocolImpl : FooProtocol {
|
|
var fooInstanceVar1 = 0
|
|
val fooInstanceVar2 = 0
|
|
typealias FooTypeAlias1 = Float
|
|
init() {}
|
|
func fooInstanceFunc0() -> Double {
|
|
return 0.0
|
|
}
|
|
func fooInstanceFunc1(_ a: Int) -> Double {
|
|
return Double(a)
|
|
}
|
|
subscript(i: Int) -> Double {
|
|
return 0.0
|
|
}
|
|
}
|
|
|
|
protocol FooExProtocol : FooProtocol {
|
|
func fooExInstanceFunc0() -> Double
|
|
}
|
|
|
|
protocol BarProtocol {
|
|
var barInstanceVar: Int { get set }
|
|
typealias BarTypeAlias1
|
|
func barInstanceFunc0() -> Double
|
|
func barInstanceFunc1(_ a: Int) -> Double
|
|
}
|
|
|
|
protocol BarExProtocol : BarProtocol {
|
|
func barExInstanceFunc0() -> Double
|
|
}
|
|
|
|
protocol BazProtocol {
|
|
func bazInstanceFunc0() -> Double
|
|
}
|
|
|
|
typealias BarBazProtocolComposition = BarProtocol & BazProtocol
|
|
|
|
let fooProtocolInstance: FooProtocol = FooProtocolImpl()
|
|
let fooBarProtocolInstance: FooProtocol & BarProtocol
|
|
let fooExBarExProtocolInstance: FooExProtocol & BarExProtocol
|
|
|
|
typealias FooTypealias = Int
|
|
|
|
//===--- Test that we can code complete inside function calls.
|
|
|
|
func testInsideFunctionCall0() {
|
|
ERROR(#^INSIDE_FUNCTION_CALL_0^#
|
|
// INSIDE_FUNCTION_CALL_0: Begin completions
|
|
// INSIDE_FUNCTION_CALL_0-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_0: End completions
|
|
}
|
|
|
|
func testInsideFunctionCall1() {
|
|
var a = FooStruct()
|
|
a.instanceFunc0(#^INSIDE_FUNCTION_CALL_1^#
|
|
// There should be no results here because the function call
|
|
// unambiguously resolves to overload that takes 0 arguments.
|
|
// INSIDE_FUNCTION_CALL_1-NOT: Begin completions
|
|
}
|
|
|
|
func testInsideFunctionCall2() {
|
|
var a = FooStruct()
|
|
a.instanceFunc1(#^INSIDE_FUNCTION_CALL_2^#
|
|
// INSIDE_FUNCTION_CALL_2: Begin completions
|
|
// FIXME: we should print the non-API param name rdar://20962472
|
|
// INSIDE_FUNCTION_CALL_2-DAG: Pattern/CurrModule: ['(']{#Int#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_2-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_2: End completions
|
|
}
|
|
|
|
func testInsideFunctionCall3() {
|
|
FooStruct().instanceFunc1(42, #^INSIDE_FUNCTION_CALL_3^#
|
|
// INSIDE_FUNCTION_CALL_3: Begin completions
|
|
// FIXME: There should be no results here because the function call
|
|
// unambiguously resolves to overload that takes 1 argument.
|
|
// INSIDE_FUNCTION_CALL_3-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_3: End completions
|
|
}
|
|
|
|
func testInsideFunctionCall4() {
|
|
var a = FooStruct()
|
|
a.instanceFunc2(#^INSIDE_FUNCTION_CALL_4^#
|
|
// INSIDE_FUNCTION_CALL_4: Begin completions
|
|
// FIXME: we should print the non-API param name rdar://20962472
|
|
// INSIDE_FUNCTION_CALL_4-DAG: Pattern/CurrModule: ['(']{#Int#}, {#b: &Double#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_4-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_4: End completions
|
|
}
|
|
|
|
func testInsideFunctionCall5() {
|
|
FooStruct().instanceFunc2(42, #^INSIDE_FUNCTION_CALL_5^#
|
|
// INSIDE_FUNCTION_CALL_5: Begin completions
|
|
// INSIDE_FUNCTION_CALL_5-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_5: End completions
|
|
}
|
|
|
|
func testInsideFunctionCall6() {
|
|
var a = FooStruct()
|
|
a.instanceFunc7(#^INSIDE_FUNCTION_CALL_6^#
|
|
// INSIDE_FUNCTION_CALL_6: Begin completions
|
|
// INSIDE_FUNCTION_CALL_6-NEXT: Pattern/CurrModule: ['(']{#a: Int#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_6-NEXT: End completions
|
|
}
|
|
|
|
func testInsideFunctionCall7() {
|
|
var a = FooStruct()
|
|
a.instanceFunc8(#^INSIDE_FUNCTION_CALL_7^#
|
|
// INSIDE_FUNCTION_CALL_7: Begin completions
|
|
// FIXME: we should print the non-API param name rdar://20962472
|
|
// INSIDE_FUNCTION_CALL_7: Pattern/CurrModule: ['(']{#(Int, Int)#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_7: End completions
|
|
}
|
|
|
|
func testInsideFunctionCall8(_ x: inout FooStruct) {
|
|
x.instanceFunc0(#^INSIDE_FUNCTION_CALL_8^#)
|
|
// Since we already have '()', there is no pattern to complete.
|
|
// INSIDE_FUNCTION_CALL_8-NOT: Pattern/{{.*}}:
|
|
}
|
|
func testInsideFunctionCall9(_ x: inout FooStruct) {
|
|
x.instanceFunc1(#^INSIDE_FUNCTION_CALL_9^#)
|
|
// Annotated ')'
|
|
// INSIDE_FUNCTION_CALL_9: Begin completions
|
|
// INSIDE_FUNCTION_CALL_9-DAG: Pattern/CurrModule: ['(']{#Int#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_9-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_9: End completions
|
|
}
|
|
func testInsideFunctionCall10(_ x: inout FooStruct) {
|
|
x.instanceFunc2(#^INSIDE_FUNCTION_CALL_10^#)
|
|
// Annotated ')'
|
|
// INSIDE_FUNCTION_CALL_10: Begin completions
|
|
// INSIDE_FUNCTION_CALL_10-DAG: Pattern/CurrModule: ['(']{#Int#}, {#b: &Double#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_10-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_10: End completions
|
|
}
|
|
func testInsideFunctionCall11(_ x: inout FooStruct) {
|
|
x.instanceFunc2(#^INSIDE_FUNCTION_CALL_11^#,
|
|
// INSIDE_FUNCTION_CALL_11-NOT: Pattern/{{.*}}:{{.*}}({{.*}}{#Int#}
|
|
// INSIDE_FUNCTION_CALL_11B: Pattern/CurrModule: ['(']{#Int#}, {#b: &Double#}[')'][#Void#];
|
|
}
|
|
func testInsideFunctionCall12(_ x: inout FooStruct) {
|
|
x.instanceFunc2(#^INSIDE_FUNCTION_CALL_12^#<#placeholder#>
|
|
// INSIDE_FUNCTION_CALL_12-NOT: Pattern/{{.*}}:{{.*}}({{.*}}{#Int#}
|
|
}
|
|
|
|
func testInsideVarargFunctionCall1() {
|
|
var a = FooStruct()
|
|
a.varargInstanceFunc0(#^INSIDE_VARARG_FUNCTION_CALL_1^#
|
|
// INSIDE_VARARG_FUNCTION_CALL_1: Begin completions
|
|
// FIXME: we should print the non-API param name rdar://20962472
|
|
// INSIDE_VARARG_FUNCTION_CALL_1-DAG: Pattern/CurrModule: ['(']{#Int...#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_VARARG_FUNCTION_CALL_1-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_VARARG_FUNCTION_CALL_1: End completions
|
|
}
|
|
|
|
func testInsideVarargFunctionCall2() {
|
|
FooStruct().varargInstanceFunc0(42, #^INSIDE_VARARG_FUNCTION_CALL_2^#
|
|
// INSIDE_VARARG_FUNCTION_CALL_2: Begin completions
|
|
// INSIDE_VARARG_FUNCTION_CALL_2-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_VARARG_FUNCTION_CALL_2: End completions
|
|
}
|
|
|
|
func testInsideVarargFunctionCall3() {
|
|
FooStruct().varargInstanceFunc0(42, 4242, #^INSIDE_VARARG_FUNCTION_CALL_3^#
|
|
// INSIDE_VARARG_FUNCTION_CALL_3: Begin completions
|
|
// INSIDE_VARARG_FUNCTION_CALL_3-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_VARARG_FUNCTION_CALL_3: End completions
|
|
}
|
|
|
|
func testInsideOverloadedFunctionCall1() {
|
|
var a = FooStruct()
|
|
a.overloadedInstanceFunc2(#^INSIDE_OVERLOADED_FUNCTION_CALL_1^#
|
|
// INSIDE_OVERLOADED_FUNCTION_CALL_1: Begin completions
|
|
// FIXME: produce call patterns here.
|
|
// INSIDE_OVERLOADED_FUNCTION_CALL_1-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_OVERLOADED_FUNCTION_CALL_1: End completions
|
|
}
|
|
|
|
func testInsideFunctionCallOnClassInstance1(_ a: FooClass) {
|
|
a.fooClassInstanceFunc1(#^INSIDE_FUNCTION_CALL_ON_CLASS_INSTANCE_1^#
|
|
// INSIDE_FUNCTION_CALL_ON_CLASS_INSTANCE_1: Begin completions
|
|
// FIXME: we should print the non-API param name rdar://20962472
|
|
// INSIDE_FUNCTION_CALL_ON_CLASS_INSTANCE_1-DAG: Pattern/CurrModule: ['(']{#Int#}[')'][#Void#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_ON_CLASS_INSTANCE_1-DAG: Decl[GlobalVar]/CurrModule: fooObject[#FooStruct#]{{; name=.+$}}
|
|
// INSIDE_FUNCTION_CALL_ON_CLASS_INSTANCE_1: End completions
|
|
}
|
|
|
|
//===--- Variables that have function types.
|
|
|
|
class FuncTypeVars {
|
|
var funcVar1: () -> Double
|
|
var funcVar2: (a: Int) -> Double // adding the label is erroneous.
|
|
}
|
|
|
|
var funcTypeVarsObject: FuncTypeVars
|
|
func testFuncTypeVars() {
|
|
funcTypeVarsObject.funcVar1#^VF1^#
|
|
// VF1: Begin completions
|
|
// VF1-NEXT: Pattern/CurrModule: ()[#Double#]{{; name=.+$}}
|
|
// VF1-NEXT: BuiltinOperator/None: = {#() -> Double##() -> Double#}[#Void#]
|
|
// VF1-NEXT: End completions
|
|
|
|
funcTypeVarsObject.funcVar2#^VF2^#
|
|
// VF2: Begin completions
|
|
// VF2-NEXT: Pattern/CurrModule: ({#Int#})[#Double#]{{; name=.+$}}
|
|
// VF2-NEXT: BuiltinOperator/None: = {#(Int) -> Double##(Int) -> Double#}[#Void#]
|
|
// VF2-NEXT: End completions
|
|
}
|
|
|
|
//===--- Check that we look into base classes.
|
|
|
|
class MembersBase {
|
|
var baseVar = 0
|
|
func baseInstanceFunc() {}
|
|
class func baseStaticFunc() {}
|
|
}
|
|
|
|
class MembersDerived : MembersBase {
|
|
var derivedVar = 0
|
|
func derivedInstanceFunc() {}
|
|
class func derivedStaticFunc() {}
|
|
}
|
|
|
|
var membersDerived: MembersDerived
|
|
func testLookInBase() {
|
|
membersDerived.#^BASE_MEMBERS^#
|
|
// BASE_MEMBERS: Begin completions
|
|
// BASE_MEMBERS-NEXT: Decl[InstanceVar]/CurrNominal: derivedVar[#Int#]{{; name=.+$}}
|
|
// BASE_MEMBERS-NEXT: Decl[InstanceMethod]/CurrNominal: derivedInstanceFunc()[#Void#]{{; name=.+$}}
|
|
// BASE_MEMBERS-NEXT: Decl[InstanceVar]/Super: baseVar[#Int#]{{; name=.+$}}
|
|
// BASE_MEMBERS-NEXT: Decl[InstanceMethod]/Super: baseInstanceFunc()[#Void#]{{; name=.+$}}
|
|
// BASE_MEMBERS-NEXT: End completions
|
|
}
|
|
|
|
func testLookInBaseStatic() {
|
|
MembersDerived.#^BASE_MEMBERS_STATIC^#
|
|
// BASE_MEMBERS_STATIC: Begin completions
|
|
// BASE_MEMBERS_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: derivedInstanceFunc({#self: MembersDerived#})[#() -> Void#]{{; name=.+$}}
|
|
// BASE_MEMBERS_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: derivedStaticFunc()[#Void#]{{; name=.+$}}
|
|
// BASE_MEMBERS_STATIC-NEXT: Decl[Constructor]/CurrNominal: init()[#MembersDerived#]; name=init(){{$}}
|
|
// BASE_MEMBERS_STATIC-NEXT: Decl[InstanceMethod]/Super: baseInstanceFunc({#self: MembersBase#})[#() -> Void#]{{; name=.+$}}
|
|
// BASE_MEMBERS_STATIC-NEXT: Decl[StaticMethod]/Super: baseStaticFunc()[#Void#]{{; name=.+$}}
|
|
// BASE_MEMBERS_STATIC-NEXT: End completions
|
|
}
|
|
|
|
//===--- Check that we can look into protocols.
|
|
|
|
func testLookInProtoNoDot1() {
|
|
fooProtocolInstance#^PROTO_MEMBERS_NO_DOT_1^#
|
|
// PROTO_MEMBERS_NO_DOT_1: Begin completions
|
|
// PROTO_MEMBERS_NO_DOT_1-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_1-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_1-NEXT: Decl[InstanceMethod]/CurrNominal: .fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_1-NEXT: Decl[InstanceMethod]/CurrNominal: .fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_1-NEXT: Decl[Subscript]/CurrNominal: [{#Int#}][#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_1-NEXT: End completions
|
|
}
|
|
|
|
func testLookInProtoNoDot2() {
|
|
fooBarProtocolInstance#^PROTO_MEMBERS_NO_DOT_2^#
|
|
// PROTO_MEMBERS_NO_DOT_2: Begin completions
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[InstanceVar]/CurrNominal: .barInstanceVar[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[InstanceMethod]/CurrNominal: .barInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[InstanceMethod]/CurrNominal: .barInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[InstanceMethod]/CurrNominal: .fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[InstanceMethod]/CurrNominal: .fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: Decl[Subscript]/CurrNominal: [{#Int#}][#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_2-NEXT: End completions
|
|
}
|
|
|
|
func testLookInProtoNoDot3() {
|
|
fooExBarExProtocolInstance#^PROTO_MEMBERS_NO_DOT_3^#
|
|
// PROTO_MEMBERS_NO_DOT_3: Begin completions
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceVar]/Super: .barInstanceVar[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceMethod]/Super: .barInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceMethod]/Super: .barInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceMethod]/CurrNominal: .barExInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceVar]/Super: .fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceVar]/Super: .fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceMethod]/Super: .fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceMethod]/Super: .fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[Subscript]/Super: [{#Int#}][#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: Decl[InstanceMethod]/CurrNominal: .fooExInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_NO_DOT_3-NEXT: End completions
|
|
}
|
|
|
|
func testLookInProto1() {
|
|
fooProtocolInstance.#^PROTO_MEMBERS_1^#
|
|
// PROTO_MEMBERS_1: Begin completions
|
|
// PROTO_MEMBERS_1-NEXT: Decl[InstanceVar]/CurrNominal: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_1-NEXT: Decl[InstanceVar]/CurrNominal: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_1-NEXT: Decl[InstanceMethod]/CurrNominal: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_1-NEXT: Decl[InstanceMethod]/CurrNominal: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_1-NEXT: End completions
|
|
}
|
|
|
|
func testLookInProto2() {
|
|
fooBarProtocolInstance.#^PROTO_MEMBERS_2^#
|
|
// PROTO_MEMBERS_2: Begin completions
|
|
// PROTO_MEMBERS_2-NEXT: Decl[InstanceVar]/CurrNominal: barInstanceVar[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_2-NEXT: Decl[InstanceMethod]/CurrNominal: barInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_2-NEXT: Decl[InstanceMethod]/CurrNominal: barInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_2-NEXT: Decl[InstanceVar]/CurrNominal: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_2-NEXT: Decl[InstanceVar]/CurrNominal: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_2-NEXT: Decl[InstanceMethod]/CurrNominal: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_2-NEXT: Decl[InstanceMethod]/CurrNominal: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_2-NEXT: End completions
|
|
}
|
|
|
|
func testLookInProto3() {
|
|
fooExBarExProtocolInstance.#^PROTO_MEMBERS_3^#
|
|
// PROTO_MEMBERS_3: Begin completions
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceVar]/Super: barInstanceVar[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceMethod]/Super: barInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceMethod]/Super: barInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceMethod]/CurrNominal: barExInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceVar]/Super: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceVar]/Super: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: Decl[InstanceMethod]/CurrNominal: fooExInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_3-NEXT: End completions
|
|
}
|
|
|
|
func testLookInProto4(_ a: FooProtocol & BarBazProtocolComposition) {
|
|
a.#^PROTO_MEMBERS_4^#
|
|
// PROTO_MEMBERS_4: Begin completions
|
|
// PROTO_MEMBERS_4-DAG: Decl[InstanceMethod]/CurrNominal: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_4-DAG: Decl[InstanceMethod]/CurrNominal: barInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_4-DAG: Decl[InstanceMethod]/CurrNominal: bazInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// PROTO_MEMBERS_4: End completions
|
|
}
|
|
|
|
//===--- Check that we can resolve function parameters.
|
|
|
|
func testResolveFuncParam1(_ fs: FooStruct) {
|
|
fs.#^RESOLVE_FUNC_PARAM_1^#
|
|
}
|
|
|
|
class TestResolveFuncParam2 {
|
|
func testResolveFuncParam2a(_ fs: FooStruct) {
|
|
fs.#^RESOLVE_FUNC_PARAM_2^#
|
|
}
|
|
}
|
|
|
|
func testResolveFuncParam3<Foo : FooProtocol>(_ foo: Foo) {
|
|
foo.#^RESOLVE_FUNC_PARAM_3^#
|
|
// RESOLVE_FUNC_PARAM_3: Begin completions
|
|
// RESOLVE_FUNC_PARAM_3-NEXT: Decl[InstanceVar]/Super: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_3-NEXT: Decl[InstanceVar]/Super: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_3-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_3-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_3-NEXT: End completions
|
|
}
|
|
|
|
func testResolveFuncParam4<FooBar : FooProtocol & BarProtocol>(_ fooBar: FooBar) {
|
|
fooBar.#^RESOLVE_FUNC_PARAM_4^#
|
|
// RESOLVE_FUNC_PARAM_4: Begin completions
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: Decl[InstanceVar]/Super: barInstanceVar[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: Decl[InstanceMethod]/Super: barInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: Decl[InstanceMethod]/Super: barInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: Decl[InstanceVar]/Super: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: Decl[InstanceVar]/Super: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_4-NEXT: End completions
|
|
}
|
|
|
|
func testResolveFuncParam5<FooExBarEx : FooExProtocol & BarExProtocol>(_ a: FooExBarEx) {
|
|
a.#^RESOLVE_FUNC_PARAM_5^#
|
|
// RESOLVE_FUNC_PARAM_5: Begin completions
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceVar]/Super: barInstanceVar[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceMethod]/Super: barInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceMethod]/Super: barInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceMethod]/Super: barExInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceVar]/Super: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceVar]/Super: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: Decl[InstanceMethod]/Super: fooExInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_5-NEXT: End completions
|
|
}
|
|
|
|
func testResolveFuncParam6<Foo : FooProtocol where Foo : FooClass>(_ foo: Foo) {
|
|
foo.#^RESOLVE_FUNC_PARAM_6^#
|
|
// RESOLVE_FUNC_PARAM_6: Begin completions
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: Decl[InstanceVar]/Super: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: Decl[InstanceVar]/Super: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: Decl[InstanceVar]/Super: fooClassInstanceVar[#Int#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: Decl[InstanceMethod]/Super: fooClassInstanceFunc0()[#Void#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: Decl[InstanceMethod]/Super: fooClassInstanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_FUNC_PARAM_6-NEXT: End completions
|
|
}
|
|
|
|
class TestResolveConstructorParam1 {
|
|
init(fs: FooStruct) {
|
|
fs.#^RESOLVE_CONSTRUCTOR_PARAM_1^#
|
|
}
|
|
}
|
|
|
|
class TestResolveConstructorParam2 {
|
|
init<Foo : FooProtocol>(foo: Foo) {
|
|
foo.#^RESOLVE_CONSTRUCTOR_PARAM_2^#
|
|
// RESOLVE_CONSTRUCTOR_PARAM_2: Begin completions
|
|
// RESOLVE_CONSTRUCTOR_PARAM_2-NEXT: Decl[InstanceVar]/Super: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_2-NEXT: Decl[InstanceVar]/Super: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_2-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_2-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_2-NEXT: End completions
|
|
}
|
|
}
|
|
|
|
class TestResolveConstructorParam3<Foo : FooProtocol> {
|
|
init(foo: Foo) {
|
|
foo.#^RESOLVE_CONSTRUCTOR_PARAM_3^#
|
|
// RESOLVE_CONSTRUCTOR_PARAM_3: Begin completions
|
|
// RESOLVE_CONSTRUCTOR_PARAM_3-NEXT: Decl[InstanceVar]/Super: fooInstanceVar1[#Int#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_3-NEXT: Decl[InstanceVar]/Super: fooInstanceVar2[#Int#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_3-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc0()[#Double#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_3-NEXT: Decl[InstanceMethod]/Super: fooInstanceFunc1({#(a): Int#})[#Double#]{{; name=.+$}}
|
|
// RESOLVE_CONSTRUCTOR_PARAM_3-NEXT: End completions
|
|
}
|
|
}
|
|
|
|
//===--- Check that we can handle ParenPattern in function arguments.
|
|
|
|
struct FuncParenPattern {
|
|
init(_: Int) {}
|
|
init(_: (Int, Int)) {}
|
|
|
|
mutating
|
|
func instanceFunc(_: Int) {}
|
|
|
|
subscript(_: Int) -> Int {
|
|
get {
|
|
return 0
|
|
}
|
|
}
|
|
}
|
|
|
|
func testFuncParenPattern1(_ fpp: FuncParenPattern) {
|
|
fpp#^FUNC_PAREN_PATTERN_1^#
|
|
// FUNC_PAREN_PATTERN_1: Begin completions
|
|
// FUNC_PAREN_PATTERN_1-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc({#Int#})[#Void#]{{; name=.+$}}
|
|
// FUNC_PAREN_PATTERN_1-NEXT: Decl[Subscript]/CurrNominal: [{#Int#}][#Int#]{{; name=.+$}}
|
|
// FUNC_PAREN_PATTERN_1-NEXT: End completions
|
|
}
|
|
|
|
func testFuncParenPattern2(_ fpp: FuncParenPattern) {
|
|
FuncParenPattern#^FUNC_PAREN_PATTERN_2^#
|
|
// FUNC_PAREN_PATTERN_2: Begin completions
|
|
// FUNC_PAREN_PATTERN_2-NEXT: Decl[Constructor]/CurrNominal: ({#Int#})[#FuncParenPattern#]{{; name=.+$}}
|
|
// FUNC_PAREN_PATTERN_2-NEXT: Decl[Constructor]/CurrNominal: ({#(Int, Int)#})[#FuncParenPattern#]{{; name=.+$}}
|
|
// FUNC_PAREN_PATTERN_2-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc({#self: &FuncParenPattern#})[#(Int) -> Void#]{{; name=.+$}}
|
|
// FUNC_PAREN_PATTERN_2-NEXT: End completions
|
|
}
|
|
|
|
func testFuncParenPattern3(_ fpp: inout FuncParenPattern) {
|
|
fpp.instanceFunc#^FUNC_PAREN_PATTERN_3^#
|
|
// FUNC_PAREN_PATTERN_3: Begin completions
|
|
// FUNC_PAREN_PATTERN_3-NEXT: Pattern/CurrModule: ({#Int#})[#Void#]{{; name=.+$}}
|
|
// FUNC_PAREN_PATTERN_3-NEXT: End completions
|
|
}
|
|
|
|
//===--- Check that we can code complete after function calls
|
|
|
|
struct SomeBuilder {
|
|
init(a: Int) {}
|
|
func doFoo() -> SomeBuilder { return self }
|
|
func doBar() -> SomeBuilder { return self }
|
|
func doBaz(_ z: Double) -> SomeBuilder { return self }
|
|
}
|
|
|
|
func testChainedCalls1() {
|
|
SomeBuilder(42)#^CHAINED_CALLS_1^#
|
|
// CHAINED_CALLS_1: Begin completions
|
|
// CHAINED_CALLS_1-DAG: Decl[InstanceMethod]/CurrNominal: .doFoo()[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_1-DAG: Decl[InstanceMethod]/CurrNominal: .doBar()[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_1-DAG: Decl[InstanceMethod]/CurrNominal: .doBaz({#(z): Double#})[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_1: End completions
|
|
}
|
|
|
|
func testChainedCalls2() {
|
|
SomeBuilder(42).doFoo()#^CHAINED_CALLS_2^#
|
|
// CHAINED_CALLS_2: Begin completions
|
|
// CHAINED_CALLS_2-DAG: Decl[InstanceMethod]/CurrNominal: .doFoo()[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_2-DAG: Decl[InstanceMethod]/CurrNominal: .doBar()[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_2-DAG: Decl[InstanceMethod]/CurrNominal: .doBaz({#(z): Double#})[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_2: End completions
|
|
}
|
|
|
|
func testChainedCalls3() {
|
|
// doBaz() takes a Double. Check that we can recover.
|
|
SomeBuilder(42).doFoo().doBaz(SomeBuilder(24))#^CHAINED_CALLS_3^#
|
|
// CHAINED_CALLS_3: Begin completions
|
|
// CHAINED_CALLS_3-DAG: Decl[InstanceMethod]/CurrNominal: .doFoo()[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_3-DAG: Decl[InstanceMethod]/CurrNominal: .doBar()[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_3-DAG: Decl[InstanceMethod]/CurrNominal: .doBaz({#z: Double#})[#SomeBuilder#]{{; name=.+$}}
|
|
// CHAINED_CALLS_3: End completions
|
|
}
|
|
|
|
//===--- Check that we can code complete expressions that have generic parameters
|
|
|
|
func testResolveGenericParams1() {
|
|
FooGenericStruct<FooStruct>()#^RESOLVE_GENERIC_PARAMS_1^#
|
|
// RESOLVE_GENERIC_PARAMS_1: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_1-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarT[#FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarTBrackets[#[FooStruct]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#(a): FooStruct#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#(a): FooStruct#})[#FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1-NEXT: End completions
|
|
|
|
FooGenericStruct<FooStruct>#^RESOLVE_GENERIC_PARAMS_1_STATIC^#
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[Constructor]/CurrNominal: ({#t: FooStruct#})[#FooGenericStruct<FooStruct>#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#self: &FooGenericStruct<FooStruct>#})[#(FooStruct) -> Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#self: &FooGenericStruct<FooStruct>#})[#(FooStruct) -> FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#self: &FooGenericStruct<FooStruct>#})[#(U) -> U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarT[#Int#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarTBrackets[#[Int]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooVoidStaticFunc1({#(a): FooStruct#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooTStaticFunc1({#(a): FooStruct#})[#FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_1_STATIC-NEXT: End completions
|
|
}
|
|
|
|
func testResolveGenericParams2<Foo : FooProtocol>(_ foo: Foo) {
|
|
FooGenericStruct<Foo>()#^RESOLVE_GENERIC_PARAMS_2^#
|
|
// RESOLVE_GENERIC_PARAMS_2: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_2-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarT[#FooProtocol#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarTBrackets[#[FooProtocol]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#(a): FooProtocol#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#(a): FooProtocol#})[#FooProtocol#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2-NEXT: End completions
|
|
|
|
FooGenericStruct<Foo>#^RESOLVE_GENERIC_PARAMS_2_STATIC^#
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[Constructor]/CurrNominal: ({#t: FooProtocol#})[#FooGenericStruct<FooProtocol>#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#self: &FooGenericStruct<FooProtocol>#})[#(FooProtocol) -> Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#self: &FooGenericStruct<FooProtocol>#})[#(FooProtocol) -> FooProtocol#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#self: &FooGenericStruct<FooProtocol>#})[#(U) -> U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarT[#Int#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarTBrackets[#[Int]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooVoidStaticFunc1({#(a): FooProtocol#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooTStaticFunc1({#(a): FooProtocol#})[#FooProtocol#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_2_STATIC-NEXT: End completions
|
|
}
|
|
|
|
struct TestResolveGenericParams3_4<T> {
|
|
func testResolveGenericParams3() {
|
|
FooGenericStruct<FooStruct>()#^RESOLVE_GENERIC_PARAMS_3^#
|
|
// RESOLVE_GENERIC_PARAMS_3: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_3-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarT[#FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarTBrackets[#[FooStruct]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#(a): FooStruct#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#(a): FooStruct#})[#FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3-NEXT: End completions
|
|
|
|
FooGenericStruct<FooStruct>#^RESOLVE_GENERIC_PARAMS_3_STATIC^#
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC: Begin completions, 9 items
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[Constructor]/CurrNominal: ({#t: FooStruct#})[#FooGenericStruct<FooStruct>#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#self: &FooGenericStruct<FooStruct>#})[#(FooStruct) -> Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#self: &FooGenericStruct<FooStruct>#})[#(FooStruct) -> FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#self: &FooGenericStruct<FooStruct>#})[#(U) -> U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarT[#Int#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarTBrackets[#[Int]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooVoidStaticFunc1({#(a): FooStruct#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooTStaticFunc1({#(a): FooStruct#})[#FooStruct#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_3_STATIC-NEXT: End completions
|
|
}
|
|
|
|
func testResolveGenericParams4(_ t: T) {
|
|
FooGenericStruct<T>(t)#^RESOLVE_GENERIC_PARAMS_4^#
|
|
// RESOLVE_GENERIC_PARAMS_4: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_4-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarT[#T#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarTBrackets[#[T]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#(a): T#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#(a): T#})[#T#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4-NEXT: End completions
|
|
|
|
FooGenericStruct<T>#^RESOLVE_GENERIC_PARAMS_4_STATIC^#
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[Constructor]/CurrNominal: ({#t: T#})[#FooGenericStruct<T>#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#self: &FooGenericStruct<T>#})[#(T) -> Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#self: &FooGenericStruct<T>#})[#(T) -> T#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#self: &FooGenericStruct<T>#})[#(U) -> U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarT[#Int#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarTBrackets[#[Int]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooVoidStaticFunc1({#(a): T#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooTStaticFunc1({#(a): T#})[#T#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_4_STATIC-NEXT: End completions
|
|
}
|
|
|
|
func testResolveGenericParams5<U>(_ u: U) {
|
|
FooGenericStruct<U>(u)#^RESOLVE_GENERIC_PARAMS_5^#
|
|
// RESOLVE_GENERIC_PARAMS_5: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_5-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarT[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5-NEXT: Decl[InstanceVar]/CurrNominal: .fooInstanceVarTBrackets[#[U]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#(a): U#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5-NEXT: End completions
|
|
|
|
FooGenericStruct<U>#^RESOLVE_GENERIC_PARAMS_5_STATIC^#
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC: Begin completions
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[Constructor]/CurrNominal: ({#t: U#})[#FooGenericStruct<U>#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooVoidInstanceFunc1({#self: &FooGenericStruct<U>#})[#(U) -> Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooTInstanceFunc1({#self: &FooGenericStruct<U>#})[#(U) -> U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[InstanceMethod]/CurrNominal: .fooUInstanceFunc1({#self: &FooGenericStruct<U>#})[#(U) -> U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarT[#Int#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[StaticVar]/CurrNominal: .fooStaticVarTBrackets[#[Int]#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooVoidStaticFunc1({#(a): U#})[#Void#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooTStaticFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: Decl[StaticMethod]/CurrNominal: .fooUInstanceFunc1({#(a): U#})[#U#]{{; name=.+$}}
|
|
// RESOLVE_GENERIC_PARAMS_5_STATIC-NEXT: End completions
|
|
}
|
|
}
|
|
|
|
func testResolveGenericParamsError1() {
|
|
// There is no type 'Foo'. Check that we don't crash.
|
|
// FIXME: we could also display correct completion results here, because
|
|
// swift does not have specialization, and the set of completion results does
|
|
// not depend on the generic type argument.
|
|
FooGenericStruct<NotDefinedType>()#^RESOLVE_GENERIC_PARAMS_ERROR_1^#
|
|
// RESOLVE_GENERIC_PARAMS_ERROR_1: found code completion token
|
|
// RESOLVE_GENERIC_PARAMS_ERROR_1-NOT: Begin completions
|
|
}
|
|
|
|
//===--- Check that we can code complete expressions that have unsolved type variables.
|
|
|
|
class BuilderStyle<T> {
|
|
var count = 0
|
|
func addString(_ s: String) -> BuilderStyle<T> {
|
|
count += 1
|
|
return self
|
|
}
|
|
func add(_ t: T) -> BuilderStyle<T> {
|
|
count += 1
|
|
return self
|
|
}
|
|
func get() -> Int {
|
|
return count
|
|
}
|
|
}
|
|
|
|
func testTypeCheckWithUnsolvedVariables1() {
|
|
BuilderStyle().#^TC_UNSOLVED_VARIABLES_1^#
|
|
}
|
|
// TC_UNSOLVED_VARIABLES_1: Begin completions
|
|
// TC_UNSOLVED_VARIABLES_1-NEXT: Decl[InstanceVar]/CurrNominal: count[#Int#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_1-NEXT: Decl[InstanceMethod]/CurrNominal: addString({#(s): String#})[#BuilderStyle<_>#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_1-NEXT: Decl[InstanceMethod]/CurrNominal: add({#(t): _#})[#BuilderStyle<_>#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_1-NEXT: Decl[InstanceMethod]/CurrNominal: get()[#Int#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_1-NEXT: End completions
|
|
|
|
func testTypeCheckWithUnsolvedVariables2() {
|
|
BuilderStyle().addString("abc").#^TC_UNSOLVED_VARIABLES_2^#
|
|
}
|
|
// TC_UNSOLVED_VARIABLES_2: Begin completions
|
|
// TC_UNSOLVED_VARIABLES_2-NEXT: Decl[InstanceVar]/CurrNominal: count[#Int#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_2-NEXT: Decl[InstanceMethod]/CurrNominal: addString({#(s): String#})[#BuilderStyle<_>#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_2-NEXT: Decl[InstanceMethod]/CurrNominal: add({#(t): _#})[#BuilderStyle<_>#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_2-NEXT: Decl[InstanceMethod]/CurrNominal: get()[#Int#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_2-NEXT: End completions
|
|
|
|
func testTypeCheckWithUnsolvedVariables3() {
|
|
BuilderStyle().addString("abc").add(42).#^TC_UNSOLVED_VARIABLES_3^#
|
|
}
|
|
// TC_UNSOLVED_VARIABLES_3: Begin completions
|
|
// TC_UNSOLVED_VARIABLES_3-NEXT: Decl[InstanceVar]/CurrNominal: count[#Int#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_3-NEXT: Decl[InstanceMethod]/CurrNominal: addString({#(s): String#})[#BuilderStyle<Int>#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_3-NEXT: Decl[InstanceMethod]/CurrNominal: add({#(t): Int#})[#BuilderStyle<Int>#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_3-NEXT: Decl[InstanceMethod]/CurrNominal: get()[#Int#]{{; name=.+$}}
|
|
// TC_UNSOLVED_VARIABLES_3-NEXT: End completions
|
|
|
|
func testTypeCheckNil() {
|
|
nil#^TC_UNSOLVED_VARIABLES_4^#
|
|
}
|
|
// TC_UNSOLVED_VARIABLES_4-NOT: Decl{{.*}}: .{{[a-zA-Z]}}
|
|
|
|
//===--- Check that we can look up into modules
|
|
|
|
func testResolveModules1() {
|
|
Swift#^RESOLVE_MODULES_1^#
|
|
// RESOLVE_MODULES_1: Begin completions
|
|
// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int8[#Int8#]{{; name=.+$}}
|
|
// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int16[#Int16#]{{; name=.+$}}
|
|
// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int32[#Int32#]{{; name=.+$}}
|
|
// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Int64[#Int64#]{{; name=.+$}}
|
|
// RESOLVE_MODULES_1-DAG: Decl[Struct]/OtherModule[Swift]: .Bool[#Bool#]{{; name=.+$}}
|
|
// RESOLVE_MODULES_1-DAG: Decl[TypeAlias]/OtherModule[Swift]: .Float32[#Float#]{{; name=.+$}}
|
|
// RESOLVE_MODULES_1: End completions
|
|
}
|
|
|
|
//===--- Check that we can complete inside interpolated string literals
|
|
|
|
func testInterpolatedString1() {
|
|
"\(fooObject.#^INTERPOLATED_STRING_1^#)"
|
|
}
|
|
|
|
// FOO_OBJECT_DOT1: Begin completions
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceVar]/CurrNominal: lazyInstanceVar[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: instanceFunc0()[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: instanceFunc1({#(a): Int#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: instanceFunc2({#(a): Int#}, {#b: &Double#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: instanceFunc3({#(a): Int#}, {#(Float, Double)#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceMethod]/CurrNominal/NotRecommended/TypeRelation[Invalid]: instanceFunc4({#(a): Int?#}, {#b: Int!#}, {#c: &Int?#}, {#d: &Int!#})[#Void#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceMethod]/CurrNominal: instanceFunc5()[#Int?#]{{; name=.+$}}
|
|
// FOO_OBJECT_DOT1-DAG: Decl[InstanceMethod]/CurrNominal: instanceFunc6()[#Int!#]{{; name=.+$}}
|
|
|
|
//===--- Check protocol extensions
|
|
|
|
struct WillConformP1 {
|
|
}
|
|
|
|
protocol P1 {
|
|
func reqP1()
|
|
}
|
|
|
|
protocol P2 : P1 {
|
|
func reqP2()
|
|
}
|
|
|
|
protocol P3 : P1, P2 {
|
|
}
|
|
|
|
extension P1 {
|
|
final func extP1() {}
|
|
}
|
|
|
|
extension P2 {
|
|
final func extP2() {}
|
|
}
|
|
|
|
extension P3 {
|
|
final func reqP1() {}
|
|
final func reqP2() {}
|
|
final func extP3() {}
|
|
}
|
|
|
|
extension WillConformP1 : P1 {
|
|
func reqP1() {}
|
|
}
|
|
|
|
struct DidConformP2 : P2 {
|
|
func reqP1() {}
|
|
func reqP2() {}
|
|
}
|
|
|
|
struct DidConformP3 : P3 {
|
|
}
|
|
|
|
func testProtocol1(_ x: P1) {
|
|
x.#^PROTOCOL_EXT_P1^#
|
|
}
|
|
// PROTOCOL_EXT_P1: Begin completions
|
|
// PROTOCOL_EXT_P1-DAG: Decl[InstanceMethod]/CurrNominal: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P1-DAG: Decl[InstanceMethod]/CurrNominal: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P1: End completions
|
|
|
|
|
|
func testProtocol2(_ x: P2) {
|
|
x.#^PROTOCOL_EXT_P2^#
|
|
}
|
|
// PROTOCOL_EXT_P2: Begin completions
|
|
// PROTOCOL_EXT_P2-DAG: Decl[InstanceMethod]/Super: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P2-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P2-DAG: Decl[InstanceMethod]/CurrNominal: reqP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P2-DAG: Decl[InstanceMethod]/CurrNominal: extP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P2: End completions
|
|
|
|
func testProtocol3(_ x: P3) {
|
|
x.#^PROTOCOL_EXT_P3^#
|
|
}
|
|
// PROTOCOL_EXT_P3: Begin completions
|
|
|
|
// FIXME: the next two should both be "CurrentNominal"
|
|
// PROTOCOL_EXT_P3-DAG: Decl[InstanceMethod]/Super: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P3-DAG: Decl[InstanceMethod]/Super: reqP2()[#Void#]{{; name=.+$}}
|
|
|
|
// PROTOCOL_EXT_P3-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P3-DAG: Decl[InstanceMethod]/Super: extP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P3-DAG: Decl[InstanceMethod]/CurrNominal: extP3()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P3: End completions
|
|
|
|
func testConformingConcrete1(_ x: WillConformP1) {
|
|
x.#^PROTOCOL_EXT_WILLCONFORMP1^#
|
|
}
|
|
// PROTOCOL_EXT_WILLCONFORMP1: Begin completions
|
|
// PROTOCOL_EXT_WILLCONFORMP1-DAG: Decl[InstanceMethod]/CurrNominal: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_WILLCONFORMP1-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_WILLCONFORMP1: End completions
|
|
|
|
func testConformingConcrete2(_ x: DidConformP2) {
|
|
x.#^PROTOCOL_EXT_DIDCONFORMP2^#
|
|
}
|
|
// PROTOCOL_EXT_DIDCONFORMP2: Begin completions
|
|
// PROTOCOL_EXT_DIDCONFORMP2-DAG: Decl[InstanceMethod]/CurrNominal: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP2-DAG: Decl[InstanceMethod]/CurrNominal: reqP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP2-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP2-DAG: Decl[InstanceMethod]/Super: extP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP2: End completions
|
|
|
|
func testConformingConcrete3(_ x: DidConformP3) {
|
|
x.#^PROTOCOL_EXT_DIDCONFORMP3^#
|
|
}
|
|
// PROTOCOL_EXT_DIDCONFORMP3: Begin completions
|
|
// FIXME: the next two should both be "CurrentNominal"
|
|
// PROTOCOL_EXT_DIDCONFORMP3-DAG: Decl[InstanceMethod]/Super: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP3-DAG: Decl[InstanceMethod]/Super: reqP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP3-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP3-DAG: Decl[InstanceMethod]/Super: extP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP3-DAG: Decl[InstanceMethod]/Super: extP3()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_DIDCONFORMP3: End completions
|
|
|
|
func testGenericConforming1<T: P1>(x: T) {
|
|
x.#^PROTOCOL_EXT_GENERICP1^#
|
|
}
|
|
// PROTOCOL_EXT_GENERICP1: Begin completions
|
|
// PROTOCOL_EXT_GENERICP1-DAG: Decl[InstanceMethod]/Super: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP1-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP1: End completions
|
|
|
|
func testGenericConforming2<T: P2>(x: T) {
|
|
x.#^PROTOCOL_EXT_GENERICP2^#
|
|
}
|
|
// PROTOCOL_EXT_GENERICP2: Begin completions
|
|
// PROTOCOL_EXT_GENERICP2-DAG: Decl[InstanceMethod]/Super: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP2-DAG: Decl[InstanceMethod]/Super: reqP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP2-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP2-DAG: Decl[InstanceMethod]/Super: extP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP2: End completions
|
|
|
|
func testGenericConforming3<T: P3>(x: T) {
|
|
x.#^PROTOCOL_EXT_GENERICP3^#
|
|
}
|
|
// PROTOCOL_EXT_GENERICP3: Begin completions
|
|
// PROTOCOL_EXT_GENERICP3-DAG: Decl[InstanceMethod]/Super: reqP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP3-DAG: Decl[InstanceMethod]/Super: reqP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP3-DAG: Decl[InstanceMethod]/Super: extP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP3-DAG: Decl[InstanceMethod]/Super: extP2()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP3-DAG: Decl[InstanceMethod]/Super: extP3()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_GENERICP3: End completions
|
|
|
|
struct OnlyMe {}
|
|
protocol P4 {
|
|
associatedtype T
|
|
}
|
|
extension P4 where Self.T : P1 {
|
|
final func extP4WhenP1() {}
|
|
final var x: Int { return 1 }
|
|
init() {}
|
|
}
|
|
extension P4 where Self.T : P1 {
|
|
init(x: Int) {}
|
|
}
|
|
extension P4 where Self.T == OnlyMe {
|
|
final func extP4OnlyMe() {}
|
|
final subscript(x: Int) -> Int { return 2 }
|
|
}
|
|
struct Concrete1 : P4 {
|
|
typealias T = WillConformP1
|
|
}
|
|
struct Generic1<S: P1> : P4 {
|
|
typealias T = S
|
|
}
|
|
struct Concrete2 : P4 {
|
|
typealias T = OnlyMe
|
|
}
|
|
struct Generic2<S> : P4 {
|
|
typealias T = S
|
|
}
|
|
|
|
func testConstrainedP4(_ x: P4) {
|
|
x.#^PROTOCOL_EXT_P4^#
|
|
}
|
|
// PROTOCOL_EXT_P4-NOT: extP4
|
|
|
|
func testConstrainedConcrete1(_ x: Concrete1) {
|
|
x.#^PROTOCOL_EXT_CONCRETE1^#
|
|
}
|
|
func testConstrainedConcrete2(_ x: Generic1<WillConformP1>) {
|
|
x.#^PROTOCOL_EXT_CONCRETE2^#
|
|
}
|
|
func testConstrainedGeneric1<S: P1>(x: Generic1<S>) {
|
|
x.#^PROTOCOL_EXT_CONSTRAINED_GENERIC_1^#
|
|
}
|
|
func testConstrainedGeneric2<S: P4 where S.T : P1>(x: S) {
|
|
x.#^PROTOCOL_EXT_CONSTRAINED_GENERIC_2^#
|
|
}
|
|
extension Concrete1 {
|
|
func testInsideConstrainedConcrete1_1() {
|
|
#^PROTOCOL_EXT_INSIDE_CONCRETE1_1^#
|
|
}
|
|
func testInsideConstrainedConcrete1_2() {
|
|
self.#^PROTOCOL_EXT_INSIDE_CONCRETE1_2^#
|
|
}
|
|
}
|
|
// PROTOCOL_EXT_P4_P1: Begin completions
|
|
// PROTOCOL_EXT_P4_P1-NOT: extP4OnlyMe()
|
|
// PROTOCOL_EXT_P4_P1-DAG: Decl[InstanceMethod]/Super: extP4WhenP1()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P4_P1-DAG: Decl[InstanceVar]/Super: x[#Int#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P4_P1-NOT: extP4OnlyMe()
|
|
// PROTOCOL_EXT_P4_P1: End completions
|
|
|
|
func testConstrainedConcrete3(_ x: Concrete2) {
|
|
x.#^PROTOCOL_EXT_CONCRETE3^#
|
|
}
|
|
func testConstrainedConcrete3_sub(_ x: Concrete2) {
|
|
x#^PROTOCOL_EXT_CONCRETE3_SUB^#
|
|
}
|
|
func testConstrainedConcrete4(_ x: Generic2<OnlyMe>) {
|
|
x.#^PROTOCOL_EXT_CONCRETE4^#
|
|
}
|
|
func testConstrainedGeneric1<S: P4 where S.T == OnlyMe>(x: S) {
|
|
x.#^PROTOCOL_EXT_CONSTRAINED_GENERIC_3^#
|
|
}
|
|
func testConstrainedGeneric1_sub<S: P4 where S.T == OnlyMe>(x: S) {
|
|
x#^PROTOCOL_EXT_CONSTRAINED_GENERIC_3_SUB^#
|
|
}
|
|
extension Concrete2 {
|
|
func testInsideConstrainedConcrete2_1() {
|
|
#^PROTOCOL_EXT_INSIDE_CONCRETE2_1^#
|
|
}
|
|
func testInsideConstrainedConcrete2_2() {
|
|
self.#^PROTOCOL_EXT_INSIDE_CONCRETE2_2^#
|
|
}
|
|
}
|
|
// PROTOCOL_EXT_P4_ONLYME: Begin completions
|
|
// PROTOCOL_EXT_P4_ONLYME-NOT: extP4WhenP1()
|
|
// PROTOCOL_EXT_P4_ONLYME-NOT: x[#Int#]
|
|
// PROTOCOL_EXT_P4_ONLYME-DAG: Decl[InstanceMethod]/Super: extP4OnlyMe()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P4_ONLYME-NOT: extP4WhenP1()
|
|
// PROTOCOL_EXT_P4_ONLYME-NOT: x[#Int#]
|
|
// PROTOCOL_EXT_P4_ONLYME: End completions
|
|
|
|
// PROTOCOL_EXT_P4_ONLYME_SUB: Begin completions
|
|
// PROTOCOL_EXT_P4_ONLYME_SUB: Decl[Subscript]/Super: [{#Int#}][#Int#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P4_ONLYME_SUB: End completions
|
|
|
|
func testTypealias1() {
|
|
Concrete1.#^PROTOCOL_EXT_TA_1^#
|
|
}
|
|
func testTypealias1<S: P4 where S.T == WillConformP1>() {
|
|
S.#^PROTOCOL_EXT_TA_2^#
|
|
}
|
|
// PROTOCOL_EXT_TA: Begin completions
|
|
// PROTOCOL_EXT_TA_2-DAG: Decl[AssociatedType]/{{Super|CurrNominal}}: T
|
|
// PROTOCOL_EXT_TA: End completions
|
|
|
|
func testProtExtInit1() {
|
|
Concrete1(#^PROTOCOL_EXT_INIT_1^#
|
|
}
|
|
|
|
// PROTOCOL_EXT_INIT_1: Begin completions
|
|
// PROTOCOL_EXT_INIT_1: Decl[Constructor]/Super: ['(']{#x: Int#}[')'][#Concrete1#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_INIT_1: End completions
|
|
|
|
func testProtExtInit2<S: P4 where S.T : P1>() {
|
|
S(#^PROTOCOL_EXT_INIT_2^#
|
|
}
|
|
|
|
// PROTOCOL_EXT_INIT_2: Begin completions
|
|
// PROTOCOL_EXT_INIT_2: Decl[Constructor]/Super: ['(']{#x: Int#}[')'][#P4#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_INIT_2: End completions
|
|
|
|
extension P4 where Self.T == OnlyMe {
|
|
final func test1() {
|
|
self.#^PROTOCOL_EXT_P4_DOT_1^#
|
|
}
|
|
final func test2() {
|
|
#^PROTOCOL_EXT_P4_DOT_2^#
|
|
}
|
|
}
|
|
// PROTOCOL_EXT_P4_DOT: Begin completions
|
|
// PROTOCOL_EXT_P4_DOT-NOT: extP4WhenP1()
|
|
// PROTOCOL_EXT_P4_DOT-DAG: Decl[InstanceMethod]/Super: extP4OnlyMe()[#Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P4_DOT-NOT: extP4WhenP1()
|
|
// PROTOCOL_EXT_P4_DOT: End completions
|
|
|
|
extension P4 where Self.T == WillConformP1 {
|
|
final func test() {
|
|
T.#^PROTOCOL_EXT_P4_T_DOT_1^#
|
|
}
|
|
}
|
|
// PROTOCOL_EXT_P4_T_DOT_1: Begin completions
|
|
// PROTOCOL_EXT_P4_T_DOT_1-DAG: Decl[InstanceMethod]/CurrNominal: reqP1({#self: WillConformP1#})[#() -> Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P4_T_DOT_1-DAG: Decl[InstanceMethod]/Super: extP1({#self: WillConformP1#})[#() -> Void#]{{; name=.+$}}
|
|
// PROTOCOL_EXT_P4_T_DOT_1: End completions
|
|
|
|
protocol PWithT {
|
|
associatedtype T
|
|
func foo(_ x: T) -> T
|
|
}
|
|
|
|
extension PWithT {
|
|
final func bar(_ x: T) -> T {
|
|
return x
|
|
}
|
|
}
|
|
|
|
// Note: PWithT cannot actually be used as an existential type because it has
|
|
// an associated type. But we should still be able to give code completions.
|
|
func testUnusableProtExt(_ x: PWithT) {
|
|
x.#^PROTOCOL_EXT_UNUSABLE_EXISTENTIAL^#
|
|
}
|
|
// PROTOCOL_EXT_UNUSABLE_EXISTENTIAL: Begin completions
|
|
// PROTOCOL_EXT_UNUSABLE_EXISTENTIAL: Decl[InstanceMethod]/CurrNominal: foo({#(x): PWithT.T#})[#PWithT.T#]{{; name=.+}}
|
|
// PROTOCOL_EXT_UNUSABLE_EXISTENTIAL: Decl[InstanceMethod]/CurrNominal: bar({#(x): PWithT.T#})[#PWithT.T#]{{; name=.+}}
|
|
// PROTOCOL_EXT_UNUSABLE_EXISTENTIAL: End completions
|
|
|
|
protocol dedupP {
|
|
associatedtype T
|
|
func foo() -> T
|
|
var bar: T {get}
|
|
subscript(x: T) -> T {get}
|
|
}
|
|
|
|
extension dedupP {
|
|
func foo() -> T { return T() }
|
|
var bar: T { return T() }
|
|
subscript(x: T) -> T { return T() }
|
|
}
|
|
|
|
struct dedupS : dedupP {
|
|
func foo() -> Int { return T() }
|
|
var bar: Int = 5
|
|
subscript(x: Int) -> Int { return 10 }
|
|
}
|
|
|
|
func testDeDuped(_ x: dedupS) {
|
|
x#^PROTOCOL_EXT_DEDUP_1^#
|
|
// FIXME: Should produce 3 items
|
|
// PROTOCOL_EXT_DEDUP_1: Begin completions, 5 items
|
|
// PROTOCOL_EXT_DEDUP_1: Decl[InstanceMethod]/CurrNominal: .foo()[#Int#]; name=foo()
|
|
// PROTOCOL_EXT_DEDUP_1: Decl[InstanceVar]/CurrNominal: .bar[#Int#]; name=bar
|
|
// PROTOCOL_EXT_DEDUP_1: Decl[Subscript]/CurrNominal: [{#Int#}][#Int#]; name=[Int]
|
|
// PROTOCOL_EXT_DEDUP_1: End completions
|
|
}
|
|
func testDeDuped2(_ x: dedupP) {
|
|
x#^PROTOCOL_EXT_DEDUP_2^#
|
|
// PROTOCOL_EXT_DEDUP_2: Begin completions, 3 items
|
|
// PROTOCOL_EXT_DEDUP_2: Decl[InstanceMethod]/CurrNominal: .foo()[#dedupP.T#]; name=foo()
|
|
// PROTOCOL_EXT_DEDUP_2: Decl[InstanceVar]/CurrNominal: .bar[#dedupP.T#]; name=bar
|
|
// PROTOCOL_EXT_DEDUP_2: Decl[Subscript]/CurrNominal: [{#Self.T#}][#Self.T#]; name=[Self.T]
|
|
// PROTOCOL_EXT_DEDUP_2: End completions
|
|
}
|
|
func testDeDuped3<T : dedupP where T.T == Int>(_ x: T) {
|
|
x#^PROTOCOL_EXT_DEDUP_3^#
|
|
// PROTOCOL_EXT_DEDUP_3: Begin completions, 3 items
|
|
// PROTOCOL_EXT_DEDUP_3: Decl[InstanceMethod]/Super: .foo()[#Int#]; name=foo()
|
|
// PROTOCOL_EXT_DEDUP_3: Decl[InstanceVar]/Super: .bar[#Int#]; name=bar
|
|
// PROTOCOL_EXT_DEDUP_3: Decl[Subscript]/Super: [{#Self.T#}][#Self.T#]; name=[Self.T]
|
|
// PROTOCOL_EXT_DEDUP_3: End completions
|
|
}
|
|
|
|
//===--- Check calls that may throw
|
|
|
|
func globalFuncThrows() throws {}
|
|
func globalFuncRethrows(_ x: () throws -> ()) rethrows {}
|
|
struct HasThrowingMembers {
|
|
func memberThrows() throws {}
|
|
func memberRethrows(_ x: () throws -> ()) rethrows {}
|
|
init() throws {}
|
|
init(x: () throws -> ()) rethrows {}
|
|
}
|
|
|
|
func testThrows001() {
|
|
globalFuncThrows#^THROWS1^#
|
|
|
|
// THROWS1: Begin completions
|
|
// THROWS1: Pattern/CurrModule: ()[' throws'][#Void#]; name=() throws
|
|
// THROWS1: End completions
|
|
}
|
|
func testThrows002() {
|
|
globalFuncRethrows#^THROWS2^#
|
|
|
|
// THROWS2: Begin completions
|
|
// THROWS2: Pattern/CurrModule: ({#(x): () throws -> ()##() throws -> ()#})[' rethrows'][#Void#]; name=(x: () throws -> ()) rethrows
|
|
// THROWS2: End completions
|
|
}
|
|
func testThrows003(_ x: HasThrowingMembers) {
|
|
x.#^MEMBER_THROWS1^#
|
|
// MEMBER_THROWS1: Begin completions
|
|
// MEMBER_THROWS1-DAG: Decl[InstanceMethod]/CurrNominal: memberThrows()[' throws'][#Void#]
|
|
// MEMBER_THROWS1-DAG: Decl[InstanceMethod]/CurrNominal: memberRethrows({#(x): () throws -> ()##() throws -> ()#})[' rethrows'][#Void#]
|
|
// MEMBER_THROWS1: End completions
|
|
}
|
|
func testThrows004(_ x: HasThrowingMembers) {
|
|
x.memberThrows#^MEMBER_THROWS2^#
|
|
// MEMBER_THROWS2: Begin completions
|
|
// MEMBER_THROWS2: Pattern/CurrModule: ()[' throws'][#Void#]; name=() throws
|
|
// MEMBER_THROWS2: End completions
|
|
}
|
|
func testThrows005(_ x: HasThrowingMembers) {
|
|
x.memberRethrows#^MEMBER_THROWS3^#
|
|
// MEMBER_THROWS3: Begin completions
|
|
// MEMBER_THROWS3: Pattern/CurrModule: ({#(x): () throws -> ()##() throws -> ()#})[' rethrows'][#Void#]; name=(x: () throws -> ()) rethrows
|
|
// MEMBER_THROWS3: End completions
|
|
}
|
|
func testThrows006() {
|
|
HasThrowingMembers(#^INIT_THROWS1^#
|
|
// INIT_THROWS1: Begin completions
|
|
// INIT_THROWS1: Decl[Constructor]/CurrNominal: ['(']{#x: () throws -> ()##() throws -> ()#}[')'][' rethrows'][#HasThrowingMembers#]
|
|
// INIT_THROWS1: End completions
|
|
}
|
|
|
|
|
|
// rdar://21346928
|
|
// Just sample some String API to sanity check.
|
|
// AUTOCLOSURE_STRING: Decl[InstanceVar]/CurrNominal: unicodeScalars[#String.UnicodeScalarView#]
|
|
// AUTOCLOSURE_STRING: Decl[InstanceVar]/CurrNominal: utf16[#String.UTF16View#]
|
|
func testWithAutoClosure1(_ x: String?) {
|
|
(x ?? "autoclosure").#^AUTOCLOSURE1^#
|
|
}
|
|
func testWithAutoClosure2(_ x: String?) {
|
|
let y = (x ?? "autoclosure").#^AUTOCLOSURE2^#
|
|
}
|
|
func testWithAutoClosure3(_ x: String?) {
|
|
let y = (x ?? "autoclosure".#^AUTOCLOSURE3^#)
|
|
}
|
|
func testWithAutoClosure4(_ x: String?) {
|
|
let y = { let z = (x ?? "autoclosure").#^AUTOCLOSURE4^# }
|
|
}
|
|
func testWithAutoClosure5(_ x: String?) {
|
|
if let y = (x ?? "autoclosure").#^AUTOCLOSURE5^# {
|
|
}
|
|
}
|
|
|
|
func testGenericTypealias1() {
|
|
typealias MyPair<T> = (T, T)
|
|
var x: MyPair<Int>
|
|
x.#^GENERIC_TYPEALIAS_1^#
|
|
}
|
|
// GENERIC_TYPEALIAS_1: Pattern/CurrNominal: 0[#Int#];
|
|
// GENERIC_TYPEALIAS_1: Pattern/CurrNominal: 1[#Int#];
|
|
|
|
func testGenericTypealias2() {
|
|
struct Enclose {
|
|
typealias MyPair<T> = (T, T)
|
|
}
|
|
Enclose.#^GENERIC_TYPEALIAS_2^#
|
|
}
|
|
// GENERIC_TYPEALIAS_2: Decl[TypeAlias]/CurrNominal: MyPair[#(T, T)#];
|
|
|
|
struct Deprecated {
|
|
@available(*, deprecated)
|
|
func deprecated(x: Deprecated) {
|
|
x.#^DEPRECATED_1^#
|
|
}
|
|
}
|
|
// DEPRECATED_1: Decl[InstanceMethod]/CurrNominal/NotRecommended: deprecated({#x: Deprecated#})[#Void#];
|
|
|
|
struct Person {
|
|
var firstName: String
|
|
}
|
|
class Other { var nameFromOther: Int = 1 }
|
|
class TestDotExprWithNonNominal {
|
|
var otherField: Other
|
|
|
|
func test1() {
|
|
let person = Person(firstName: otherField.#^DOT_EXPR_NON_NOMINAL_1^#)
|
|
// DOT_EXPR_NON_NOMINAL_1-NOT: Instance
|
|
// DOT_EXPR_NON_NOMINAL_1: Decl[InstanceVar]/CurrNominal: nameFromOther[#Int#];
|
|
// DOT_EXPR_NON_NOMINAL_1-NOT: Instance
|
|
}
|
|
func test2() {
|
|
let person = Person(firstName: 1.#^DOT_EXPR_NON_NOMINAL_2^#)
|
|
// DOT_EXPR_NON_NOMINAL_2-NOT: otherField
|
|
// DOT_EXPR_NON_NOMINAL_2-NOT: firstName
|
|
// DOT_EXPR_NON_NOMINAL_2: Decl[InstanceVar]/CurrNominal: hashValue[#Int#];
|
|
// DOT_EXPR_NON_NOMINAL_2-NOT: otherField
|
|
// DOT_EXPR_NON_NOMINAL_2-NOT: firstName
|
|
}
|
|
}
|