mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2025-01-08 08:53:04 +00:00
Ignore catch clauses with throw statements or with "_" as the identifier
This commit is contained in:
parent
81988c9ed8
commit
8449c8e2ab
2 changed files with 95 additions and 8 deletions
|
@ -117,6 +117,12 @@ namespace Ryujinx.Analyzers
|
||||||
|
|
||||||
var catchDeclaration = catchClauseSyntax.Declaration;
|
var catchDeclaration = catchClauseSyntax.Declaration;
|
||||||
|
|
||||||
|
// Ignore if catch block contains a throw statement.
|
||||||
|
if (catchClauseSyntax.Block.DescendantNodes().Any(x => x is ThrowStatementSyntax))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Find catch clauses without declaration.
|
// Find catch clauses without declaration.
|
||||||
if (catchDeclaration == null)
|
if (catchDeclaration == null)
|
||||||
{
|
{
|
||||||
|
@ -145,6 +151,12 @@ namespace Ryujinx.Analyzers
|
||||||
var catchDeclarationIdentifier = catchDeclaration.Identifier;
|
var catchDeclarationIdentifier = catchDeclaration.Identifier;
|
||||||
bool exceptionLogged = false;
|
bool exceptionLogged = false;
|
||||||
|
|
||||||
|
// Ignore if identifier is equal to "_"
|
||||||
|
if (catchDeclarationIdentifier.Text == "_")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate through all expression statements
|
// Iterate through all expression statements
|
||||||
foreach (var blockNode in catchClauseSyntax.Block.DescendantNodes())
|
foreach (var blockNode in catchClauseSyntax.Block.DescendantNodes())
|
||||||
{
|
{
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class MyClass
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
throw;
|
// Skip
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,13 +72,88 @@ public class MyClass
|
||||||
await Verifier.VerifyAnalyzerAsync(Text, expected).ConfigureAwait(false);
|
await Verifier.VerifyAnalyzerAsync(Text, expected).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CatchWithEmptyThrowStatement_NoDiagnostic()
|
||||||
|
{
|
||||||
|
string text = @"
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public class MyClass
|
||||||
|
{
|
||||||
|
public void MyMethod3()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine(""test"");
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
";
|
||||||
|
|
||||||
|
await Verifier.VerifyAnalyzerAsync(text).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CatchWithIdentifierAndThrowStatement_NoDiagnostic()
|
||||||
|
{
|
||||||
|
string text = @"
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public class MyClass
|
||||||
|
{
|
||||||
|
public void MyMethod4()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine(""test"");
|
||||||
|
}
|
||||||
|
catch (NullReferenceException exception)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(""invalid"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
";
|
||||||
|
|
||||||
|
await Verifier.VerifyAnalyzerAsync(text).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task CatchWithIgnoredIdentifier_NoDiagnostic()
|
||||||
|
{
|
||||||
|
string text = @"
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public class MyClass
|
||||||
|
{
|
||||||
|
public void MyMethod5()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine(""test"");
|
||||||
|
}
|
||||||
|
catch (NullReferenceException _)
|
||||||
|
{
|
||||||
|
// Skip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
";
|
||||||
|
|
||||||
|
await Verifier.VerifyAnalyzerAsync(text).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task LogWithoutCatchIdentifier_WarningDiagnostic()
|
public async Task LogWithoutCatchIdentifier_WarningDiagnostic()
|
||||||
{
|
{
|
||||||
string text = _loggerText + @"
|
string text = _loggerText + @"
|
||||||
public class MyClass
|
public class MyClass
|
||||||
{
|
{
|
||||||
public void MyMethod3()
|
public void MyMethod6()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -104,7 +179,7 @@ public class MyClass
|
||||||
string text = _loggerText + @"
|
string text = _loggerText + @"
|
||||||
public class MyClass
|
public class MyClass
|
||||||
{
|
{
|
||||||
public void MyMethod4()
|
public void MyMethod7()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -128,7 +203,7 @@ public class MyClass
|
||||||
string text = _loggerText + @"
|
string text = _loggerText + @"
|
||||||
public class MyClass
|
public class MyClass
|
||||||
{
|
{
|
||||||
public void MyMethod5()
|
public void MyMethod8()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -152,7 +227,7 @@ public class MyClass
|
||||||
string text = _loggerText + @"
|
string text = _loggerText + @"
|
||||||
public class MyClass
|
public class MyClass
|
||||||
{
|
{
|
||||||
public void MyMethod6()
|
public void MyMethod9()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -176,7 +251,7 @@ public class MyClass
|
||||||
string text = _loggerText + @"
|
string text = _loggerText + @"
|
||||||
public class MyClass
|
public class MyClass
|
||||||
{
|
{
|
||||||
public void MyMethod7()
|
public void MyMethod10()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -201,7 +276,7 @@ public class MyClass
|
||||||
string text = _loggerText + @"
|
string text = _loggerText + @"
|
||||||
public class MyClass
|
public class MyClass
|
||||||
{
|
{
|
||||||
public void MyMethod8()
|
public void MyMethod11()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -225,7 +300,7 @@ public class MyClass
|
||||||
string text = _loggerText + @"
|
string text = _loggerText + @"
|
||||||
public class MyClass
|
public class MyClass
|
||||||
{
|
{
|
||||||
public void MyMethod9()
|
public void MyMethod12()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue