Skip to content

Commit a66dc2c

Browse files
authored
Add missing space after literal token during normalization (#70202)
Fixes: #70135
1 parent 49e5f55 commit a66dc2c

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/Compilers/CSharp/Portable/Syntax/SyntaxNormalizer.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,7 @@ private static bool NeedsSeparator(SyntaxToken token, SyntaxToken next)
904904
}
905905
}
906906

907-
if (IsWord(token.Kind()) && IsWord(next.Kind()))
907+
if (IsWordOrLiteral(token.Kind()) && IsWordOrLiteral(next.Kind()))
908908
{
909909
return true;
910910
}
@@ -1259,6 +1259,14 @@ private static bool IsWord(SyntaxKind kind)
12591259
return kind == SyntaxKind.IdentifierToken || IsKeyword(kind);
12601260
}
12611261

1262+
private static bool IsWordOrLiteral(SyntaxKind kind)
1263+
{
1264+
return SyntaxFacts.IsLiteral(kind)
1265+
|| IsKeyword(kind)
1266+
|| kind == SyntaxKind.InterpolatedStringEndToken
1267+
|| kind == SyntaxKind.InterpolatedRawStringEndToken;
1268+
}
1269+
12621270
private static bool IsKeyword(SyntaxKind kind)
12631271
{
12641272
return SyntaxFacts.IsKeywordKind(kind) || SyntaxFacts.IsPreprocessorKeyword(kind);

src/Compilers/CSharp/Test/Syntax/Syntax/SyntaxNormalizerTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5958,5 +5958,28 @@ class C
59585958
}
59595959
""");
59605960
}
5961+
5962+
[Theory, WorkItem("https://github.com/dotnet/roslyn/issues/70135")]
5963+
[InlineData("if (\"\" is var I)")]
5964+
[InlineData("if ('' is var I)")]
5965+
[InlineData("if ('x' is var I)")]
5966+
public void TestNormalizeParseStatementLiteralCharacter(string expression)
5967+
{
5968+
var syntaxNode = SyntaxFactory.ParseStatement(expression).NormalizeWhitespace();
5969+
Assert.Equal(expression, syntaxNode.ToFullString());
5970+
}
5971+
5972+
[Theory, WorkItem("https://github.com/dotnet/roslyn/issues/70135")]
5973+
[InlineData("1 is var i")]
5974+
[InlineData("@\"\" is var s")]
5975+
[InlineData("\"\"\"a\"\"\" is var s")]
5976+
[InlineData("$@\"\" is var s")]
5977+
[InlineData("$\"\"\"a\"\"\" is var s")]
5978+
[InlineData("\"\"u8 is var s")]
5979+
public void TestNormalizeParseExpressionLiteralCharacter(string expression)
5980+
{
5981+
var syntaxNode = SyntaxFactory.ParseExpression(expression).NormalizeWhitespace();
5982+
Assert.Equal(expression, syntaxNode.ToFullString());
5983+
}
59615984
}
59625985
}

0 commit comments

Comments
 (0)