Skip to content

Commit 0555d30

Browse files
authored
Merge pull request #26546 from rintaro/ide-completion-rdar53034550
[AST] Be lenient with PatternBindingIntializer without PatBindingDecl
2 parents 7db162e + 428bbe1 commit 0555d30

File tree

3 files changed

+13
-6
lines changed

3 files changed

+13
-6
lines changed

lib/AST/Decl.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,9 +1366,11 @@ ParamDecl *PatternBindingInitializer::getImplicitSelfDecl() {
13661366
}
13671367

13681368
VarDecl *PatternBindingInitializer::getInitializedLazyVar() const {
1369-
if (auto var = getBinding()->getSingleVar()) {
1370-
if (var->getAttrs().hasAttribute<LazyAttr>())
1371-
return var;
1369+
if (auto binding = getBinding()) {
1370+
if (auto var = binding->getSingleVar()) {
1371+
if (var->getAttrs().hasAttribute<LazyAttr>())
1372+
return var;
1373+
}
13721374
}
13731375
return nullptr;
13741376
}

lib/AST/UnqualifiedLookup.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -598,18 +598,17 @@ void UnqualifiedLookupFactory::lookupInModuleScopeContext(
598598

599599
void UnqualifiedLookupFactory::lookupNamesIntroducedByPatternBindingInitializer(
600600
PatternBindingInitializer *PBI, Optional<bool> isCascadingUse) {
601-
assert(PBI->getBinding());
602601
// Lazy variable initializer contexts have a 'self' parameter for
603602
// instance member lookup.
604603
if (auto *selfParam = PBI->getImplicitSelfDecl())
605604
lookupNamesIntroducedByLazyVariableInitializer(PBI, selfParam,
606605
isCascadingUse);
607-
else if (PBI->getBinding()->getDeclContext()->isTypeContext())
606+
else if (PBI->getParent()->isTypeContext())
608607
lookupNamesIntroducedByInitializerOfStoredPropertyOfAType(PBI,
609608
isCascadingUse);
610609
else
611610
lookupNamesIntroducedByInitializerOfGlobalOrLocal(PBI, isCascadingUse);
612-
}
611+
}
613612

614613
void UnqualifiedLookupFactory::lookupNamesIntroducedByLazyVariableInitializer(
615614
PatternBindingInitializer *PBI, ParamDecl *selfParam,

test/IDE/complete_property_delegate_attribute.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=AFTER_PAREN | %FileCheck %s -check-prefix=AFTER_PAREN
22
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ARG_MyEnum_NODOT | %FileCheck %s -check-prefix=ARG_MyEnum_NODOT
33
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ARG_MyEnum_DOT | %FileCheck %s -check-prefix=ARG_MyEnum_DOT
4+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ARG_MyEnum_NOBINDING | %FileCheck %s -check-prefix=ARG_MyEnum_NOBINDING
45

56
enum MyEnum {
67
case east, west
@@ -38,4 +39,9 @@ struct TestStruct {
3839
// ARG_MyEnum_DOT-DAG: Decl[EnumElement]/ExprSpecific: west[#MyEnum#]; name=west
3940
// ARG_MyEnum_DOT: End completions
4041

42+
@MyStruct(arg1: MyEnum.#^ARG_MyEnum_NOBINDING^#)
43+
// ARG_MyEnum_NOBINDING: Begin completions
44+
// ARG_MyEnum_NOBINDING-DAG: Decl[EnumElement]/CurrNominal: east[#MyEnum#];
45+
// ARG_MyEnum_NOBINDING-DAG: Decl[EnumElement]/CurrNominal: west[#MyEnum#];
46+
// ARG_MyEnum_NOBINDING: End completions
4147
}

0 commit comments

Comments
 (0)