Skip to content

Commit

Permalink
Merge pull request #52364 from Youssef1313/complete-statement-typeof
Browse files Browse the repository at this point in the history
Handle typeof expression in complete statement
  • Loading branch information
sharwell authored Apr 2, 2021
2 parents d8dd359 + f89b038 commit 53d999c
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,9 @@ private static bool MoveCaretToSemicolonPosition(
SyntaxKind.ParameterList,
SyntaxKind.DefaultExpression,
SyntaxKind.CheckedExpression,
SyntaxKind.UncheckedExpression))
SyntaxKind.UncheckedExpression,
SyntaxKind.TypeOfExpression,
SyntaxKind.TupleExpression))
{
// make sure the closing delimiter exists
if (RequiredDelimiterIsMissing(currentNode))
Expand Down Expand Up @@ -526,6 +528,14 @@ private static (SyntaxToken openingDelimeter, SyntaxToken closingDelimiter) GetD
var checkedExpressionSyntax = (CheckedExpressionSyntax)currentNode;
return (checkedExpressionSyntax.OpenParenToken, checkedExpressionSyntax.CloseParenToken);

case SyntaxKind.TypeOfExpression:
var typeOfExpressionSyntax = (TypeOfExpressionSyntax)currentNode;
return (typeOfExpressionSyntax.OpenParenToken, typeOfExpressionSyntax.CloseParenToken);

case SyntaxKind.TupleExpression:
var tupleExpressionSyntax = (TupleExpressionSyntax)currentNode;
return (tupleExpressionSyntax.OpenParenToken, tupleExpressionSyntax.CloseParenToken);

default:
// Type of node does not have delimiters used by this feature
return default;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2400,6 +2400,58 @@ void M()
VerifyTypingSemicolon(code, expected);
}

[WpfTheory, Trait(Traits.Feature, Traits.Features.CompleteStatement)]
[WorkItem(52137, "https://github.com/dotnet/roslyn/issues/52137")]
[InlineData("typeof(object$$)", "typeof(object)")]
[InlineData("typeof($$object)", "typeof(object)")]
public void TypeOfExpression_Handled(string expression, string expectedExpression)
{
var code = $@"
public class Class1
{{
void M()
{{
var x = {expression}
}}
}}";

var expected = $@"
public class Class1
{{
void M()
{{
var x = {expectedExpression};$$
}}
}}";

VerifyTypingSemicolon(code, expected);
}

[WpfFact, Trait(Traits.Feature, Traits.Features.CompleteStatement)]
[WorkItem(52365, "https://github.com/dotnet/roslyn/issues/52365")]
public void TupleExpression_Handled()
{
var code = @"
public class Class1
{
void M()
{
var x = (0, 0$$)
}
}";

var expected = @"
public class Class1
{
void M()
{
var x = (0, 0);$$
}
}";

VerifyTypingSemicolon(code, expected);
}

[WpfTheory, Trait(Traits.Feature, Traits.Features.CompleteStatement)]
[InlineData("default$$(object)")]
[InlineData("def$$ault(object)")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,17 @@ public static bool IsKind([NotNullWhen(returnValue: true)] this SyntaxNode? node
return csharpKind == kind1 || csharpKind == kind2 || csharpKind == kind3 || csharpKind == kind4 || csharpKind == kind5 || csharpKind == kind6 || csharpKind == kind7 || csharpKind == kind8;
}

public static bool IsKind([NotNullWhen(returnValue: true)] this SyntaxNode? node, SyntaxKind kind1, SyntaxKind kind2, SyntaxKind kind3, SyntaxKind kind4, SyntaxKind kind5, SyntaxKind kind6, SyntaxKind kind7, SyntaxKind kind8, SyntaxKind kind9, SyntaxKind kind10)
{
if (node == null)
{
return false;
}

var csharpKind = node.Kind();
return csharpKind == kind1 || csharpKind == kind2 || csharpKind == kind3 || csharpKind == kind4 || csharpKind == kind5 || csharpKind == kind6 || csharpKind == kind7 || csharpKind == kind8 || csharpKind == kind9 || csharpKind == kind10;
}

public static bool IsKind([NotNullWhen(returnValue: true)] this SyntaxNode? node, SyntaxKind kind1, SyntaxKind kind2, SyntaxKind kind3, SyntaxKind kind4, SyntaxKind kind5, SyntaxKind kind6, SyntaxKind kind7, SyntaxKind kind8, SyntaxKind kind9, SyntaxKind kind10, SyntaxKind kind11)
{
if (node == null)
Expand Down

0 comments on commit 53d999c

Please sign in to comment.