Skip to content

Commit e40fc77

Browse files
authored
Merge pull request #41667 from ahoppen/pr/complete-expr-after-if
[CodeCompletion] Complete code completion tokens after if-statement as top-level
2 parents 8c27759 + 82cb46c commit e40fc77

File tree

4 files changed

+9
-15
lines changed

4 files changed

+9
-15
lines changed

include/swift/Parse/CodeCompletionCallbacks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ class CodeCompletionCallbacks {
225225

226226
virtual void completePlatformCondition() {};
227227

228-
virtual void completeAfterIfStmt(bool hasElse) {};
228+
virtual void completeAfterIfStmtElse() {};
229229

230230
virtual void completeGenericRequirement() {};
231231

lib/IDE/CodeCompletion.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ class CodeCompletionCallbacksImpl : public CodeCompletionCallbacks {
267267
void completeAfterPoundDirective() override;
268268
void completePlatformCondition() override;
269269
void completeGenericRequirement() override;
270-
void completeAfterIfStmt(bool hasElse) override;
270+
void completeAfterIfStmtElse() override;
271271
void completeStmtLabel(StmtKind ParentKind) override;
272272
void completeForEachPatternBeginning(bool hasTry, bool hasAwait) override;
273273
void completeTypeAttrBeginning() override;
@@ -578,13 +578,9 @@ void CodeCompletionCallbacksImpl::completePlatformCondition() {
578578
Kind = CompletionKind::PlatformConditon;
579579
}
580580

581-
void CodeCompletionCallbacksImpl::completeAfterIfStmt(bool hasElse) {
581+
void CodeCompletionCallbacksImpl::completeAfterIfStmtElse() {
582582
CurDeclContext = P.CurDeclContext;
583-
if (hasElse) {
584-
Kind = CompletionKind::AfterIfStmtElse;
585-
} else {
586-
Kind = CompletionKind::StmtOrExpr;
587-
}
583+
Kind = CompletionKind::AfterIfStmtElse;
588584
}
589585

590586
void CodeCompletionCallbacksImpl::completeGenericRequirement() {

lib/Parse/ParseStmt.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1807,18 +1807,13 @@ ParserResult<Stmt> Parser::parseStmtIf(LabeledStmtInfo LabelInfo,
18071807
ElseBody = parseStmtIf(LabeledStmtInfo(), implicitlyInsertIf);
18081808
} else if (Tok.is(tok::code_complete)) {
18091809
if (CodeCompletion)
1810-
CodeCompletion->completeAfterIfStmt(/*hasElse*/true);
1810+
CodeCompletion->completeAfterIfStmtElse();
18111811
Status.setHasCodeCompletionAndIsError();
18121812
consumeToken(tok::code_complete);
18131813
} else {
18141814
ElseBody = parseBraceItemList(diag::expected_lbrace_or_if_after_else);
18151815
}
18161816
Status |= ElseBody;
1817-
} else if (Tok.is(tok::code_complete)) {
1818-
if (CodeCompletion)
1819-
CodeCompletion->completeAfterIfStmt(/*hasElse*/false);
1820-
Status.setHasCodeCompletionAndIsError();
1821-
consumeToken(tok::code_complete);
18221817
}
18231818

18241819
return makeParserResult(

test/IDE/complete_keywords.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,10 @@ for _ in 1...10 {
308308
#^TOP_LEVEL_2?check=KW_DECL_STMT;check=KW_NO_RETURN^#
309309
}
310310

311-
if true {} #^TOP_LEVEL_AFTER_IF_1?check=KW_DECL_STMT;check=KW_NO_RETURN^#
311+
if true {} #^TOP_LEVEL_AFTER_IF_1?check=KW_DECL_STMT_TOPLEVEL;check=KW_NO_RETURN^#
312+
if true {}
313+
#^TOP_LEVEL_AFTER_IF_2?check=KW_DECL_STMT_TOPLEVEL;check=KW_NO_RETURN^#
314+
312315

313316
if true {} else #^TOP_LEVEL_AFTER_IF_ELSE_1?check=AFTER_IF_ELSE^# {}
314317

0 commit comments

Comments
 (0)