Skip to content

Commit 04f6f84

Browse files
authored
Merge pull request #67704 from hamishknight/not-legally-binding
2 parents f39d62f + a5d9b13 commit 04f6f84

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,13 +1016,19 @@ void CodeCompletionCallbacksImpl::addKeywords(CodeCompletionResultSink &Sink,
10161016
addStmtKeywords(Sink, CurDeclContext, MaybeFuncBody);
10171017
addClosureSignatureKeywordsIfApplicable(Sink, CurDeclContext);
10181018

1019+
LLVM_FALLTHROUGH;
1020+
case CompletionKind::PostfixExprBeginning:
1021+
// We need to add 'let' and 'var' keywords in expression position here as
1022+
// we initially parse patterns as expressions.
1023+
// FIXME: We ought to be able to determine if we're in a pattern context and
1024+
// only enable 'let' and 'var' in that case.
1025+
addLetVarKeywords(Sink);
1026+
10191027
LLVM_FALLTHROUGH;
10201028
case CompletionKind::ReturnStmtExpr:
10211029
case CompletionKind::YieldStmtExpr:
1022-
case CompletionKind::PostfixExprBeginning:
10231030
case CompletionKind::ForEachSequence:
10241031
addSuperKeyword(Sink, CurDeclContext);
1025-
addLetVarKeywords(Sink);
10261032
addExprKeywords(Sink, CurDeclContext);
10271033
addAnyTypeKeyword(Sink, CurDeclContext->getASTContext().TheAnyType);
10281034
break;

test/IDE/complete_keywords.swift

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,11 @@
256256
//
257257
// let and var
258258
//
259-
// KW_EXPR-DAG: Keyword[let]/None: let{{; name=.+$}}
260-
// KW_EXPR-DAG: Keyword[var]/None: var{{; name=.+$}}
259+
// KW_LETVAR-DAG: Keyword[let]/None: let{{; name=.+$}}
260+
// KW_LETVAR-DAG: Keyword[var]/None: var{{; name=.+$}}
261+
//
262+
// KW_LETVAR_NEG-NOT: Keyword[let]/None: let{{; name=.+$}}
263+
// KW_LETVAR_NEG-NOT: Keyword[var]/None: var{{; name=.+$}}
261264
//
262265
// Literals
263266
//
@@ -423,24 +426,29 @@ extension SubClass {
423426
}
424427

425428
func inExpr1() {
426-
(#^EXPR_1?check=KW_EXPR;check=KW_EXPR_NEG^#)
429+
(#^EXPR_1?check=KW_EXPR;check=KW_LETVAR;check=KW_EXPR_NEG^#)
427430
}
428431
func inExpr2() {
429-
let x = #^EXPR_2?check=KW_EXPR;check=KW_EXPR_NEG^#
432+
let x = #^EXPR_2?check=KW_EXPR;check=KW_LETVAR;check=KW_EXPR_NEG^#
430433
}
431434
func inExpr3() {
432-
if #^EXPR_3?check=KW_EXPR;check=KW_EXPR_NEG^# {}
435+
if #^EXPR_3?check=KW_EXPR;check=KW_LETVAR;check=KW_EXPR_NEG^# {}
433436
}
434437
func inExpr4() {
435438
let x = 1
436-
x + #^EXPR_4?check=KW_EXPR;check=KW_EXPR_NEG^#
439+
x + #^EXPR_4?check=KW_EXPR;check=KW_LETVAR;check=KW_EXPR_NEG^#
437440
}
438441
func inExpr5() {
439442
var x: Int
440-
x = #^EXPR_5?check=KW_EXPR;check=KW_EXPR_NEG^#
443+
x = #^EXPR_5?check=KW_EXPR;check=KW_LETVAR;check=KW_EXPR_NEG^#
441444
}
442445
func inExpr6() -> Int {
443-
return #^EXPR_6?check=KW_EXPR;check=KW_EXPR_NEG^#
446+
// Make sure we don't recommend 'let' and 'var' here.
447+
return #^EXPR_6?check=KW_EXPR;check=KW_EXPR_NEG;check=KW_LETVAR_NEG^#
448+
}
449+
func inExpr7() {
450+
// Make sure we don't recommend 'let' and 'var' here.
451+
for x in #^EXPR_7?check=KW_EXPR;check=KW_EXPR_NEG;check=KW_LETVAR_NEG^#
444452
}
445453

446454
func inSwitch(val: Int) {

0 commit comments

Comments
 (0)