Adds additional check that analyzer is within a method

Resolve #487
This commit is contained in:
Phil Scott 2021-07-13 19:22:05 -04:00 committed by Patrik Svensson
parent c2b25eea8a
commit 170901f584
2 changed files with 28 additions and 0 deletions

View File

@ -37,6 +37,12 @@ namespace Spectre.Console.Analyzer
return;
}
// if we aren't in a method then it might be too complex for us to handle.
if (!invocationOperation.Syntax.Ancestors().OfType<MethodDeclarationSyntax>().Any())
{
return;
}
if (!HasFieldAnsiConsole(invocationOperation.Syntax) &&
!HasParameterAnsiConsole(invocationOperation.Syntax))
{

View File

@ -10,6 +10,28 @@ namespace Spectre.Console.Analyzer.Tests.Unit.Analyzers
Descriptors.S1010_FavorInstanceAnsiConsoleOverStatic.Id,
DiagnosticSeverity.Info);
[Fact]
public async void Should_only_warn_within_methods()
{
const string Source = @"
using Spectre.Console;
internal sealed class Foo
{
private readonly IAnsiConsole _console;
public Foo(IAnsiConsole console = null)
{
_console = console ?? AnsiConsole.Create(new AnsiConsoleSettings());
}
}
";
await SpectreAnalyzerVerifier<FavorInstanceAnsiConsoleOverStaticAnalyzer>
.VerifyAnalyzerAsync(Source)
.ConfigureAwait(false);
}
[Fact]
public async void Instance_console_has_no_warnings()
{