提交 b42a99dc 编写于 作者: W Wonseok Chae

Merge pull request #4159 from wschae/interpolation

Support EnC for string interpolation

- Fix #2556 and internal bug 1198941
......@@ -78,6 +78,7 @@ private static bool AreTokensEquivalent(GreenNode before, GreenNode after)
case SyntaxKind.NumericLiteralToken:
case SyntaxKind.CharacterLiteralToken:
case SyntaxKind.StringLiteralToken:
case SyntaxKind.InterpolatedStringTextToken:
return ((Green.SyntaxToken)before).Text == ((Green.SyntaxToken)after).Text;
}
......
......@@ -422,5 +422,20 @@ public void TestSkippedTest()
VerifyEquivalent(tree1, tree2, topLevel: true);
}
[Fact]
public void TestUpdateInterpolatedString()
{
var tree1 = SyntaxFactory.ParseSyntaxTree("namespace N { class C { void Foo() { Console.Write($\"Hello{123:N1}\"); } } }");
var tree2 = tree1.WithReplaceFirst("N1", "N2");
VerifyEquivalent(tree1, tree2, topLevel: true);
VerifyNotEquivalent(tree1, tree2, topLevel: false);
tree2 = tree1.WithReplaceFirst("Hello", "World");
VerifyEquivalent(tree1, tree2, topLevel: true);
VerifyNotEquivalent(tree1, tree2, topLevel: false);
}
}
}
......@@ -49,6 +49,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax
SyntaxKind.DecimalLiteralToken,
SyntaxKind.FloatingLiteralToken,
SyntaxKind.IntegerLiteralToken,
SyntaxKind.InterpolatedStringTextToken,
SyntaxKind.StringLiteralToken
Return String.Equals(DirectCast(before, Green.SyntaxToken).Text,
DirectCast(after, Green.SyntaxToken).Text,
......
......@@ -260,6 +260,18 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests
VerifyEquivalent(tree1, tree2, topLevel:=True)
End Sub
<Fact>
Public Sub TestUpdateInterpolatedString()
Dim tree1 = VisualBasicSyntaxTree.ParseText(NewLines("namespace N \n class C \n sub Foo() \n Console.Write($""Hello{123:N1}"") \n end sub \n end class \n end namespace"))
Dim tree2 = tree1.WithReplaceFirst("N1", "N2")
VerifyEquivalent(tree1, tree2, topLevel:=True)
VerifyNotEquivalent(tree1, tree2, topLevel:=False)
tree2 = tree1.WithReplaceFirst("Hello", "World")
VerifyEquivalent(tree1, tree2, topLevel:=True)
VerifyNotEquivalent(tree1, tree2, topLevel:=False)
End Sub
#Region "Field"
<Fact>
......
......@@ -903,6 +903,62 @@ public void MatchExceptionHandlers()
expected.AssertEqual(actual);
}
[Fact]
public void StringLiteral_update()
{
var src1 = @"
var x = ""Hello1"";
";
var src2 = @"
var x = ""Hello2"";
";
var edits = GetMethodEdits(src1, src2);
edits.VerifyEdits("Update [x = \"Hello1\"]@8 -> [x = \"Hello2\"]@8");
}
[Fact]
public void InterpolatedStringText_update()
{
var src1 = @"
var x = $""Hello1"";
";
var src2 = @"
var x = $""Hello2"";
";
var edits = GetMethodEdits(src1, src2);
edits.VerifyEdits("Update [x = $\"Hello1\"]@8 -> [x = $\"Hello2\"]@8");
}
[Fact]
public void Interpolation_update()
{
var src1 = @"
var x = $""Hello{123}"";
";
var src2 = @"
var x = $""Hello{124}"";
";
var edits = GetMethodEdits(src1, src2);
edits.VerifyEdits("Update [x = $\"Hello{123}\"]@8 -> [x = $\"Hello{124}\"]@8");
}
[Fact]
public void InterpolationFormatClause_update()
{
var src1 = @"
var x = $""Hello{123:N1}"";
";
var src2 = @"
var x = $""Hello{123:N2}"";
";
var edits = GetMethodEdits(src1, src2);
edits.VerifyEdits("Update [x = $\"Hello{123:N1}\"]@8 -> [x = $\"Hello{123:N2}\"]@8");
}
#endregion
#region Variable Declaration
......
......@@ -1356,6 +1356,43 @@ End Try
expected.AssertEqual(actual)
End Sub
<Fact>
Public Sub StringLiteral_update()
Dim src1 = "Dim a = ""Hello1"""
Dim src2 = "Dim a = ""Hello2"""
Dim edits = GetMethodEdits(src1, src2)
edits.VerifyEdits("Update [a = ""Hello1""]@12 -> [a = ""Hello2""]@12")
End Sub
<Fact>
Public Sub InterpolatedStringText_update()
Dim src1 = "Dim a = $""Hello1"""
Dim src2 = "Dim a = $""Hello2"""
Dim edits = GetMethodEdits(src1, src2)
edits.VerifyEdits("Update [a = $""Hello1""]@12 -> [a = $""Hello2""]@12")
End Sub
<Fact>
Public Sub Interpolation_update()
Dim src1 = "Dim a = $""Hello{123}"""
Dim src2 = "Dim a = $""Hello{124}"""
Dim edits = GetMethodEdits(src1, src2)
edits.VerifyEdits("Update [a = $""Hello{123}""]@12 -> [a = $""Hello{124}""]@12")
End Sub
<Fact>
Public Sub InterpolationFormatClause_update()
Dim src1 = "Dim a = $""Hello{123:N1}"""
Dim src2 = "Dim a = $""Hello{123:N2}"""
Dim edits = GetMethodEdits(src1, src2)
edits.VerifyEdits("Update [a = $""Hello{123:N1}""]@12 -> [a = $""Hello{123:N2}""]@12")
End Sub
#End Region
#Region "Misc"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册