Skip to content

Commit

Permalink
move language logic out of xmlreader
Browse files Browse the repository at this point in the history
  • Loading branch information
mary-georgiou-sonarsource committed Mar 10, 2023
1 parent cf40867 commit 7d336d5
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ protected SonarAnalysisContextBase(SonarAnalysisContext analysisContext, TContex
/// <param name="generatedCodeRecognizer">When set, generated trees are analyzed only when language-specific 'analyzeGeneratedCode' configuration property is also set.</param>
public bool ShouldAnalyzeTree(SyntaxTree tree, GeneratedCodeRecognizer generatedCodeRecognizer) =>
SonarLintFile() is var sonarLintReader
&& (generatedCodeRecognizer is null || sonarLintReader.AnalyzeGeneratedCode || !tree.IsGenerated(generatedCodeRecognizer, Compilation))
&& (generatedCodeRecognizer is null || sonarLintReader.AnalyzeGeneratedCode(Compilation.Language) || !tree.IsGenerated(generatedCodeRecognizer, Compilation))
&& (tree is null || (!IsUnchanged(tree) && ShouldAnalyzeFile(sonarLintReader, tree.FilePath)));

/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,12 @@ public class SonarLintXmlReader
public static readonly SonarLintXmlReader Empty = new(null);

private readonly SonarLintXml sonarLintXml;
private readonly string propertyLanguage;

private bool? ignoreHeaderComments;
private bool IgnoreHeaderCommentsCS => ignoreHeaderComments ??= ReadBoolean(ReadSettingsProperty($"sonar.cs.ignoreHeaderComments"));
private bool IgnoreHeaderCommentsVB => ignoreHeaderComments ??= ReadBoolean(ReadSettingsProperty($"sonar.vbnet.ignoreHeaderComments"));
public bool IgnoreHeaderComments => IgnoreHeaderCommentsCS || IgnoreHeaderCommentsVB;
public bool IgnoreHeaderComments(string language = LanguageNames.CSharp) => ignoreHeaderComments ??= ReadBoolean(ReadSettingsProperty($"sonar.{language}.ignoreHeaderComments"));

private bool? analyzeGeneratedCode;
private bool AnalyzeGeneratedCodeCS => analyzeGeneratedCode ??= ReadBoolean(ReadSettingsProperty($"sonar.cs.analyzeGeneratedCode"));
private bool AnalyzeGeneratedCodeVB => analyzeGeneratedCode ??= ReadBoolean(ReadSettingsProperty($"sonar.vbnet.analyzeGeneratedCode"));
public bool AnalyzeGeneratedCode => AnalyzeGeneratedCodeCS || AnalyzeGeneratedCodeVB;
public bool AnalyzeGeneratedCode(string language = LanguageNames.CSharp) => analyzeGeneratedCode ??= ReadBoolean(ReadSettingsProperty($"sonar.{language}.analyzeGeneratedCode"));

private string[] exclusions;
public string[] Exclusions => exclusions ??= ReadCommaSeparatedArray(ReadSettingsProperty("sonar.exclusions"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ protected void ReadParameters(SonarCompilationStartAnalysisContext context)
if (context.Options.SonarLintXml() != null && !string.IsNullOrEmpty(outPath))
{
var sonarLintXml = context.SonarLintFile();
IgnoreHeaderComments = sonarLintXml.IgnoreHeaderComments;
AnalyzeGeneratedCode = sonarLintXml.AnalyzeGeneratedCode;
IgnoreHeaderComments = sonarLintXml.IgnoreHeaderComments(context.Compilation.Language);
AnalyzeGeneratedCode = sonarLintXml.AnalyzeGeneratedCode(context.Compilation.Language);
OutPath = Path.Combine(outPath, context.Compilation.Language == LanguageNames.CSharp ? "output-cs" : "output-vbnet");
IsAnalyzerEnabled = true;
IsTestProject = context.IsTestProject();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,8 @@ public void SonarLintFile_LoadsExpectedValues(string language)
var options = AnalysisScaffolding.CreateOptions($"ResourceTests\\SonarLintXml\\All_properties_{language}\\SonarLint.xml");
var sut = CreateSut(compilation, options).SonarLintFile();

sut.IgnoreHeaderComments.Should().BeTrue();
sut.AnalyzeGeneratedCode.Should().BeFalse();
sut.IgnoreHeaderComments(language).Should().BeTrue();
sut.AnalyzeGeneratedCode(language).Should().BeFalse();
AssertArrayContent(sut.Exclusions, nameof(sut.Exclusions));
AssertArrayContent(sut.Inclusions, nameof(sut.Inclusions));
AssertArrayContent(sut.GlobalExclusions, nameof(sut.GlobalExclusions));
Expand Down Expand Up @@ -253,8 +253,8 @@ public void SonarLintFile_WhenFileIsMissing_ThrowException()

private static void CheckSonarLintXmlDefaultValues(SonarLintXmlReader sut)
{
sut.AnalyzeGeneratedCode.Should().BeFalse();
sut.IgnoreHeaderComments.Should().BeFalse();
sut.AnalyzeGeneratedCode().Should().BeFalse();
sut.IgnoreHeaderComments().Should().BeFalse();
sut.Exclusions.Should().NotBeNull().And.HaveCount(0);
sut.Inclusions.Should().NotBeNull().And.HaveCount(0);
sut.GlobalExclusions.Should().NotBeNull().And.HaveCount(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ namespace SonarAnalyzer.UnitTest.Helpers;
public class SonarLintXmlReaderTest
{
[DataTestMethod]
[DataRow(LanguageNames.CSharp, "cs")]
[DataRow(LanguageNames.VisualBasic, "vbnet")]
public void SonarLintXmlReader_WhenAllValuesAreSet_ExpectedValues(string language, string propertyLanguage)
[DataRow(LanguageNames.CSharp)]
[DataRow(LanguageNames.VisualBasic)]
public void SonarLintXmlReader_WhenAllValuesAreSet_ExpectedValues(string language)
{
var sut = CreateSonarLintXmlReader($"ResourceTests\\SonarLintXml\\All_Properties_{propertyLanguage}\\SonarLint.xml");
sut.IgnoreHeaderComments.Should().BeTrue();
sut.AnalyzeGeneratedCode.Should().BeFalse();
var sut = CreateSonarLintXmlReader($"ResourceTests\\SonarLintXml\\All_Properties_{language}\\SonarLint.xml");
sut.IgnoreHeaderComments(language).Should().BeTrue();
sut.AnalyzeGeneratedCode(language).Should().BeFalse();
AssertArrayContent(sut.Exclusions, nameof(sut.Exclusions));
AssertArrayContent(sut.Inclusions, nameof(sut.Inclusions));
AssertArrayContent(sut.GlobalExclusions, nameof(sut.GlobalExclusions));
Expand All @@ -56,12 +56,14 @@ static void AssertArrayContent(string[] array, string folder)
}
}

[TestMethod]
public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValues()
[DataTestMethod]
[DataRow(LanguageNames.CSharp)]
[DataRow(LanguageNames.VisualBasic)]
public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValues(string language)
{
var sut = CreateSonarLintXmlReader("ResourceTests\\SonarLintXml\\Partially_missing_properties\\SonarLint.xml");
sut.IgnoreHeaderComments.Should().BeFalse();
sut.AnalyzeGeneratedCode.Should().BeTrue();
sut.IgnoreHeaderComments(language).Should().BeFalse();
sut.AnalyzeGeneratedCode(language).Should().BeTrue();
AssertArrayContent(sut.Exclusions, nameof(sut.Exclusions));
AssertArrayContent(sut.Inclusions, nameof(sut.Inclusions));
sut.GlobalExclusions.Should().NotBeNull().And.HaveCount(0);
Expand Down Expand Up @@ -92,8 +94,8 @@ public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValu

private static void CheckSonarLintXmlReaderDefaultValues(SonarLintXmlReader sut)
{
sut.AnalyzeGeneratedCode.Should().BeFalse();
sut.IgnoreHeaderComments.Should().BeFalse();
sut.AnalyzeGeneratedCode().Should().BeFalse();
sut.IgnoreHeaderComments().Should().BeFalse();
sut.Exclusions.Should().NotBeNull().And.HaveCount(0);
sut.Inclusions.Should().NotBeNull().And.HaveCount(0);
sut.GlobalExclusions.Should().NotBeNull().And.HaveCount(0);
Expand Down

0 comments on commit 7d336d5

Please sign in to comment.