Skip to content

Commit 8ee309e

Browse files
C# -> VB: Convert interpolation format and alignment - fixes #255
1 parent 8b33398 commit 8ee309e

3 files changed

Lines changed: 48 additions & 3 deletions

File tree

ICSharpCode.CodeConverter/CSharp/NodesVisitor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,7 @@ public override CSharpSyntaxNode VisitInterpolationAlignmentClause(VBSyntax.Inte
10521052
public override CSharpSyntaxNode VisitInterpolationFormatClause(VBSyntax.InterpolationFormatClauseSyntax node)
10531053
{
10541054
SyntaxToken formatStringToken = SyntaxFactory.Token(SyntaxTriviaList.Empty, SyntaxKind.InterpolatedStringTextToken, node.FormatStringToken.Text, node.FormatStringToken.ValueText, SyntaxTriviaList.Empty);
1055-
return SyntaxFactory.InterpolationFormatClause(SyntaxFactory.Token(SyntaxKind.ColonToken).WithTriviaFrom(node.ColonToken), formatStringToken);
1055+
return SyntaxFactory.InterpolationFormatClause(SyntaxFactory.Token(SyntaxKind.ColonToken), formatStringToken);
10561056
}
10571057

10581058
public override CSharpSyntaxNode VisitMeExpression(VBSyntax.MeExpressionSyntax node)

ICSharpCode.CodeConverter/VB/NodesVisitor.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -770,12 +770,19 @@ public override VisualBasicSyntaxNode VisitInterpolatedStringText(CSS.Interpolat
770770

771771
public override VisualBasicSyntaxNode VisitInterpolation(CSS.InterpolationSyntax node)
772772
{
773-
return SyntaxFactory.Interpolation((ExpressionSyntax)node.Expression.Accept(TriviaConvertingVisitor));
773+
return SyntaxFactory.Interpolation(SyntaxFactory.Token(SyntaxKind.OpenBraceToken), (ExpressionSyntax) node.Expression.Accept(TriviaConvertingVisitor), (InterpolationAlignmentClauseSyntax) node.AlignmentClause?.Accept(TriviaConvertingVisitor), (InterpolationFormatClauseSyntax) node.FormatClause?.Accept(TriviaConvertingVisitor), SyntaxFactory.Token(SyntaxKind.CloseBraceToken));
774774
}
775775

776776
public override VisualBasicSyntaxNode VisitInterpolationFormatClause(CSS.InterpolationFormatClauseSyntax node)
777777
{
778-
return base.VisitInterpolationFormatClause(node);
778+
SyntaxToken formatStringToken = SyntaxFactory.InterpolatedStringTextToken(SyntaxTriviaList.Empty,
779+
node.FormatStringToken.Text, node.FormatStringToken.ValueText, SyntaxTriviaList.Empty);
780+
return SyntaxFactory.InterpolationFormatClause(SyntaxFactory.Token(SyntaxKind.ColonToken), formatStringToken);
781+
}
782+
783+
public override VisualBasicSyntaxNode VisitInterpolationAlignmentClause(CSS.InterpolationAlignmentClauseSyntax node)
784+
{
785+
return SyntaxFactory.InterpolationAlignmentClause(SyntaxFactory.Token(SyntaxKind.CommaToken), (ExpressionSyntax)node.Value.Accept(TriviaConvertingVisitor));
779786
}
780787

781788
public override VisualBasicSyntaxNode VisitParenthesizedExpression(CSS.ParenthesizedExpressionSyntax node)

Tests/VB/ExpressionTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,44 @@ End Sub
2323
End Class");
2424
}
2525

26+
27+
[Fact]
28+
public void StringInterpolationWithDoubleQuotes()
29+
{
30+
TestConversionCSharpToVisualBasic(
31+
@"using System;
32+
33+
namespace Global.InnerNamespace
34+
{
35+
public class Test
36+
{
37+
public string StringInter(string t, DateTime dt)
38+
{
39+
var a = $""pre{t} t"";
40+
var b = $""pre{t} \"" t"";
41+
var c = $@""pre{t} """"\ t"";
42+
var e = $@""pre{t + ""\""""} """"\ t"";
43+
var f = $""pre{{escapedBraces}}{dt,4:hh}"";
44+
return a + b + c + d + e + f;
45+
}
46+
}
47+
}",
48+
@"Imports System
49+
50+
Namespace [Global].InnerNamespace
51+
Public Class Test
52+
Public Function StringInter(ByVal t As String, ByVal dt As DateTime) As String
53+
Dim a = $""pre{t} t""
54+
Dim b = $""pre{t} """" t""
55+
Dim c = $""pre{t} """"\ t""
56+
Dim e = $""pre{t & """"""""} """"\ t""
57+
Dim f = $""pre{{escapedBraces}}{dt,4:hh}""
58+
Return a & b & c & d & e & f
59+
End Function
60+
End Class
61+
End Namespace");
62+
}
63+
2664
[Fact]
2765
public void ConditionalExpression()
2866
{

0 commit comments

Comments
 (0)