Skip to content

Commit fb87306

Browse files
authored
Merge pull request swiftlang#38561 from ahoppen/pr/generic-args-on-nested-type
[CodeCompletion] Fix crasher and missing completion for generic arguments to nested type
2 parents 8345174 + 27bec7a commit fb87306

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

lib/Parse/ParseExpr.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,13 +1211,17 @@ Parser::parseExprPostfixSuffix(ParserResult<Expr> Result, bool isExprBasic,
12111211
SmallVector<TypeRepr *, 8> args;
12121212
SourceLoc LAngleLoc, RAngleLoc;
12131213
auto argStat = parseGenericArguments(args, LAngleLoc, RAngleLoc);
1214+
Result = makeParserResult(Result | argStat, Result.getPtrOrNull());
12141215
if (argStat.isErrorOrHasCompletion())
12151216
diagnose(LAngleLoc, diag::while_parsing_as_left_angle_bracket);
12161217

12171218
SyntaxContext->createNodeInPlace(SyntaxKind::SpecializeExpr);
1218-
Result = makeParserResult(
1219-
Result, UnresolvedSpecializeExpr::create(
1220-
Context, Result.get(), LAngleLoc, args, RAngleLoc));
1219+
// The result can be empty in error cases.
1220+
if (!args.empty()) {
1221+
Result = makeParserResult(
1222+
Result, UnresolvedSpecializeExpr::create(
1223+
Context, Result.get(), LAngleLoc, args, RAngleLoc));
1224+
}
12211225
}
12221226

12231227
continue;

test/IDE/complete_generic_param.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INHERIT6 | %FileCheck %s -check-prefix=INHERIT
77
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GENERIC_TYPE_PARAM
88
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SECOND_GENERIC_TYPE_PARAM | %FileCheck %s -check-prefix=GENERIC_TYPE_PARAM
9+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GENERIC_PARAM_ON_NESTED_TYPE_GLOBAL_VAR | %FileCheck %s -check-prefix=GENERIC_PARAM_ON_NESTED_TYPE
10+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GENERIC_PARAM_ON_NESTED_TYPE_LOCAL_VAR | %FileCheck %s -check-prefix=GENERIC_PARAM_ON_NESTED_TYPE
911

1012
class C1{}
1113
protocol P1{}
@@ -45,3 +47,19 @@ _ = Sr14432<SomeType, #^SECOND_GENERIC_TYPE_PARAM^# >()
4547
// GENERIC_TYPE_PARAM: Begin completions
4648
// GENERIC_TYPE_PARAM-DAG: Decl[Class]/CurrModule: C1[#C1#];
4749
// GENERIC_TYPE_PARAM: End completions
50+
51+
struct Sr14627 {
52+
struct Nested<Elements> {
53+
init() { fatalError() }
54+
}
55+
}
56+
57+
var sr14627_globalVar = Sr14627.Nested< #^GENERIC_PARAM_ON_NESTED_TYPE_GLOBAL_VAR^#>()
58+
59+
func someFunction() {
60+
var sr14627_localVar = Sr14627.Nested< #^GENERIC_PARAM_ON_NESTED_TYPE_LOCAL_VAR^#>()
61+
}
62+
63+
// GENERIC_PARAM_ON_NESTED_TYPE: Begin completions
64+
// GENERIC_PARAM_ON_NESTED_TYPE-DAG: Decl[Struct]/CurrModule: Sr14627[#Sr14627#];
65+
// GENERIC_PARAM_ON_NESTED_TYPE: End completions

0 commit comments

Comments
 (0)