Skip to content

Commit 4b6fc31

Browse files
committed
Disable SA0002 (Invalid settings file) for empty projects
Fixes #3453
1 parent feea263 commit 4b6fc31

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

StyleCop.Analyzers/StyleCop.Analyzers.Test/SpecialRules/SA0002UnitTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,30 @@ public async Task TestMissingSettingsAsync()
3434
await VerifyCSharpDiagnosticAsync(TestCode, DiagnosticResult.EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false);
3535
}
3636

37+
[Fact]
38+
[WorkItem(3453, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3453")]
39+
public async Task TestNoSourceFilesAsync()
40+
{
41+
string emptySettings = @"{ ""settings"": { } }";
42+
await new CSharpTest
43+
{
44+
TestState =
45+
{
46+
Sources = { string.Empty },
47+
AdditionalFiles = { ("stylecop.json", emptySettings) },
48+
AdditionalProjects =
49+
{
50+
["EmptyProjectWithSettings"] =
51+
{
52+
// The main test state doesn't allow empty Sources, so we use a second project to validate
53+
// the completely empty case.
54+
AdditionalFiles = { ("stylecop.json", emptySettings) },
55+
},
56+
},
57+
},
58+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
59+
}
60+
3761
[Fact]
3862
public async Task TestValidSettingsAsync()
3963
{

StyleCop.Analyzers/StyleCop.Analyzers/SpecialRules/SA0002InvalidSettingsFile.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,15 @@ public override void Initialize(AnalysisContext context)
5151

5252
private static void HandleCompilation(CompilationAnalysisContext context)
5353
{
54+
var firstSyntaxTree = context.Compilation.SyntaxTrees.FirstOrDefault();
55+
if (firstSyntaxTree is null)
56+
{
57+
return;
58+
}
59+
5460
try
5561
{
56-
SettingsHelper.GetStyleCopSettings(context.Options, context.Compilation?.SyntaxTrees.FirstOrDefault(), DeserializationFailureBehavior.ThrowException, context.CancellationToken);
62+
SettingsHelper.GetStyleCopSettings(context.Options, firstSyntaxTree, DeserializationFailureBehavior.ThrowException, context.CancellationToken);
5763
}
5864
catch (Exception ex) when (ex is JsonParseException || ex is InvalidSettingsException)
5965
{

0 commit comments

Comments
 (0)