Skip to content

Commit 754e7bc

Browse files
committed
Support parenthesized expressions in SA1139
1 parent bce43ea commit 754e7bc

4 files changed

Lines changed: 32 additions & 6 deletions

File tree

StyleCop.Analyzers/StyleCop.Analyzers.CodeFixes/ReadabilityRules/SA1139CodeFixProvider.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,11 @@ private static async Task<Document> GetTransformedDocumentAsync(Document documen
9494

9595
private static SyntaxNode GenerateReplacementNode(CastExpressionSyntax node)
9696
{
97-
var plusMinusSyntax = node.Expression as PrefixUnaryExpressionSyntax;
97+
var plusMinusSyntax = node.Expression.WalkDownParentheses() as PrefixUnaryExpressionSyntax;
9898
var literalExpressionSyntax =
9999
plusMinusSyntax == null ?
100-
(LiteralExpressionSyntax)node.Expression :
101-
(LiteralExpressionSyntax)plusMinusSyntax.Operand;
100+
(LiteralExpressionSyntax)node.Expression.WalkDownParentheses() :
101+
(LiteralExpressionSyntax)plusMinusSyntax.Operand.WalkDownParentheses();
102102
var typeToken = node.Type.GetFirstToken();
103103
var prefix = plusMinusSyntax == null
104104
? string.Empty

StyleCop.Analyzers/StyleCop.Analyzers.Test/ReadabilityRules/SA1139UnitTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ public void Method()
7272
[InlineData("long", "1", "1L")]
7373
[InlineData("long", "+1", "+1L")]
7474
[InlineData("long", "-1", "-1L")]
75+
[InlineData("long", "(+1)", "+1L")]
76+
[InlineData("long", "(-1)", "-1L")]
77+
[InlineData("long", "(1)", "1L")]
78+
[InlineData("long", "(-(1))", "-1L")]
7579
[InlineData("ulong", "1", "1UL")]
7680
[InlineData("ulong", "+1", "+1UL")]
7781
[InlineData("uint", "1", "1U")]
@@ -175,6 +179,7 @@ public void Method()
175179
/// <returns>A <see cref="Task"/> representing the asynchronous unit test.</returns>
176180
[Theory]
177181
[InlineData("(long)~1")]
182+
[InlineData("(long)(~1)")]
178183
[InlineData("(bool)true")]
179184
[InlineData("(bool)(false)")]
180185
[InlineData("(long)~+1")]
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved.
2+
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information.
3+
4+
namespace StyleCop.Analyzers.Helpers
5+
{
6+
using Microsoft.CodeAnalysis.CSharp.Syntax;
7+
8+
internal static class ExpressionSyntaxHelpers
9+
{
10+
public static ExpressionSyntax WalkDownParentheses(this ExpressionSyntax expression)
11+
{
12+
var result = expression;
13+
while (result is ParenthesizedExpressionSyntax parenthesizedExpression)
14+
{
15+
result = parenthesizedExpression.Expression;
16+
}
17+
18+
return result;
19+
}
20+
}
21+
}

StyleCop.Analyzers/StyleCop.Analyzers/ReadabilityRules/SA1139UseLiteralSuffixNotationInsteadOfCasting.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private static void HandleCastExpression(SyntaxNodeAnalysisContext context)
5858
return;
5959
}
6060

61-
var unaryExpressionSyntax = castExpressionSyntax.Expression as PrefixUnaryExpressionSyntax;
61+
var unaryExpressionSyntax = castExpressionSyntax.Expression.WalkDownParentheses() as PrefixUnaryExpressionSyntax;
6262
if (unaryExpressionSyntax != null)
6363
{
6464
if (unaryExpressionSyntax.Kind() != SyntaxKind.UnaryPlusExpression
@@ -70,8 +70,8 @@ private static void HandleCastExpression(SyntaxNodeAnalysisContext context)
7070
}
7171

7272
var castedElementTypeSyntax = unaryExpressionSyntax == null
73-
? castExpressionSyntax.Expression as LiteralExpressionSyntax
74-
: unaryExpressionSyntax.Operand as LiteralExpressionSyntax;
73+
? castExpressionSyntax.Expression.WalkDownParentheses() as LiteralExpressionSyntax
74+
: unaryExpressionSyntax.Operand.WalkDownParentheses() as LiteralExpressionSyntax;
7575

7676
if (castedElementTypeSyntax == null)
7777
{

0 commit comments

Comments
 (0)