Skip to content

Commit 8ed71f0

Browse files
authored
Merge pull request #40079 from rintaro/ide-completion-default-nil
[CodeCompletion] `nil`/`[]`/`[:]` default arguments are "interesting"
2 parents bbd6759 + a87996c commit 8ed71f0

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2739,10 +2739,17 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
27392739
for (auto param : *func->getParameters()) {
27402740
switch (param->getDefaultArgumentKind()) {
27412741
case DefaultArgumentKind::Normal:
2742+
case DefaultArgumentKind::NilLiteral:
2743+
case DefaultArgumentKind::EmptyArray:
2744+
case DefaultArgumentKind::EmptyDictionary:
27422745
case DefaultArgumentKind::StoredProperty:
27432746
case DefaultArgumentKind::Inherited: // FIXME: include this?
27442747
return true;
2745-
default:
2748+
2749+
case DefaultArgumentKind::None:
2750+
#define MAGIC_IDENTIFIER(NAME, STRING, SYNTAX_KIND) \
2751+
case DefaultArgumentKind::NAME:
2752+
#include "swift/AST/MagicIdentifierKinds.def"
27462753
break;
27472754
}
27482755
}

test/IDE/complete_default_arguments.swift

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DEFAULT_ARGS_9 > %t
1717
// RUN: %FileCheck %s -check-prefix=DEFAULT_ARGS_9 < %t
1818
// RUN: %FileCheck %s -check-prefix=NEGATIVE_DEFAULT_ARGS_9 < %t
19-
//
19+
20+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DEFAULT_ARGS_10 | %FileCheck %s -check-prefix=DEFAULT_ARGS_10
21+
2022
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DEFAULT_ARG_INIT_1 | %FileCheck %s -check-prefix=DEFAULT_ARG_INIT
2123
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DEFAULT_ARG_INIT_2 | %FileCheck %s -check-prefix=DEFAULT_ARG_INIT_INTCONTEXT
2224
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DEFAULT_ARG_INIT_3 | %FileCheck %s -check-prefix=DEFAULT_ARG_INIT_INTCONTEXT
@@ -28,6 +30,9 @@ func freeFuncWithDefaultArgs1(
2830
func freeFuncWithDefaultArgs2(file: String = #file) {}
2931
func freeFuncWithDefaultArgs3(a: Int = 0) {}
3032
func freeFuncWithDefaultArgs4(_ a: Int, b: Int = 0, c: Int = 0) {}
33+
func freeFuncWithDefaultArgs5(a: Int? = nil) {}
34+
func freeFuncWithDefaultArgs6(a: [Int] = []) {}
35+
func freeFuncWithDefaultArgs7(a: [Int:Int] = [:]) {}
3136

3237
struct A {
3338
func methodWithDefaultArgs1(a: Int = 0) {}
@@ -60,6 +65,12 @@ func testDefaultArgs1() {
6065
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs3({#a: Int#})[#Void#]{{; name=.+$}}
6166
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs4({#(a): Int#})[#Void#]{{; name=.+$}}
6267
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs4({#(a): Int#}, {#b: Int#}, {#c: Int#})[#Void#]{{; name=.+$}}
68+
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs5()[#Void#]{{; name=.+$}}
69+
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs5({#a: Int?#})[#Void#]{{; name=.+$}}
70+
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs6()[#Void#]{{; name=.+$}}
71+
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs6({#a: [Int]#})[#Void#]{{; name=.+$}}
72+
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs7()[#Void#]{{; name=.+$}}
73+
// DEFAULT_ARGS_1-DAG: Decl[FreeFunction]/CurrModule: freeFuncWithDefaultArgs7({#a: [Int : Int]#})[#Void#]{{; name=.+$}}
6374
// DEFAULT_ARGS_1: End completions
6475

6576
func testDefaultArgs2() {
@@ -131,6 +142,15 @@ func testDefaultArgs9(_ x: C2) {
131142
// DEFAULT_ARGS_9: End completions
132143
// NEGATIVE_DEFAULT_ARGS_9-NOT: methodWithDefaultArgs1()
133144

145+
func testDefaultArgs10() {
146+
freeFuncWithDefaultArgs5(#^DEFAULT_ARGS_10^#)
147+
// DEFAULT_ARGS_10: Begin completions
148+
// DEFAULT_ARGS_10-DAG: Decl[FreeFunction]/CurrModule/Flair[ArgLabels]: ['('][')'][#Void#]; name=
149+
// DEFAULT_ARGS_10-DAG: Decl[FreeFunction]/CurrModule/Flair[ArgLabels]: ['(']{#a: Int?#}[')'][#Void#]; name=a:
150+
// DEFAULT_ARGS_10: End completions
151+
152+
}
153+
134154
let globalVar = 1
135155
func testDefaultArgInit1(x = #^DEFAULT_ARG_INIT_1^#) { }
136156
func testDefaultArgInit2(_: Int = #^DEFAULT_ARG_INIT_2^#) { }

0 commit comments

Comments
 (0)