Skip to content

Commit b84892b

Browse files
committed
Implement support for anonymous object creation expressions
1 parent c3ae121 commit b84892b

2 files changed

Lines changed: 112 additions & 0 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers.Test/ReadabilityRules/SA1137UnitTests.cs

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,109 @@ struct StructName
696696
await this.VerifyCSharpFixAsync(testCode, fixedCode, cancellationToken: CancellationToken.None).ConfigureAwait(false);
697697
}
698698

699+
[Fact]
700+
public async Task TestValidAnonymousObjectCreationExpressionAsync()
701+
{
702+
string testCode = @"
703+
class ClassName
704+
{
705+
void SingleLineInitializersMethod()
706+
{
707+
var obj = new { X = 0 };
708+
}
709+
710+
void SingleElementInitializersMethod()
711+
{
712+
var obj =
713+
new
714+
{
715+
X = 0,
716+
};
717+
}
718+
719+
void SharedLineInitializersMethod()
720+
{
721+
var obj =
722+
new
723+
{
724+
X = 0, Y = 0,
725+
};
726+
}
727+
}
728+
";
729+
730+
await this.VerifyCSharpDiagnosticAsync(testCode, EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
731+
}
732+
733+
[Fact]
734+
public async Task TestAnonymousObjectCreationExpressionAsync()
735+
{
736+
string testCode = @"
737+
class ClassName
738+
{
739+
void NonZeroAlignmentMethod()
740+
{
741+
var obj =
742+
new
743+
{
744+
X = 0,
745+
Y = 0,
746+
Z = 0,
747+
};
748+
}
749+
750+
void ZeroAlignmentMethod()
751+
{
752+
var obj =
753+
new
754+
{
755+
X = 0,
756+
Y = 0,
757+
Z = 0,
758+
};
759+
}
760+
}
761+
";
762+
string fixedCode = @"
763+
class ClassName
764+
{
765+
void NonZeroAlignmentMethod()
766+
{
767+
var obj =
768+
new
769+
{
770+
X = 0,
771+
Y = 0,
772+
Z = 0,
773+
};
774+
}
775+
776+
void ZeroAlignmentMethod()
777+
{
778+
var obj =
779+
new
780+
{
781+
X = 0,
782+
Y = 0,
783+
Z = 0,
784+
};
785+
}
786+
}
787+
";
788+
789+
DiagnosticResult[] expected =
790+
{
791+
this.CSharpDiagnostic().WithLocation(10, 1),
792+
this.CSharpDiagnostic().WithLocation(11, 1),
793+
this.CSharpDiagnostic().WithLocation(21, 1),
794+
this.CSharpDiagnostic().WithLocation(22, 1),
795+
};
796+
797+
await this.VerifyCSharpDiagnosticAsync(testCode, expected, CancellationToken.None).ConfigureAwait(false);
798+
await this.VerifyCSharpDiagnosticAsync(fixedCode, EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
799+
await this.VerifyCSharpFixAsync(testCode, fixedCode, cancellationToken: CancellationToken.None).ConfigureAwait(false);
800+
}
801+
699802
/// <inheritdoc/>
700803
protected override IEnumerable<DiagnosticAnalyzer> GetCSharpDiagnosticAnalyzers()
701804
{

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1137ElementsShouldHaveTheSameIndentation.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ internal class SA1137ElementsShouldHaveTheSameIndentation : DiagnosticAnalyzer
4545
private static readonly Action<SyntaxNodeAnalysisContext> BlockAction = HandleBlock;
4646
private static readonly Action<SyntaxNodeAnalysisContext> SwitchStatementAction = HandleSwitchStatement;
4747
private static readonly Action<SyntaxNodeAnalysisContext> InitializerExpressionAction = HandleInitializerExpression;
48+
private static readonly Action<SyntaxNodeAnalysisContext> AnonymousObjectCreationExpressionAction = HandleAnonymousObjectCreationExpression;
4849

4950
/// <inheritdoc/>
5051
public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get; } =
@@ -73,6 +74,7 @@ private static void HandleCompilationStart(CompilationStartAnalysisContext conte
7374
context.RegisterSyntaxNodeActionHonorExclusions(BlockAction, SyntaxKind.Block);
7475
context.RegisterSyntaxNodeActionHonorExclusions(SwitchStatementAction, SyntaxKind.SwitchStatement);
7576
context.RegisterSyntaxNodeActionHonorExclusions(InitializerExpressionAction, SyntaxKinds.InitializerExpression);
77+
context.RegisterSyntaxNodeActionHonorExclusions(AnonymousObjectCreationExpressionAction, SyntaxKind.AnonymousObjectCreationExpression);
7678
}
7779

7880
private static void HandleCompilationUnit(SyntaxNodeAnalysisContext context)
@@ -246,6 +248,13 @@ private static void HandleInitializerExpression(SyntaxNodeAnalysisContext contex
246248
CheckElements(context, initializerExpression.Expressions);
247249
}
248250

251+
private static void HandleAnonymousObjectCreationExpression(SyntaxNodeAnalysisContext context)
252+
{
253+
var anonymousObjectCreationExpression = (AnonymousObjectCreationExpressionSyntax)context.Node;
254+
255+
CheckElements(context, anonymousObjectCreationExpression.Initializers);
256+
}
257+
249258
private static void AddMembersAndAttributes<T>(ImmutableList<SyntaxNode>.Builder elements, SeparatedSyntaxList<T> members)
250259
where T : SyntaxNode
251260
{

0 commit comments

Comments
 (0)