Skip to content

Commit

Permalink
Remove some cases from "RemoveRedundantInitialization" analyzers (RCS…
Browse files Browse the repository at this point in the history
…1129, RCS1188)
  • Loading branch information
josefpihrt committed Nov 13, 2021
1 parent a7eb09a commit 56af897
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@ private static void AnalyzePropertyDeclaration(SyntaxNodeAnalysisContext context

ExpressionSyntax value = initializer?.Value?.WalkDownParentheses();

if (value?.IsKind(SyntaxKind.SuppressNullableWarningExpression) != false)
if (value == null)
return;

if (!CanBeConstantValue(value))
return;

if (initializer.SpanOrLeadingTriviaContainsDirectives())
Expand All @@ -62,5 +65,25 @@ private static void AnalyzePropertyDeclaration(SyntaxNodeAnalysisContext context

DiagnosticHelpers.ReportDiagnostic(context, DiagnosticRules.RemoveRedundantAutoPropertyInitialization, value);
}

private static bool CanBeConstantValue(ExpressionSyntax value)
{
if (value is CastExpressionSyntax castExpression)
value = castExpression.Expression.WalkDownParentheses();

switch (value.Kind())
{
case SyntaxKind.NullLiteralExpression:
case SyntaxKind.NumericLiteralExpression:
case SyntaxKind.TrueLiteralExpression:
case SyntaxKind.FalseLiteralExpression:
case SyntaxKind.CharacterLiteralExpression:
case SyntaxKind.DefaultLiteralExpression:
case SyntaxKind.DefaultExpression:
return true;
default:
return false;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Copyright (c) Josef Pihrt and Contributors. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis;
Expand Down Expand Up @@ -53,7 +54,11 @@ private static void AnalyzeFieldDeclaration(SyntaxNodeAnalysisContext context)
if (initializer?.ContainsDirectives == false)
{
ExpressionSyntax value = initializer.Value?.WalkDownParentheses();
if (value?.IsKind(SyntaxKind.SuppressNullableWarningExpression) == false)

if (value is CastExpressionSyntax castExpression)
value = castExpression.Expression.WalkDownParentheses();

if (CanBeConstantValue(value))
{
SemanticModel semanticModel = context.SemanticModel;
CancellationToken cancellationToken = context.CancellationToken;
Expand All @@ -76,5 +81,22 @@ private static void AnalyzeFieldDeclaration(SyntaxNodeAnalysisContext context)
}
}
}

private static bool CanBeConstantValue(ExpressionSyntax value)
{
switch (value.Kind())
{
case SyntaxKind.NullLiteralExpression:
case SyntaxKind.NumericLiteralExpression:
case SyntaxKind.TrueLiteralExpression:
case SyntaxKind.FalseLiteralExpression:
case SyntaxKind.CharacterLiteralExpression:
case SyntaxKind.DefaultLiteralExpression:
case SyntaxKind.DefaultExpression:
return true;
default:
return false;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,26 +99,6 @@ class C
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_BoolConst()
{
await VerifyDiagnosticAndFixAsync(@"
class C
{
const bool K = false;
bool _f [|= K|];
}
", @"
class C
{
const bool K = false;
bool _f;
}
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_Char()
{
Expand All @@ -135,26 +115,6 @@ class C
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_CharConst()
{
await VerifyDiagnosticAndFixAsync(@"
class C
{
const char K = '\0';
char _f [|= K|];
}
", @"
class C
{
const char K = '\0';
char _f;
}
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_Int()
{
Expand All @@ -171,26 +131,6 @@ class C
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_IntConst()
{
await VerifyDiagnosticAndFixAsync(@"
class C
{
const int K = 0;
int _f [|= K|];
}
", @"
class C
{
const int K = 0;
int _f;
}
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_ULong()
{
Expand All @@ -207,26 +147,6 @@ class C
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_ULongConst()
{
await VerifyDiagnosticAndFixAsync(@"
class C
{
const ulong K = 0;
ulong _f [|= K|];
}
", @"
class C
{
const ulong K = 0;
ulong _f;
}
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task Test_Enum()
{
Expand All @@ -237,10 +157,9 @@ class C
{
const RegexOptions RegexOptionsConst = RegexOptions.None;
RegexOptions _f1 [|= 0|];
RegexOptions _f2 [|= RegexOptions.None|];
RegexOptions _f1 [|= default|];
RegexOptions _f2 [|= default(RegexOptions)|];
RegexOptions _f3 [|= (RegexOptions)0|];
RegexOptions _f4 [|= RegexOptionsConst|];
}
", @"
using System.Text.RegularExpressions;
Expand All @@ -252,7 +171,6 @@ class C
RegexOptions _f1;
RegexOptions _f2;
RegexOptions _f3;
RegexOptions _f4;
}
");
}
Expand All @@ -265,18 +183,32 @@ class C
{
const string K = null;
string _s2 [|= null|];
string _s3 [|= default(string)|];
string _s4 [|= K|];
string _s1 [|= null|];
string _s2 [|= default(string)|];
}
", @"
class C
{
const string K = null;
string _s1;
string _s2;
string _s3;
string _s4;
}
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task TestNoDiagnostic()
{
await VerifyNoDiagnosticAsync(@"
using System.Text.RegularExpressions;
class C
{
const bool K = false;
bool _k = K;
RegexOptions _r = RegexOptions.None;
}
");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ class C
const bool K = false;
bool P1 { get; set; } = [|false|];
bool P2 { get; set; } = [|K|];
bool P3 { get; set; } = [|default|];
bool P2 { get; set; } = [|default|];
}
", @"
class C
Expand All @@ -32,7 +31,6 @@ class C
bool P1 { get; set; }
bool P2 { get; set; }
bool P3 { get; set; }
}
");
}
Expand Down Expand Up @@ -70,8 +68,7 @@ class C
const char K = '\0';
char P1 { get; set; } = [|'\0'|];
char P2 { get; set; } = [|K|];
char P3 { get; set; } = [|default|];
char P2 { get; set; } = [|default|];
}
", @"
class C
Expand All @@ -80,7 +77,6 @@ class C
char P1 { get; set; }
char P2 { get; set; }
char P3 { get; set; }
}
");
}
Expand All @@ -96,7 +92,6 @@ class C
string P1 { get; set; } = [|null|];
string P2 { get; set; } = [|default(string)|];
string P3 { get; set; } = [|default|];
string P4 { get; set; } = [|K|];
}
", @"
class C
Expand All @@ -106,7 +101,6 @@ class C
string P1 { get; set; }
string P2 { get; set; }
string P3 { get; set; }
string P4 { get; set; }
}
");
}
Expand All @@ -121,8 +115,7 @@ class C
int P1 { get; set; } = [|0|];
int P2 { get; set; } = [|(int)0|];
int P3 { get; set; } = [|K|];
int P4 { get; set; } = [|default|];
int P3 { get; set; } = [|default|];
}
", @"
class C
Expand All @@ -132,7 +125,6 @@ class C
int P1 { get; set; }
int P2 { get; set; }
int P3 { get; set; }
int P4 { get; set; }
}
");
}
Expand All @@ -146,8 +138,7 @@ class C
const ulong K = 0;
ulong P1 { get; set; } = [|(ulong)0|];
ulong P2 { get; set; } = [|K|];
ulong P3 { get; set; } = [|default|];
ulong P2 { get; set; } = [|default|];
}
", @"
class C
Expand All @@ -156,7 +147,6 @@ class C
ulong P1 { get; set; }
ulong P2 { get; set; }
ulong P3 { get; set; }
}
");
}
Expand Down Expand Up @@ -193,6 +183,22 @@ class C
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantFieldInitialization)]
public async Task TestNoDiagnostic()
{
await VerifyNoDiagnosticAsync(@"
using System.Text.RegularExpressions;
class C
{
const bool K = false;
bool P1 { get; set; } = K;
RegexOptions P2 { get; set; } = RegexOptions.None;
}
");
}

[Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.RemoveRedundantAutoPropertyInitialization)]
public async Task TestNoDiagnostic_NoInitializer()
{
Expand Down

0 comments on commit 56af897

Please sign in to comment.