Skip to content

Commit 14fbb82

Browse files
authored
Merge pull request swiftlang#29854 from rintaro/ide-completion-keypathfunc-paramty
[CodeCompletion] Use AnyFunctionType::Param::getParameterType()
2 parents 13d5a8a + 315f65f commit 14fbb82

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5585,10 +5585,13 @@ void CodeCompletionCallbacksImpl::doneParsing() {
55855585
}
55865586

55875587
// KeyPath can be used as a function that receives its root type.
5588-
if (T->is<AnyFunctionType>() &&
5589-
T->castTo<AnyFunctionType>()->getNumParams() == 1) {
5590-
baseType = T->castTo<AnyFunctionType>()->getParams()[0].getOldType();
5591-
break;
5588+
if (T->is<AnyFunctionType>()) {
5589+
auto *fnType = T->castTo<AnyFunctionType>();
5590+
if (fnType->getNumParams() == 1) {
5591+
const AnyFunctionType::Param &param = fnType->getParams()[0];
5592+
baseType = param.getParameterType();
5593+
break;
5594+
}
55925595
}
55935596
}
55945597
}

test/IDE/complete_swift_key_path.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT_FUNC_GENERICRESULT | %FileCheck %s -check-prefix=PERSONTYPE-DOT
3030
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT_FUNC_ROOT | %FileCheck %s -check-prefix=PERSONTYPE-DOT
3131
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT_FUNC_NONROOT | %FileCheck %s -check-prefix=OBJ-DOT
32+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT_FUNC_INOUT | %FileCheck %s -check-prefix=PERSONTYPE-DOT
33+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CONTEXT_FUNC_VARIADIC | %FileCheck %s -check-prefix=ARRAYTYPE-DOT
3234

3335
class Person {
3436
var name: String
@@ -163,10 +165,16 @@ func recvFuncGeneric<T>(_ fn: (Person) -> T) {
163165

164166
struct Wrap<T> {
165167
func map<U>(_ fn: (T) -> U) -> U { fatalError() }
168+
func _inout<U>(_ fn: (inout T) -> U) -> U { fatalError() }
169+
func variadic<U>(_ fn: (T...) -> U) -> U { fatalError() }
166170
}
167171
func testKeyPathAsFunctions(wrapped: Wrap<Person>) {
168172
let _ = wrapped.map(\.#^CONTEXT_FUNC_ROOT^#)
169173
// Same as TYPE_DOT.
170174
let _ = wrapped.map(\.friends[0].#^CONTEXT_FUNC_NONROOT^#)
171175
// Same as OBJ_DOT.
176+
let _ = wrapped._inout(\.#^CONTEXT_FUNC_INOUT^#)
177+
// Same as TYPE_DOT.
178+
let _ = wrapped.variadic(\.#^CONTEXT_FUNC_VARIADIC^#)
179+
// Same as ARRAYTYPE_DOT.
172180
}

0 commit comments

Comments
 (0)