Skip to content

Commit fe74c86

Browse files
committed
[CodeComplete] Offer completion suggestions for default argument values inside the macro declaration
We were not type checking the default argument initializer because `MacroDecl` is not an `AbstractFucntionDecl`. Add `MacroDecl` to the list of nodes we know how to get parameters from. rdar://108163564
1 parent 053d215 commit fe74c86

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

lib/Sema/TypeCheckStmt.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2366,13 +2366,15 @@ bool TypeCheckASTNodeAtLocRequest::evaluate(
23662366
}
23672367
}
23682368
} else if (auto *defaultArg = dyn_cast<DefaultArgumentInitializer>(DC)) {
2369+
ParamDecl *Param = nullptr;
23692370
if (auto *AFD = dyn_cast<AbstractFunctionDecl>(defaultArg->getParent())) {
2370-
auto *Param = AFD->getParameters()->get(defaultArg->getIndex());
2371-
(void)Param->getTypeCheckedDefaultExpr();
2372-
return false;
2371+
Param = AFD->getParameters()->get(defaultArg->getIndex());
2372+
} else if (auto *MD = dyn_cast<MacroDecl>(defaultArg->getParent())) {
2373+
Param = MD->getParameterList()->get(defaultArg->getIndex());
2374+
} else if (auto *SD = dyn_cast<SubscriptDecl>(defaultArg->getParent())) {
2375+
Param = SD->getIndices()->get(defaultArg->getIndex());
23732376
}
2374-
if (auto *SD = dyn_cast<SubscriptDecl>(defaultArg->getParent())) {
2375-
auto *Param = SD->getIndices()->get(defaultArg->getIndex());
2377+
if (Param) {
23762378
(void)Param->getTypeCheckedDefaultExpr();
23772379
return false;
23782380
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-swift-ide-test -batch-code-completion -source-filename %s -filecheck %raw-FileCheck -completion-output-dir %t
3+
4+
let globalVar = 1
5+
macro expect(file: Int = #^DEFAULT_ARG^#) = #externalMacro(module: "MyModule", type: "MyMacro")
6+
7+
// DEFAULT_ARG: Decl[GlobalVar]/CurrModule/TypeRelation[Convertible]: globalVar[#Int#]; name=globalVar

0 commit comments

Comments
 (0)