Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Better C# -> VB attribute formatting and slight VB -> C# linq syntax improvement #40

Merged
merged 2 commits into from
Mar 12, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions ICSharpCode.CodeConverter/CSharp/NodesVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1004,8 +1004,10 @@ public override CSharpSyntaxNode VisitQueryExpression(VBSyntax.QueryExpressionSy
var vbFromClause = node.Clauses.OfType<VBSyntax.FromClauseSyntax>().Single();
var fromClauseSyntax = ConvertFromClauseSyntax(vbFromClause);
var vbGroupClause = node.Clauses.OfType<VBSyntax.GroupByClauseSyntax>().SingleOrDefault();
var vbSelectClause = node.Clauses.OfType<VBSyntax.SelectClauseSyntax>().Single();
var selectClauseSyntax = ConvertSelectClauseSyntax(vbSelectClause);
var vbSelectClause = node.Clauses.OfType<VBSyntax.SelectClauseSyntax>().SingleOrDefault();
var selectClauseSyntax = vbSelectClause != null
? ConvertSelectClauseSyntax(vbSelectClause)
: CreateDefaultSelectClause(fromClauseSyntax);
var alreadyConverted = new VBSyntax.QueryClauseSyntax[] { vbFromClause, vbGroupClause, vbSelectClause };
var vbBodyClauses = node.Clauses;
SelectOrGroupClauseSyntax selectOrGroup = null;
Expand Down Expand Up @@ -1041,6 +1043,11 @@ private SelectClauseSyntax ConvertSelectClauseSyntax(VBSyntax.SelectClauseSyntax
);
}

private static SelectClauseSyntax CreateDefaultSelectClause(FromClauseSyntax fromClauseSyntax)
{
return SyntaxFactory.SelectClause(SyntaxFactory.IdentifierName(fromClauseSyntax.Identifier));
}

private QueryClauseSyntax ConvertQueryBodyClause(VBSyntax.QueryClauseSyntax node)
{
return node.TypeSwitch<VBSyntax.QueryClauseSyntax, VBSyntax.JoinClauseSyntax, VBSyntax.LetClauseSyntax, VBSyntax.OrderByClauseSyntax, VBSyntax.WhereClauseSyntax, QueryClauseSyntax>(
Expand Down
8 changes: 8 additions & 0 deletions ICSharpCode.CodeConverter/VB/CommentConvertingNodesVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using Microsoft.CodeAnalysis.VisualBasic;
using VbSyntax = Microsoft.CodeAnalysis.VisualBasic.Syntax;
using CsSyntax = Microsoft.CodeAnalysis.CSharp.Syntax;
using SyntaxFactory = Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory;

namespace ICSharpCode.CodeConverter.VB
{
Expand All @@ -26,5 +27,12 @@ public override VisualBasicSyntaxNode DefaultVisit(SyntaxNode node)
{
return TriviaConverter.PortConvertedTrivia(node, _wrappedVisitor.Visit(node));
}

public override VisualBasicSyntaxNode VisitAttributeList(CsSyntax.AttributeListSyntax node)
{
var convertedNode = _wrappedVisitor.Visit(node)
.WithPrependedLeadingTrivia(SyntaxFactory.EndOfLineTrivia(Environment.NewLine));
return TriviaConverter.PortConvertedTrivia(node, convertedNode);
}
}
}
18 changes: 18 additions & 0 deletions Tests/CSharp/ExpressionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,24 @@ join p in products on c equals p.Category into ps
}");
}

[Fact]
public void Linq5()
{
TestConversionVisualBasicToCSharp(@"Private Shared Function FindPicFilePath(picId As String) As String
For Each FileInfo As FileInfo In From FileInfo1 In AList Where FileInfo1.Name.Substring(0, 6) = picId
Return FileInfo.FullName
Next
Return String.Empty
End Function", @"private static string FindPicFilePath(string picId)
{
foreach (FileInfo FileInfo in from FileInfo1 in AList
where FileInfo1.Name.Substring(0, 6) == picId
select FileInfo1)
return FileInfo.FullName;
return string.Empty;
}");
}

[Fact]
public void PartiallyQualifiedName()
{
Expand Down
15 changes: 15 additions & 0 deletions Tests/VB/MemberTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,21 @@ End Property
End Class");
}

[Fact]
public void TestPropertyWithAttribute()
{
TestConversionCSharpToVisualBasic(
@"class TestClass
{
[DatabaseGenerated(DatabaseGeneratedOption.None)]
int value { get; set; }
}", @"Class TestClass
<DatabaseGenerated(DatabaseGeneratedOption.None)>
Private Property value As Integer
End Class
");
}

[Fact]
public void TestConstructor()
{
Expand Down