Skip to content

Commit 1155ade

Browse files
authored
[Parse] Remove special handling for .<keyword><code-complete> (#18869)
At the time this logic was introduced in 8f83ca6, `<expr>.<keyword>` wasn't allowed. Now that SE-0071 has been implemented, this logic doesn't provide any positive effects.
1 parent 509b672 commit 1155ade

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

lib/Parse/ParseExpr.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,17 +1154,6 @@ Parser::parseExprPostfixSuffix(ParserResult<Expr> Result, bool isExprBasic,
11541154
// fallthrough to an UnresolvedDotExpr.
11551155
}
11561156

1157-
// If we have '.<keyword><code_complete>', try to recover by creating
1158-
// an identifier with the same spelling as the keyword.
1159-
if (Tok.isKeyword() && peekToken().is(tok::code_complete)) {
1160-
Identifier Name = Context.getIdentifier(Tok.getText());
1161-
Result = makeParserResult(new (Context) UnresolvedDotExpr(
1162-
Result.get(), TokLoc, Name, DeclNameLoc(Tok.getLoc()),
1163-
/*Implicit=*/false));
1164-
consumeToken();
1165-
// Fall into the next code completion handler.
1166-
}
1167-
11681157
// Handle "x.<tab>" for code completion.
11691158
if (Tok.is(tok::code_complete)) {
11701159
if (CodeCompletion && Result.isNonNull()) {

test/IDE/complete_value_expr.swift

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,10 @@
182182
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DOT_EXPR_NON_NOMINAL_1 | %FileCheck %s -check-prefix=DOT_EXPR_NON_NOMINAL_1
183183
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=DOT_EXPR_NON_NOMINAL_2 | %FileCheck %s -check-prefix=DOT_EXPR_NON_NOMINAL_2
184184

185+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=KEYWORD_1 | %FileCheck %s -check-prefix=KEYWORD_1
186+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=KEYWORD_2 | %FileCheck %s -check-prefix=KEYWORD_2
187+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=KEYWORD_3 | %FileCheck %s -check-prefix=KEYWORD_3
188+
185189
// Test code completion of expressions that produce a value.
186190

187191
struct FooStruct {
@@ -1993,3 +1997,31 @@ class TestDotExprWithNonNominal {
19931997
// DOT_EXPR_NON_NOMINAL_2-NOT: firstName
19941998
}
19951999
}
2000+
2001+
class Cat {
2002+
struct Inner {
2003+
var prop1: String
2004+
var prop2: String
2005+
}
2006+
var `class`: Inner
2007+
}
2008+
func testKeyword(cat: Cat) {
2009+
let _ = cat.#^KEYWORD_1^#
2010+
// KEYWORD_1: Begin completions
2011+
// KEYWORD_1-DAG: Keyword[self]/CurrNominal: self[#Cat#]; name=self
2012+
// KEYWORD_1-DAG: Decl[InstanceVar]/CurrNominal: class[#Cat.Inner#]; name=class
2013+
// KEYWORD_1: End completions
2014+
2015+
let _ = cat.class#^KEYWORD_2^#
2016+
// KEYWORD_2: Begin completions
2017+
// KEYWORD_2-DAG: Decl[InstanceVar]/CurrNominal: .prop1[#String#]; name=prop1
2018+
// KEYWORD_2-DAG: Decl[InstanceVar]/CurrNominal: .prop2[#String#]; name=prop2
2019+
// KEYWORD_2-DAG: BuiltinOperator/None: = {#Cat.Inner#}[#Void#]; name== Cat.Inner
2020+
// KEYWORD_2: End completions
2021+
2022+
let _ = cat.class.#^KEYWORD_3^#
2023+
// KEYWORD_3: Begin completions
2024+
// KEYWORD_3-DAG: Decl[InstanceVar]/CurrNominal: prop1[#String#]; name=prop1
2025+
// KEYWORD_3-DAG: Decl[InstanceVar]/CurrNominal: prop2[#String#]; name=prop2
2026+
// KEYWORD_3: End completions
2027+
}

0 commit comments

Comments
 (0)