From 41d1454455579e7f9410397f71419ac48e731edd Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Fri, 10 Mar 2023 16:07:56 +0100 Subject: [PATCH 01/12] Remove languagy property --- .../SonarAnalysisContextBase.cs | 10 +++------ .../Helpers/SonarLintXmlReader.cs | 13 +++++------ .../Rules/Utilities/UtilityAnalyzerBase.cs | 4 ++-- .../SonarAnalysisContextBaseTest.cs | 8 +++---- .../Helpers/SonarLintXmlReaderTest.cs | 22 +++++++++---------- 5 files changed, 26 insertions(+), 31 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/AnalysisContext/SonarAnalysisContextBase.cs b/analyzers/src/SonarAnalyzer.Common/AnalysisContext/SonarAnalysisContextBase.cs index 70fd96b25ee..e6f2ff25f68 100644 --- a/analyzers/src/SonarAnalyzer.Common/AnalysisContext/SonarAnalysisContextBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/AnalysisContext/SonarAnalysisContextBase.cs @@ -30,13 +30,9 @@ public class SonarAnalysisContextBase protected static readonly ConditionalWeakTable> FileInclusionCache = new(); protected static readonly ConditionalWeakTable> UnchangedFilesCache = new(); protected static readonly SourceTextValueProvider ProjectConfigProvider = new(x => new ProjectConfigReader(x)); - protected static readonly SourceTextValueProvider SonarLintXmlProviderCS = new(x => new SonarLintXmlReader(x, LanguageNames.CSharp)); - protected static readonly SourceTextValueProvider SonarLintXmlProviderVB = new(x => new SonarLintXmlReader(x, LanguageNames.VisualBasic)); + protected static readonly SourceTextValueProvider SonarLintXmlProvider = new(x => new SonarLintXmlReader(x)); protected SonarAnalysisContextBase() { } - - protected static SourceTextValueProvider SonarLintXmlReader(string language) => - language == LanguageNames.CSharp ? SonarLintXmlProviderCS : SonarLintXmlProviderVB; } public abstract class SonarAnalysisContextBase : SonarAnalysisContextBase @@ -58,7 +54,7 @@ protected SonarAnalysisContextBase(SonarAnalysisContext analysisContext, TContex /// When set, generated trees are analyzed only when language-specific 'analyzeGeneratedCode' configuration property is also set. 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))); /// @@ -88,7 +84,7 @@ public SonarLintXmlReader SonarLintFile() if (Options.SonarLintXml() is { } sonarLintXml) { return sonarLintXml.GetText() is { } sourceText - && AnalysisContext.TryGetValue(sourceText, SonarLintXmlReader(Compilation.Language), out var sonarLintXmlReader) + && AnalysisContext.TryGetValue(sourceText, SonarLintXmlProvider, out var sonarLintXmlReader) ? sonarLintXmlReader : throw new InvalidOperationException($"File '{Path.GetFileName(sonarLintXml.Path)}' has been added as an AdditionalFile but could not be read and parsed."); } diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs index 83fb3a13080..ccba2d0fe00 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs @@ -28,16 +28,15 @@ namespace SonarAnalyzer.Helpers; public class SonarLintXmlReader { - public static readonly SonarLintXmlReader Empty = new(null, LanguageNames.CSharp); + public static readonly SonarLintXmlReader Empty = new(null); private readonly SonarLintXml sonarLintXml; - private readonly string propertyLanguage; private bool? ignoreHeaderComments; - public bool IgnoreHeaderComments => ignoreHeaderComments ??= ReadBoolean(ReadSettingsProperty($"sonar.{propertyLanguage}.ignoreHeaderComments")); + public bool IgnoreHeaderComments(string language = LanguageNames.CSharp) => ignoreHeaderComments ??= ReadBoolean(ReadSettingsProperty($"sonar.{LanguageXmlName(language)}.ignoreHeaderComments")); private bool? analyzeGeneratedCode; - public bool AnalyzeGeneratedCode => analyzeGeneratedCode ??= ReadBoolean(ReadSettingsProperty($"sonar.{propertyLanguage}.analyzeGeneratedCode")); + public bool AnalyzeGeneratedCode(string language = LanguageNames.CSharp) => analyzeGeneratedCode ??= ReadBoolean(ReadSettingsProperty($"sonar.{LanguageXmlName(language)}.analyzeGeneratedCode")); private string[] exclusions; public string[] Exclusions => exclusions ??= ReadCommaSeparatedArray(ReadSettingsProperty("sonar.exclusions")); @@ -60,11 +59,9 @@ public class SonarLintXmlReader private List parametrizedRules; public List ParametrizedRules => parametrizedRules ??= ReadRuleParameters(); - public SonarLintXmlReader(SourceText sonarLintXml, string language = LanguageNames.CSharp) + public SonarLintXmlReader(SourceText sonarLintXml, string language) { this.sonarLintXml = sonarLintXml == null ? SonarLintXml.Empty : ParseContent(sonarLintXml); - propertyLanguage = language == LanguageNames.CSharp ? "cs" : "vbnet"; - } private static SonarLintXml ParseContent(SourceText sonarLintXml) { @@ -98,4 +95,6 @@ private static SonarLintXml ParseContent(SourceText sonarLintXml) private static bool ReadBoolean(string str, bool defaultValue = false) => bool.TryParse(str, out var propertyValue) ? propertyValue : defaultValue; + + private string LanguageXmlName(string language) => language.Equals(LanguageNames.CSharp) ? "cs" : "vbnet"; } diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/Utilities/UtilityAnalyzerBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/Utilities/UtilityAnalyzerBase.cs index 6df9b93a53e..65627b91f2f 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/Utilities/UtilityAnalyzerBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/Utilities/UtilityAnalyzerBase.cs @@ -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(); diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs index e0c98dd49aa..0c042c18290 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs @@ -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(analyzerLanguage.ToString()).Should().BeTrue(); + sut.AnalyzeGeneratedCode(analyzerLanguage.ToString()).Should().BeFalse(); AssertArrayContent(sut.Exclusions, nameof(sut.Exclusions)); AssertArrayContent(sut.Inclusions, nameof(sut.Inclusions)); AssertArrayContent(sut.GlobalExclusions, nameof(sut.GlobalExclusions)); @@ -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); diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs index 009508344c2..c6901da666d 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs @@ -29,11 +29,11 @@ public class SonarLintXmlReaderTest [DataTestMethod] [DataRow(LanguageNames.CSharp, "cs")] [DataRow(LanguageNames.VisualBasic, "vbnet")] - public void SonarLintXmlReader_WhenAllValuesAreSet_ExpectedValues(string language, string propertyLanguage) + public void SonarLintXmlReader_WhenAllValuesAreSet_ExpectedValues(string language, string xmlLanguageName) { - var sut = CreateSonarLintXmlReader($"ResourceTests\\SonarLintXml\\All_Properties_{propertyLanguage}\\SonarLint.xml", language); - sut.IgnoreHeaderComments.Should().BeTrue(); - sut.AnalyzeGeneratedCode.Should().BeFalse(); + var sut = CreateSonarLintXmlReader($"ResourceTests\\SonarLintXml\\All_Properties_{xmlLanguageName}\\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)); @@ -60,8 +60,8 @@ static void AssertArrayContent(string[] array, string folder) public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValues() { var sut = CreateSonarLintXmlReader("ResourceTests\\SonarLintXml\\Partially_missing_properties\\SonarLint.xml"); - sut.IgnoreHeaderComments.Should().BeFalse(); - sut.AnalyzeGeneratedCode.Should().BeTrue(); + sut.IgnoreHeaderComments().Should().BeFalse(); + sut.AnalyzeGeneratedCode().Should().BeTrue(); AssertArrayContent(sut.Exclusions, nameof(sut.Exclusions)); AssertArrayContent(sut.Inclusions, nameof(sut.Inclusions)); sut.GlobalExclusions.Should().NotBeNull().And.HaveCount(0); @@ -76,7 +76,7 @@ public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValu [DataRow("this is not an xml")] [DataRow(@"")] public void SonarLintXmlReader_WithMalformedXml_DefaultBehaviour(string sonarLintXmlContent) => - CheckSonarLintXmlReaderDefaultValues(new SonarLintXmlReader(SourceText.From(sonarLintXmlContent), LanguageNames.CSharp)); + CheckSonarLintXmlReaderDefaultValues(new SonarLintXmlReader(SourceText.From(sonarLintXmlContent))); [TestMethod] public void SonarLintXmlReader_MissingProperties_DefaultBehaviour() => @@ -92,8 +92,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); @@ -110,6 +110,6 @@ private static void AssertArrayContent(string[] array, string folder) array[1].Should().BeEquivalentTo($"Fake/{folder}/Second*/**/*"); } - private static SonarLintXmlReader CreateSonarLintXmlReader(string relativePath, string language = LanguageNames.CSharp) => - new(SourceText.From(File.ReadAllText(relativePath)), language); + private static SonarLintXmlReader CreateSonarLintXmlReader(string relativePath) => + new(SourceText.From(File.ReadAllText(relativePath))); } From 21d325a998e715531aad5c12fcf2b69f6eef78c8 Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Mon, 13 Mar 2023 16:39:06 +0100 Subject: [PATCH 02/12] Apply comments --- .../Common/UnexpectedLanguageException.cs | 2 ++ .../Helpers/SonarLintXmlReader.cs | 20 +++++++++----- .../SonarAnalysisContextBaseTest.cs | 8 +++--- .../Helpers/SonarLintXmlReaderTest.cs | 27 ++++++++++++++++--- .../SonarLint.xml | 13 +++++++++ 5 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/IgnoreHeaderCommentsTrueCSharpFalseVbnet/SonarLint.xml diff --git a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs index c71a99fca52..c87e897a544 100644 --- a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs +++ b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs @@ -23,5 +23,7 @@ namespace SonarAnalyzer.Common public sealed class UnexpectedLanguageException : Exception { public UnexpectedLanguageException(AnalyzerLanguage language) : base($"Unexpected language: {language}") { } + + public UnexpectedLanguageException(string message) : base(message) { } } } diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs index ccba2d0fe00..706fff853ea 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs @@ -32,11 +32,21 @@ public class SonarLintXmlReader private readonly SonarLintXml sonarLintXml; - private bool? ignoreHeaderComments; - public bool IgnoreHeaderComments(string language = LanguageNames.CSharp) => ignoreHeaderComments ??= ReadBoolean(ReadSettingsProperty($"sonar.{LanguageXmlName(language)}.ignoreHeaderComments")); + public bool IgnoreHeaderComments(string language) => + language switch + { + LanguageNames.CSharp => ReadBoolean(ReadProperty("sonar.cs.ignoreHeaderComments")), + LanguageNames.VisualBasic => ReadBoolean(ReadProperty("sonar.vbnet.ignoreHeaderComments")), + _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") + }; - private bool? analyzeGeneratedCode; - public bool AnalyzeGeneratedCode(string language = LanguageNames.CSharp) => analyzeGeneratedCode ??= ReadBoolean(ReadSettingsProperty($"sonar.{LanguageXmlName(language)}.analyzeGeneratedCode")); + public bool AnalyzeGeneratedCode(string language) => + language switch + { + LanguageNames.CSharp => ReadBoolean(ReadProperty("sonar.cs.analyzeGeneratedCode")), + LanguageNames.VisualBasic => ReadBoolean(ReadProperty("sonar.vbnet.analyzeGeneratedCode")), + _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") + }; private string[] exclusions; public string[] Exclusions => exclusions ??= ReadCommaSeparatedArray(ReadSettingsProperty("sonar.exclusions")); @@ -95,6 +105,4 @@ private static SonarLintXml ParseContent(SourceText sonarLintXml) private static bool ReadBoolean(string str, bool defaultValue = false) => bool.TryParse(str, out var propertyValue) ? propertyValue : defaultValue; - - private string LanguageXmlName(string language) => language.Equals(LanguageNames.CSharp) ? "cs" : "vbnet"; } diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs index 0c042c18290..f527dd092a9 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.cs @@ -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(analyzerLanguage.ToString()).Should().BeTrue(); - sut.AnalyzeGeneratedCode(analyzerLanguage.ToString()).Should().BeFalse(); + sut.IgnoreHeaderComments(analyzerLanguage.LanguageName).Should().BeTrue(); + sut.AnalyzeGeneratedCode(analyzerLanguage.LanguageName).Should().BeFalse(); AssertArrayContent(sut.Exclusions, nameof(sut.Exclusions)); AssertArrayContent(sut.Inclusions, nameof(sut.Inclusions)); AssertArrayContent(sut.GlobalExclusions, nameof(sut.GlobalExclusions)); @@ -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(LanguageNames.CSharp).Should().BeFalse(); + sut.IgnoreHeaderComments(LanguageNames.CSharp).Should().BeFalse(); sut.Exclusions.Should().NotBeNull().And.HaveCount(0); sut.Inclusions.Should().NotBeNull().And.HaveCount(0); sut.GlobalExclusions.Should().NotBeNull().And.HaveCount(0); diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs index c6901da666d..b6a988717be 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs @@ -20,6 +20,7 @@ using System.IO; using Microsoft.CodeAnalysis.Text; +using SonarAnalyzer.Common; namespace SonarAnalyzer.UnitTest.Helpers; @@ -60,8 +61,8 @@ static void AssertArrayContent(string[] array, string folder) public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValues() { var sut = CreateSonarLintXmlReader("ResourceTests\\SonarLintXml\\Partially_missing_properties\\SonarLint.xml"); - sut.IgnoreHeaderComments().Should().BeFalse(); - sut.AnalyzeGeneratedCode().Should().BeTrue(); + sut.IgnoreHeaderComments(LanguageNames.CSharp).Should().BeFalse(); + sut.AnalyzeGeneratedCode(LanguageNames.CSharp).Should().BeTrue(); AssertArrayContent(sut.Exclusions, nameof(sut.Exclusions)); AssertArrayContent(sut.Inclusions, nameof(sut.Inclusions)); sut.GlobalExclusions.Should().NotBeNull().And.HaveCount(0); @@ -71,6 +72,14 @@ public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValu sut.ParametrizedRules.Should().NotBeNull().And.HaveCount(0); } + [TestMethod] + public void SonarLintXmlReader_IgnoreHeaderCommentsCSharpTrueVBNetFalse_ExpectedValues() + { + var sut = CreateSonarLintXmlReader("ResourceTests\\IgnoreHeaderCommentsTrueCSharpFalseVbnet\\SonarLint.xml"); + sut.IgnoreHeaderComments(LanguageNames.CSharp).Should().BeTrue(); + sut.IgnoreHeaderComments(LanguageNames.VisualBasic).Should().BeFalse(); + } + [DataTestMethod] [DataRow("")] [DataRow("this is not an xml")] @@ -90,10 +99,20 @@ public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValu public void SonarLintXmlReader_CheckEmpty_DefaultBehaviour() => CheckSonarLintXmlReaderDefaultValues(SonarLintXmlReader.Empty); + [TestMethod] + public void SonarLintXmlReader_LanguageDoesNotExist_Throws() + { + var sut = CreateSonarLintXmlReader($"ResourceTests\\SonarLintXml\\All_Properties_cs\\SonarLint.xml"); + sut.Invoking(x => x.IgnoreHeaderComments("fsharp")) + .Should() + .Throw() + .WithMessage("Language 'fsharp' is not supported."); + } + private static void CheckSonarLintXmlReaderDefaultValues(SonarLintXmlReader sut) { - sut.AnalyzeGeneratedCode().Should().BeFalse(); - sut.IgnoreHeaderComments().Should().BeFalse(); + sut.AnalyzeGeneratedCode(LanguageNames.CSharp).Should().BeFalse(); + sut.IgnoreHeaderComments(LanguageNames.CSharp).Should().BeFalse(); sut.Exclusions.Should().NotBeNull().And.HaveCount(0); sut.Inclusions.Should().NotBeNull().And.HaveCount(0); sut.GlobalExclusions.Should().NotBeNull().And.HaveCount(0); diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/IgnoreHeaderCommentsTrueCSharpFalseVbnet/SonarLint.xml b/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/IgnoreHeaderCommentsTrueCSharpFalseVbnet/SonarLint.xml new file mode 100644 index 00000000000..987922377e6 --- /dev/null +++ b/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/IgnoreHeaderCommentsTrueCSharpFalseVbnet/SonarLint.xml @@ -0,0 +1,13 @@ + + + + + sonar.cs.ignoreHeaderComments + true + + + sonar.vbnet.ignoreHeaderComments + false + + + From fa4718585c82706b1fc11167e2b2e645233ace48 Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Tue, 14 Mar 2023 12:07:22 +0100 Subject: [PATCH 03/12] Increase coverage --- .../Helpers/SonarLintXmlReaderTest.cs | 11 ++++++++-- .../SonarLint.xml | 21 +++++++++++++++++++ .../SonarLint.xml.bak} | 0 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml rename analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/{IgnoreHeaderCommentsTrueCSharpFalseVbnet/SonarLint.xml => PropertiesCSharpTrueVbnetFalse/SonarLint.xml.bak} (100%) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs index b6a988717be..ed2fdfab7ab 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs @@ -73,11 +73,13 @@ public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValu } [TestMethod] - public void SonarLintXmlReader_IgnoreHeaderCommentsCSharpTrueVBNetFalse_ExpectedValues() + public void SonarLintXmlReader_PropertiesCSharpTrueVBNetFalse_ExpectedValues() { - var sut = CreateSonarLintXmlReader("ResourceTests\\IgnoreHeaderCommentsTrueCSharpFalseVbnet\\SonarLint.xml"); + var sut = CreateSonarLintXmlReader("ResourceTests\\PropertiesCSharpTrueVbnetFalse\\SonarLint.xml"); sut.IgnoreHeaderComments(LanguageNames.CSharp).Should().BeTrue(); sut.IgnoreHeaderComments(LanguageNames.VisualBasic).Should().BeFalse(); + sut.AnalyzeGeneratedCode(LanguageNames.CSharp).Should().BeTrue(); + sut.AnalyzeGeneratedCode(LanguageNames.VisualBasic).Should().BeFalse(); } [DataTestMethod] @@ -107,6 +109,11 @@ public void SonarLintXmlReader_LanguageDoesNotExist_Throws() .Should() .Throw() .WithMessage("Language 'fsharp' is not supported."); + + sut.Invoking(x => x.AnalyzeGeneratedCode("fsharp")) + .Should() + .Throw() + .WithMessage("Language 'fsharp' is not supported."); } private static void CheckSonarLintXmlReaderDefaultValues(SonarLintXmlReader sut) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml b/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml new file mode 100644 index 00000000000..39ddbc9a84e --- /dev/null +++ b/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml @@ -0,0 +1,21 @@ + + + + + sonar.cs.ignoreHeaderComments + true + + + sonar.vbnet.ignoreHeaderComments + false + + + sonar.cs.analyzeGeneratedCode + true + + + sonar.vbnet.analyzeGeneratedCode + false + + + \ No newline at end of file diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/IgnoreHeaderCommentsTrueCSharpFalseVbnet/SonarLint.xml b/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml.bak similarity index 100% rename from analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/IgnoreHeaderCommentsTrueCSharpFalseVbnet/SonarLint.xml rename to analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml.bak From fcf53e2d7f1cb348c6761a787a65840fb56536ad Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Tue, 14 Mar 2023 15:38:25 +0100 Subject: [PATCH 04/12] Fix sonarlint xml path for UT --- .../Helpers/SonarLintXmlReader.cs | 11 +++++------ .../SonarLint.xml.bak | 13 ------------- .../PropertiesCSharpTrueVbnetFalse/SonarLint.xml | 0 3 files changed, 5 insertions(+), 19 deletions(-) delete mode 100644 analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml.bak rename analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/{ => SonarLintXml}/PropertiesCSharpTrueVbnetFalse/SonarLint.xml (100%) diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs index 706fff853ea..b5577146718 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs @@ -35,16 +35,16 @@ public class SonarLintXmlReader public bool IgnoreHeaderComments(string language) => language switch { - LanguageNames.CSharp => ReadBoolean(ReadProperty("sonar.cs.ignoreHeaderComments")), - LanguageNames.VisualBasic => ReadBoolean(ReadProperty("sonar.vbnet.ignoreHeaderComments")), + LanguageNames.CSharp => ReadBoolean(ReadSettingsProperty("sonar.cs.ignoreHeaderComments")), + LanguageNames.VisualBasic => ReadBoolean(ReadSettingsProperty("sonar.vbnet.ignoreHeaderComments")), _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") }; public bool AnalyzeGeneratedCode(string language) => language switch { - LanguageNames.CSharp => ReadBoolean(ReadProperty("sonar.cs.analyzeGeneratedCode")), - LanguageNames.VisualBasic => ReadBoolean(ReadProperty("sonar.vbnet.analyzeGeneratedCode")), + LanguageNames.CSharp => ReadBoolean(ReadSettingsProperty("sonar.cs.analyzeGeneratedCode")), + LanguageNames.VisualBasic => ReadBoolean(ReadSettingsProperty("sonar.vbnet.analyzeGeneratedCode")), _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") }; @@ -69,8 +69,7 @@ language switch private List parametrizedRules; public List ParametrizedRules => parametrizedRules ??= ReadRuleParameters(); - public SonarLintXmlReader(SourceText sonarLintXml, string language) - { + public SonarLintXmlReader(SourceText sonarLintXml) => this.sonarLintXml = sonarLintXml == null ? SonarLintXml.Empty : ParseContent(sonarLintXml); private static SonarLintXml ParseContent(SourceText sonarLintXml) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml.bak b/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml.bak deleted file mode 100644 index 987922377e6..00000000000 --- a/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml.bak +++ /dev/null @@ -1,13 +0,0 @@ - - - - - sonar.cs.ignoreHeaderComments - true - - - sonar.vbnet.ignoreHeaderComments - false - - - diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml b/analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/SonarLintXml/PropertiesCSharpTrueVbnetFalse/SonarLint.xml similarity index 100% rename from analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/PropertiesCSharpTrueVbnetFalse/SonarLint.xml rename to analyzers/tests/SonarAnalyzer.UnitTest/ResourceTests/SonarLintXml/PropertiesCSharpTrueVbnetFalse/SonarLint.xml From afc39aab81a5d78da345cd834ec86731e8b1cb2f Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Tue, 14 Mar 2023 15:39:14 +0100 Subject: [PATCH 05/12] Fix path in UT --- .../SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs index ed2fdfab7ab..bc6df07f0ca 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs @@ -75,7 +75,7 @@ public void SonarLintXmlReader_PartiallyMissingProperties_ExpectedAndDefaultValu [TestMethod] public void SonarLintXmlReader_PropertiesCSharpTrueVBNetFalse_ExpectedValues() { - var sut = CreateSonarLintXmlReader("ResourceTests\\PropertiesCSharpTrueVbnetFalse\\SonarLint.xml"); + var sut = CreateSonarLintXmlReader("ResourceTests\\SonarLintXml\\PropertiesCSharpTrueVbnetFalse\\SonarLint.xml"); sut.IgnoreHeaderComments(LanguageNames.CSharp).Should().BeTrue(); sut.IgnoreHeaderComments(LanguageNames.VisualBasic).Should().BeFalse(); sut.AnalyzeGeneratedCode(LanguageNames.CSharp).Should().BeTrue(); From a9fd43e335381966d2db7454820aff637ae37ac2 Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Wed, 15 Mar 2023 12:06:39 +0100 Subject: [PATCH 06/12] apply comments --- .../Helpers/SonarLintXmlReader.cs | 12 ++++++++---- ...SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs | 2 +- .../Helpers/SonarLintXmlReaderTest.cs | 11 ++--------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs index b5577146718..8064f017598 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs @@ -32,19 +32,23 @@ public class SonarLintXmlReader private readonly SonarLintXml sonarLintXml; + private bool? ignoreHeaderCommentsCS; + private bool? ignoreHeaderCommentsVB; public bool IgnoreHeaderComments(string language) => language switch { - LanguageNames.CSharp => ReadBoolean(ReadSettingsProperty("sonar.cs.ignoreHeaderComments")), - LanguageNames.VisualBasic => ReadBoolean(ReadSettingsProperty("sonar.vbnet.ignoreHeaderComments")), + LanguageNames.CSharp => ignoreHeaderCommentsCS ??= ReadBoolean(ReadSettingsProperty("sonar.cs.ignoreHeaderComments")), + LanguageNames.VisualBasic => ignoreHeaderCommentsVB ??= ReadBoolean(ReadSettingsProperty("sonar.vbnet.ignoreHeaderComments")), _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") }; + private bool? analyzeGeneratedCodeCS; + private bool? analyzeGeneratedCodeVB; public bool AnalyzeGeneratedCode(string language) => language switch { - LanguageNames.CSharp => ReadBoolean(ReadSettingsProperty("sonar.cs.analyzeGeneratedCode")), - LanguageNames.VisualBasic => ReadBoolean(ReadSettingsProperty("sonar.vbnet.analyzeGeneratedCode")), + LanguageNames.CSharp => analyzeGeneratedCodeCS ??= ReadBoolean(ReadSettingsProperty("sonar.cs.analyzeGeneratedCode")), + LanguageNames.VisualBasic => analyzeGeneratedCodeVB ??= ReadBoolean(ReadSettingsProperty("sonar.vbnet.analyzeGeneratedCode")), _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") }; diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs index c667b8898e2..0b0b23d315a 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs @@ -454,7 +454,7 @@ private static void VerifyEmpty(string fileName, string snippet, DiagnosticAnaly { LanguageNames.CSharp => builder.WithLanguageVersion(Microsoft.CodeAnalysis.CSharp.LanguageVersion.Latest), LanguageNames.VisualBasic => builder.WithLanguageVersion(Microsoft.CodeAnalysis.VisualBasic.LanguageVersion.Latest), - _ => throw new UnexpectedLanguageException(language) + _ => throw new UnexpectedLanguageException(language.LanguageName) }; builder.VerifyNoIssueReported(); } diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs index bc6df07f0ca..f6e0960f73d 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs @@ -105,15 +105,8 @@ public void SonarLintXmlReader_PropertiesCSharpTrueVBNetFalse_ExpectedValues() public void SonarLintXmlReader_LanguageDoesNotExist_Throws() { var sut = CreateSonarLintXmlReader($"ResourceTests\\SonarLintXml\\All_Properties_cs\\SonarLint.xml"); - sut.Invoking(x => x.IgnoreHeaderComments("fsharp")) - .Should() - .Throw() - .WithMessage("Language 'fsharp' is not supported."); - - sut.Invoking(x => x.AnalyzeGeneratedCode("fsharp")) - .Should() - .Throw() - .WithMessage("Language 'fsharp' is not supported."); + sut.Invoking(x => x.IgnoreHeaderComments(LanguageNames.FSharp)).Should().Throw().WithMessage("Language 'F#' is not supported."); + sut.Invoking(x => x.AnalyzeGeneratedCode(LanguageNames.FSharp)).Should().Throw().WithMessage("Language 'F#' is not supported."); } private static void CheckSonarLintXmlReaderDefaultValues(SonarLintXmlReader sut) From 839d241b1349f22b4d6eeebaca8992cdcf55561f Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Wed, 15 Mar 2023 14:22:41 +0100 Subject: [PATCH 07/12] refactor UnexpectedLanguageException ctor --- .../Common/UnexpectedLanguageException.cs | 2 +- .../src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs | 4 ++-- .../SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs index c87e897a544..06910ade7ef 100644 --- a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs +++ b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs @@ -24,6 +24,6 @@ public sealed class UnexpectedLanguageException : Exception { public UnexpectedLanguageException(AnalyzerLanguage language) : base($"Unexpected language: {language}") { } - public UnexpectedLanguageException(string message) : base(message) { } + public UnexpectedLanguageException(string language) : base($"Unexpected language: {language}") { } } } diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs index 8064f017598..77cfddc9c1e 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/SonarLintXmlReader.cs @@ -39,7 +39,7 @@ language switch { LanguageNames.CSharp => ignoreHeaderCommentsCS ??= ReadBoolean(ReadSettingsProperty("sonar.cs.ignoreHeaderComments")), LanguageNames.VisualBasic => ignoreHeaderCommentsVB ??= ReadBoolean(ReadSettingsProperty("sonar.vbnet.ignoreHeaderComments")), - _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") + _ => throw new UnexpectedLanguageException(language) }; private bool? analyzeGeneratedCodeCS; @@ -49,7 +49,7 @@ language switch { LanguageNames.CSharp => analyzeGeneratedCodeCS ??= ReadBoolean(ReadSettingsProperty("sonar.cs.analyzeGeneratedCode")), LanguageNames.VisualBasic => analyzeGeneratedCodeVB ??= ReadBoolean(ReadSettingsProperty("sonar.vbnet.analyzeGeneratedCode")), - _ => throw new UnexpectedLanguageException($"Language '{language}' is not supported.") + _ => throw new UnexpectedLanguageException(language) }; private string[] exclusions; diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs index f6e0960f73d..5caa7a84e9e 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Helpers/SonarLintXmlReaderTest.cs @@ -105,8 +105,8 @@ public void SonarLintXmlReader_PropertiesCSharpTrueVBNetFalse_ExpectedValues() public void SonarLintXmlReader_LanguageDoesNotExist_Throws() { var sut = CreateSonarLintXmlReader($"ResourceTests\\SonarLintXml\\All_Properties_cs\\SonarLint.xml"); - sut.Invoking(x => x.IgnoreHeaderComments(LanguageNames.FSharp)).Should().Throw().WithMessage("Language 'F#' is not supported."); - sut.Invoking(x => x.AnalyzeGeneratedCode(LanguageNames.FSharp)).Should().Throw().WithMessage("Language 'F#' is not supported."); + sut.Invoking(x => x.IgnoreHeaderComments(LanguageNames.FSharp)).Should().Throw().WithMessage("Unexpected language: F#"); + sut.Invoking(x => x.AnalyzeGeneratedCode(LanguageNames.FSharp)).Should().Throw().WithMessage("Unexpected language: F#"); } private static void CheckSonarLintXmlReaderDefaultValues(SonarLintXmlReader sut) From 163ababa39c7babf2ce0c35710eff3d997cf8134 Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Wed, 15 Mar 2023 15:15:33 +0100 Subject: [PATCH 08/12] fix constructor duplication in UnexpectedLanguageException --- .../Common/UnexpectedLanguageException.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs index 06910ade7ef..fa30e41a835 100644 --- a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs +++ b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs @@ -22,8 +22,8 @@ namespace SonarAnalyzer.Common { public sealed class UnexpectedLanguageException : Exception { - public UnexpectedLanguageException(AnalyzerLanguage language) : base($"Unexpected language: {language}") { } - public UnexpectedLanguageException(string language) : base($"Unexpected language: {language}") { } + + public UnexpectedLanguageException(AnalyzerLanguage language) : this(language.LanguageName) { } } } From 897f8044a4f89dd6245f49eb08b529d93e8bd418 Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Wed, 15 Mar 2023 15:19:48 +0100 Subject: [PATCH 09/12] add more UTs for new UnexpectedLanguageException ctors --- .../Common/UnexpectedLanguageExceptionTest.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs index 99c548a1acf..ab70a1c0c2e 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs @@ -25,6 +25,14 @@ namespace SonarAnalyzer.UnitTest.Common [TestClass] public class UnexpectedLanguageExceptionTest { + [TestMethod] + public void Message_CS_String_Ctor() => + new UnexpectedLanguageException("C#").Message.Should().Be("Unexpected language: C#"); + + [TestMethod] + public void Message_VB_String_Ctor() => + new UnexpectedLanguageException("Visual Basic").Message.Should().Be("Unexpected language: Visual Basic"); + [TestMethod] public void Message_CS() => new UnexpectedLanguageException(AnalyzerLanguage.CSharp).Message.Should().Be("Unexpected language: C#"); From 7d35a6ab76082d07ad19d891e840d5fd68cce35f Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Wed, 15 Mar 2023 15:21:52 +0100 Subject: [PATCH 10/12] Revert accidental change --- .../SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs index 0b0b23d315a..c667b8898e2 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/AnalysisContext/SonarAnalysisContextBaseTest.ShouldAnalyzeTree.cs @@ -454,7 +454,7 @@ private static void VerifyEmpty(string fileName, string snippet, DiagnosticAnaly { LanguageNames.CSharp => builder.WithLanguageVersion(Microsoft.CodeAnalysis.CSharp.LanguageVersion.Latest), LanguageNames.VisualBasic => builder.WithLanguageVersion(Microsoft.CodeAnalysis.VisualBasic.LanguageVersion.Latest), - _ => throw new UnexpectedLanguageException(language.LanguageName) + _ => throw new UnexpectedLanguageException(language) }; builder.VerifyNoIssueReported(); } From 673658d6a7e66c90a4f76d567ea18c45ef8f9177 Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Wed, 15 Mar 2023 15:35:29 +0100 Subject: [PATCH 11/12] remove one UT - fix the other --- .../Common/UnexpectedLanguageExceptionTest.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs index ab70a1c0c2e..166d08a855c 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Common/UnexpectedLanguageExceptionTest.cs @@ -26,12 +26,8 @@ namespace SonarAnalyzer.UnitTest.Common public class UnexpectedLanguageExceptionTest { [TestMethod] - public void Message_CS_String_Ctor() => - new UnexpectedLanguageException("C#").Message.Should().Be("Unexpected language: C#"); - - [TestMethod] - public void Message_VB_String_Ctor() => - new UnexpectedLanguageException("Visual Basic").Message.Should().Be("Unexpected language: Visual Basic"); + public void Message_String_Ctor() => + new UnexpectedLanguageException("F#").Message.Should().Be("Unexpected language: F#"); [TestMethod] public void Message_CS() => From c1c6d499c11cfaba855ac561387d771b4f25f997 Mon Sep 17 00:00:00 2001 From: mary-georgiou-sonarsource Date: Wed, 15 Mar 2023 15:48:29 +0100 Subject: [PATCH 12/12] swap order of UnexpectedLanguageException constructors --- .../Common/UnexpectedLanguageException.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs index fa30e41a835..5585b04b6ad 100644 --- a/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs +++ b/analyzers/src/SonarAnalyzer.Common/Common/UnexpectedLanguageException.cs @@ -22,8 +22,8 @@ namespace SonarAnalyzer.Common { public sealed class UnexpectedLanguageException : Exception { - public UnexpectedLanguageException(string language) : base($"Unexpected language: {language}") { } - public UnexpectedLanguageException(AnalyzerLanguage language) : this(language.LanguageName) { } + + public UnexpectedLanguageException(string language) : base($"Unexpected language: {language}") { } } }