Skip to content

Commit e7e4c37

Browse files
Implement TupleInitializationStatement - fixes #225
1 parent cb93f89 commit e7e4c37

3 files changed

Lines changed: 43 additions & 2 deletions

File tree

ICSharpCode.CodeConverter/CSharp/NodesVisitor.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1153,13 +1153,13 @@ private IEnumerable<ArgumentSyntax> ConvertArguments(VBSyntax.ArgumentListSyntax
11531153

11541154
public override CSharpSyntaxNode VisitSimpleArgument(VBSyntax.SimpleArgumentSyntax node)
11551155
{
1156-
int argId = ((VBSyntax.ArgumentListSyntax)node.Parent).Arguments.IndexOf(node);
11571156
var invocation = node.Parent.Parent;
11581157
if (invocation is VBSyntax.ArrayCreationExpressionSyntax)
11591158
return node.Expression.Accept(TriviaConvertingVisitor);
11601159
var symbol = GetInvocationSymbol(invocation);
11611160
SyntaxToken token = default(SyntaxToken);
11621161
if (symbol != null) {
1162+
int argId = ((VBSyntax.ArgumentListSyntax)node.Parent).Arguments.IndexOf(node);
11631163
var parameterKinds = symbol.GetParameters().Select(param => param.RefKind).ToList();
11641164
//WARNING: If named parameters can reach here it won't work properly for them
11651165
var refKind = argId >= parameterKinds.Count ? RefKind.None : parameterKinds[argId];
@@ -1500,6 +1500,31 @@ private static CSharpSyntaxNode CreateLambdaExpression(ParameterListSyntax param
15001500

15011501
#region Type Name / Modifier
15021502

1503+
public override CSharpSyntaxNode VisitTupleType(VBSyntax.TupleTypeSyntax node)
1504+
{
1505+
var elements = node.Elements.Select(e => (TupleElementSyntax)e.Accept(TriviaConvertingVisitor));
1506+
return SyntaxFactory.TupleType(SyntaxFactory.SeparatedList(elements));
1507+
}
1508+
1509+
public override CSharpSyntaxNode VisitTypedTupleElement(VBSyntax.TypedTupleElementSyntax node)
1510+
{
1511+
return SyntaxFactory.TupleElement((TypeSyntax) node.Type.Accept(TriviaConvertingVisitor));
1512+
}
1513+
1514+
public override CSharpSyntaxNode VisitNamedTupleElement(VBSyntax.NamedTupleElementSyntax node)
1515+
{
1516+
return SyntaxFactory.TupleElement((TypeSyntax)node.AsClause.Type.Accept(TriviaConvertingVisitor), CommonConversions.ConvertIdentifier(node.Identifier));
1517+
}
1518+
1519+
public override CSharpSyntaxNode VisitTupleExpression(VBSyntax.TupleExpressionSyntax node)
1520+
{
1521+
var args = node.Arguments.Select(a => {
1522+
var expr = (ExpressionSyntax)a.Expression.Accept(TriviaConvertingVisitor);
1523+
return SyntaxFactory.Argument(expr);
1524+
});
1525+
return SyntaxFactory.TupleExpression(SyntaxFactory.SeparatedList(args));
1526+
}
1527+
15031528
public override CSharpSyntaxNode VisitPredefinedType(VBSyntax.PredefinedTypeSyntax node)
15041529
{
15051530
if (SyntaxTokenExtensions.IsKind(node.Keyword, VBasic.SyntaxKind.DateKeyword)) {

Tests/CSharp/ExpressionTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -985,7 +985,7 @@ public void StringInterpolationWithConditionalOperator()
985985
}
986986

987987
[Fact]
988-
public void LogicalOrWithConditionalOperator()
988+
public void Tuple()
989989
{
990990
TestConversionVisualBasicToCSharpWithoutComments(
991991
@"Public Function GetString(yourBoolean as Boolean) As Boolean

Tests/CSharp/StatementTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,22 @@ private void TestMethod()
107107
}");
108108
}
109109

110+
[Fact]
111+
public void TupleInitializationStatement()
112+
{
113+
TestConversionVisualBasicToCSharp(@"Class TestClass
114+
Private Sub TestMethod()
115+
Dim totales As (fics As Integer, dirs As Integer) = (0, 0)
116+
End Sub
117+
End Class", @"class TestClass
118+
{
119+
private void TestMethod()
120+
{
121+
(int fics, int dirs) totales = (0, 0);
122+
}
123+
}");
124+
}
125+
110126
[Fact]
111127
public void ObjectInitializationStatementInDeclaration()
112128
{

0 commit comments

Comments
 (0)