Skip to content

Commit 064749e

Browse files
committed
[CodeCompletion] Assume non-'isSimpleDidSet' in code completion
Code completion always want to see implicit 'oldValue' with the correct type. Return 'false' from 'SimpleDidSetRequest' in code completion mode. rdar://problem/64699286 (cherry picked from commit 21b9fc3)
1 parent a890d8b commit 064749e

File tree

2 files changed

+78
-9
lines changed

2 files changed

+78
-9
lines changed

lib/Sema/TypeCheckDecl.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,6 +1152,10 @@ bool SimpleDidSetRequest::evaluate(Evaluator &evaluator,
11521152
return false;
11531153
}
11541154

1155+
// Always assume non-simple 'didSet' in code completion mode.
1156+
if (decl->getASTContext().SourceMgr.hasCodeCompletionBuffer())
1157+
return false;
1158+
11551159
// didSet must have a single parameter.
11561160
if (decl->getParameters()->size() != 1) {
11571161
return false;

test/IDE/complete_in_accessors.swift

Lines changed: 74 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,13 @@
113113
// RUN: %FileCheck %s -check-prefix=WITH_GLOBAL_DECLS < %t.txt
114114
// RUN: %FileCheck %s -check-prefix=ACCESSORS_IN_MEMBER_FUNC_2 < %t.txt
115115

116+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICIT_OLDVALUE_COPIED | %FileCheck %s -check-prefix=IMPLICIT_OLDVALUE_COPIED
117+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICIT_OLDVALUE_MEMBER | %FileCheck %s -check-prefix=IMPLICIT_OLDVALUE_MEMBER
118+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=IMPLICIT_OLDVALUE_COPIEDMEMBER | %FileCheck %s -check-prefix=IMPLICIT_OLDVALUE_COPIEDMEMBER
119+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=EXPLICIT_OLDVALUE_COPIED | %FileCheck %s -check-prefix=EXPLICIT_OLDVALUE_COPIED
120+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=EXPLICIT_OLDVALUE_MEMBER | %FileCheck %s -check-prefix=EXPLICIT_OLDVALUE_MEMBER
121+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=EXPLICIT_OLDVALUE_COPIEDMEMBER | %FileCheck %s -check-prefix=EXPLICIT_OLDVALUE_COPIEDMEMBER
122+
116123
//===--- Helper types that are used in this test
117124

118125
struct FooStruct {
@@ -247,18 +254,18 @@ willSet {
247254
}
248255

249256
var globalAccessorDidSet1: Int {
250-
didSet(oldValue) {
257+
didSet {
251258
#^GLOBAL_ACCESSOR_DIDSET_1^#
252259
}
253260
}
254261
var globalAccessorDidSet2: Int {
255-
didSet(oldValue) {
262+
didSet {
256263
var fs = FooStruct()
257264
fs.#^GLOBAL_ACCESSOR_DIDSET_2^#
258265
}
259266
}
260267
var globalAccessorDidSet3 = 42 {
261-
didSet(oldValue) {
268+
didSet {
262269
#^GLOBAL_ACCESSOR_DIDSET_3^#
263270
}
264271
}
@@ -337,18 +344,18 @@ struct MemberAccessors {
337344
}
338345

339346
var memberAccessorDidSet1: Int {
340-
didSet(oldValue) {
347+
didSet {
341348
#^MEMBER_ACCESSOR_DIDSET_1^#
342349
}
343350
}
344351
var memberAccessorDidSet2: Int {
345-
didSet(oldValue) {
352+
didSet {
346353
var fs = FooStruct()
347354
fs.#^MEMBER_ACCESSOR_DIDSET_2^#
348355
}
349356
}
350357
var memberAccessorDidSet3 = 42 {
351-
didSet(oldValue) {
358+
didSet {
352359
#^MEMBER_ACCESSOR_DIDSET_3^#
353360
}
354361
}
@@ -424,18 +431,18 @@ func accessorsInFunction(_ functionParam: Int) {
424431
}
425432

426433
var memberAccessorDidSet1: Int {
427-
didSet(oldValue) {
434+
didSet {
428435
#^LOCAL_ACCESSOR_DIDSET_1^#
429436
}
430437
}
431438
var memberAccessorDidSet2: Int {
432-
didSet(oldValue) {
439+
didSet {
433440
var fs = FooStruct()
434441
fs.#^LOCAL_ACCESSOR_DIDSET_2^#
435442
}
436443
}
437444
var memberAccessorDidSet3: Int {
438-
didSet(oldValue) {
445+
didSet {
439446
#^LOCAL_ACCESSOR_DIDSET_3^#
440447
}
441448
}
@@ -481,3 +488,61 @@ struct AccessorsInMemberFunction {
481488
}
482489
}
483490
}
491+
492+
var testImplicitOldValue1: Int = 0 {
493+
didSet {
494+
var oldV = oldValue
495+
#^IMPLICIT_OLDVALUE_COPIED^#
496+
// IMPLICIT_OLDVALUE_COPIED: Begin completions
497+
// IMPLICIT_OLDVALUE_COPIED-DAG: Decl[LocalVar]/Local: oldV[#Int#];
498+
// IMPLICIT_OLDVALUE_COPIED-DAG: Decl[LocalVar]/Local: oldValue[#Int#];
499+
// IMPLICIT_OLDVALUE_COPIED: End completions
500+
}
501+
}
502+
var testImplicitOldValue2: Int = 0 {
503+
didSet {
504+
oldValue.#^IMPLICIT_OLDVALUE_MEMBER^#
505+
// IMPLICIT_OLDVALUE_MEMBER: Begin completions
506+
// IMPLICIT_OLDVALUE_MEMBER-DAG: Keyword[self]/CurrNominal: self[#Int#];
507+
// IMPLICIT_OLDVALUE_MEMBER: End completions
508+
}
509+
}
510+
var testImplicitOldValue3: Int = 0 {
511+
didSet {
512+
var oldV = oldValue
513+
oldV.#^IMPLICIT_OLDVALUE_COPIEDMEMBER^#
514+
// IMPLICIT_OLDVALUE_COPIEDMEMBER: Begin completions
515+
// IMPLICIT_OLDVALUE_COPIEDMEMBER-DAG: Keyword[self]/CurrNominal: self[#Int#];
516+
// IMPLICIT_OLDVALUE_COPIEDMEMBER: End completions
517+
}
518+
}
519+
520+
var testExplicitOldValue1: Int = 0 {
521+
didSet(oldVal) {
522+
var oldV = oldVal
523+
#^EXPLICIT_OLDVALUE_COPIED^#
524+
// EXPLICIT_OLDVALUE_COPIED: Begin completions
525+
// EXPLICIT_OLDVALUE_COPIED-NOT: oldValue
526+
// EXPLICIT_OLDVALUE_COPIED-DAG: Decl[LocalVar]/Local: oldV[#Int#];
527+
// EXPLICIT_OLDVALUE_COPIED-DAG: Decl[LocalVar]/Local: oldVal[#Int#];
528+
// EXPLICIT_OLDVALUE_COPIED-NOT: oldValue
529+
// EXPLICIT_OLDVALUE_COPIED: End completions
530+
}
531+
}
532+
var testExplicitOldValue2: Int = 0 {
533+
didSet(oldVal) {
534+
oldVal.#^EXPLICIT_OLDVALUE_MEMBER^#
535+
// EXPLICIT_OLDVALUE_MEMBER: Begin completions
536+
// EXPLICIT_OLDVALUE_MEMBER-DAG: Keyword[self]/CurrNominal: self[#Int#];
537+
// EXPLICIT_OLDVALUE_MEMBER: End completions
538+
}
539+
}
540+
var testExplicitOldValue3: Int = 0 {
541+
didSet(oldVal) {
542+
var oldV = oldVal
543+
oldV.#^EXPLICIT_OLDVALUE_COPIEDMEMBER^#
544+
// EXPLICIT_OLDVALUE_COPIEDMEMBER: Begin completions
545+
// EXPLICIT_OLDVALUE_COPIEDMEMBER-DAG: Keyword[self]/CurrNominal: self[#Int#];
546+
// EXPLICIT_OLDVALUE_COPIEDMEMBER: End completions
547+
}
548+
}

0 commit comments

Comments
 (0)