コード例 #1
0
        private static PropertyAccessContext CreateContext <TSyntaxNodeType>(string testInput, string propertyName, AnalyzerLanguage language) where TSyntaxNodeType : SyntaxNode
        {
            var testCode   = new SnippetCompiler(testInput, false, language);
            var expression = testCode.GetNodes <TSyntaxNodeType>().First();

            return(new PropertyAccessContext(expression, propertyName, testCode.SemanticModel));
        }
コード例 #2
0
ファイル: MetricsTest.cs プロジェクト: lukas-ais/sonar-csharp
 private static FileComments CommentsWithHeaders(AnalyzerLanguage language, string text)
 {
     return(MetricsFor(language, text).GetComments(false));
 }
コード例 #3
0
ファイル: MetricsTest.cs プロジェクト: lukas-ais/sonar-csharp
 private static int Statements(AnalyzerLanguage language, string text) => MetricsFor(language, text).StatementCount;
コード例 #4
0
 private static ICollection <int> ExecutableLines(AnalyzerLanguage language, string text) =>
 MetricsFor(language, text).ExecutableLines;
コード例 #5
0
 public QualityProfileRoot(AnalyzerLanguage language)
 {
     Rules    = new List <QualityProfileRuleDescriptor>();
     Language = language.ToString();
     Name     = "Sonar way";
 }
コード例 #6
0
 private static int PublicUndocumentedApi(AnalyzerLanguage language, string text) => MetricsFor(language, text).PublicUndocumentedApiCount;
コード例 #7
0
 private static int Lines(AnalyzerLanguage language, string text) => MetricsFor(language, text).LineCount;
コード例 #8
0
ファイル: Program.cs プロジェクト: ozgurkayaist/sonarlint-vs
        private static void WriteQualityProfileFile(string filePath, IEnumerable <RuleDetail> ruleDetails, AnalyzerLanguage language)
        {
            var root = new QualityProfileRoot(language);

            root.Rules.AddRange(ruleDetails
                                .Where(descriptor => descriptor.IsActivatedByDefault)
                                .Select(descriptor => new QualityProfileRuleDescriptor(language)
            {
                Key = descriptor.Key
            }));

            SerializeObjectToFile(filePath, root);
        }
コード例 #9
0
 public static IEnumerable <RuleDetail> GetAllRuleDetails(AnalyzerLanguage language)
 {
     return(new RuleFinder().GetAnalyzerTypes(language).Select(t => GetRuleDetail(t, language)));
 }
コード例 #10
0
        public void AnalyzerLanguage_Parse_Fail()
        {
            var parsed = AnalyzerLanguage.Parse("csharp");

            parsed.Should().Be(AnalyzerLanguage.CSharp);
        }
コード例 #11
0
        private static ObjectCreationContext CreateContext <TSyntaxNodeType>(string testInput, AnalyzerLanguage language) where TSyntaxNodeType : SyntaxNode
        {
            var testCode = new SnippetCompiler(testInput, true, language);
            var node     = testCode.GetNodes <TSyntaxNodeType>().First();
            var context  = new ObjectCreationContext(testCode.CreateAnalysisContext(node));

            return(context);
        }
コード例 #12
0
 private static Document CreateDocument(string path, IEnumerable <MetadataReference> additionalReferences) =>
 SolutionBuilder.Create()
 .AddProject(AnalyzerLanguage.FromPath(path))
 .AddReferences(additionalReferences)
 .AddDocument(path, true)
 .FindDocument(Path.GetFileName(path));
コード例 #13
0
ファイル: RuleTest.cs プロジェクト: louhibi177/sonar-dotnet
 private static IEnumerable <DiagnosticDescriptor> GetSupportedDiagnostics(AnalyzerLanguage language) =>
 new RuleFinder()
 .GetAnalyzerTypes(language)
 .SelectMany(type => GetSupportedDiagnostics(type));
コード例 #14
0
 public ProjectBuilder AddProject(AnalyzerLanguage language, bool createExtraEmptyFile = true)
 {
     return(AddProject(language, $"{GeneratedAssemblyName}{ProjectIds.Count}", createExtraEmptyFile));
 }
コード例 #15
0
        private static RuleDetail GetRuleDetail(RuleAttribute rule, Type analyzerType, AnalyzerLanguage language)
        {
            var resources = new ResourceManager("SonarAnalyzer.RspecStrings", analyzerType.Assembly);

            var ruleDetail = new RuleDetail
            {
                Key                  = rule.Key,
                Type                 = GetBackwardsCompatibleType(resources.GetString($"{rule.Key}_Type")),
                Title                = resources.GetString($"{rule.Key}_Title"),
                Severity             = resources.GetString($"{rule.Key}_Severity"),
                IsActivatedByDefault = bool.Parse(resources.GetString($"{rule.Key}_IsActivatedByDefault")),
                Description          = GetResourceHtml(rule, language),
                Remediation          = ToSonarQubeRemediationFunction(resources.GetString($"{rule.Key}_Remediation")),
                RemediationCost      = resources.GetString($"{rule.Key}_RemediationCost")
            };

            ruleDetail.Tags.AddRange(resources.GetString($"{rule.Key}_Tags").Split(new[] { ',' },
                                                                                   StringSplitOptions.RemoveEmptyEntries));

            GetParameters(analyzerType, ruleDetail);
            GetCodeFixNames(analyzerType, ruleDetail);

            return(ruleDetail);
        }
コード例 #16
0
 public QualityProfileRuleDescriptor(AnalyzerLanguage language)
 {
     RepositoryKey = language.RepositoryKey;
 }
コード例 #17
0
ファイル: RuleFinder.cs プロジェクト: wachulski/sonar-csharp
 public IEnumerable <Type> GetAnalyzerTypes(AnalyzerLanguage language)
 {
     return(diagnosticAnalyzers
            .Where(type => GetTargetLanguages(type).IsAlso(language)));
 }
コード例 #18
0
        private static FieldAccessContext CreateContext <TSyntaxNodeType>(string testInput, string fieldName, AnalyzerLanguage language) where TSyntaxNodeType : SyntaxNode
        {
            var testCode = new SnippetCompiler(testInput, true, language);
            var node     = testCode.GetNodes <TSyntaxNodeType>().First(x => x.ToString() == fieldName);

            return(new FieldAccessContext(testCode.CreateAnalysisContext(node), fieldName));
        }
コード例 #19
0
 private static int Complexity(AnalyzerLanguage language, string text) => MetricsFor(language, text).Complexity;
コード例 #20
0
 private static void CheckLanguageSpecificParameterlessRuleDescriptorsHaveRuleId(AnalyzerLanguage language) =>
 new RuleFinder().GetParameterlessAnalyzerTypes(language)
 .Any(at => !at.GetCustomAttributes <RuleAttribute>().Any())
 .Should()
 .BeFalse();
コード例 #21
0
 private static Distribution FunctionComplexityDistribution(AnalyzerLanguage language, string text) =>
 MetricsFor(language, text).FunctionComplexityDistribution;
コード例 #22
0
        private static InvocationContext CreateContext <TSyntaxNodeType>(string testInput, string methodName, AnalyzerLanguage language, int skip = 0) where TSyntaxNodeType : SyntaxNode
        {
            var testCode             = new SnippetCompiler(testInput, true, language);
            var invocationSyntaxNode = testCode.GetNodes <TSyntaxNodeType>().Skip(skip).First();
            var context = new InvocationContext(invocationSyntaxNode, methodName, testCode.SemanticModel);

            return(context);
        }
コード例 #23
0
 private static ISet <int> LinesOfCode(AnalyzerLanguage language, string text) => MetricsFor(language, text).CodeLines;
コード例 #24
0
        private static string GetResource(IEnumerable <string> resources, string key, AnalyzerLanguage language)
        {
            if (language == AnalyzerLanguage.CSharp)
            {
                return(resources.FirstOrDefault(r =>
                                                r.EndsWith(string.Format(CultureInfo.InvariantCulture, RuleDescriptionPathPattern, key),
                                                           StringComparison.OrdinalIgnoreCase) ||
                                                r.EndsWith(string.Format(CultureInfo.InvariantCulture, RuleDescriptionPathPattern, key + "_cs"),
                                                           StringComparison.OrdinalIgnoreCase)));
            }
            if (language == AnalyzerLanguage.VisualBasic)
            {
                return(resources.FirstOrDefault(r =>
                                                r.EndsWith(string.Format(CultureInfo.InvariantCulture, RuleDescriptionPathPattern, key),
                                                           StringComparison.OrdinalIgnoreCase) ||
                                                r.EndsWith(string.Format(CultureInfo.InvariantCulture, RuleDescriptionPathPattern, key + "_vb"),
                                                           StringComparison.OrdinalIgnoreCase)));
            }

            throw new ArgumentException("Language needs to be either C# or VB.NET", nameof(language));
        }
コード例 #25
0
        private static ElementAccessContext CreateContext <TSyntaxNodeType>(string testInput, int skip, AnalyzerLanguage language) where TSyntaxNodeType : SyntaxNode
        {
            var testCode = new SnippetCompiler(testInput, true, language);
            var node     = testCode.GetNodes <TSyntaxNodeType>().Skip(skip).First();
            var context  = new ElementAccessContext(testCode.CreateAnalysisContext(node));

            return(context);
        }
コード例 #26
0
 public static IEnumerable <RuleDetail> GetParameterlessRuleDetails(AnalyzerLanguage language)
 {
     return(new RuleFinder()
            .GetParameterlessAnalyzerTypes(language)
            .SelectMany(t => GetRuleDetailFromRuleAttributes(t, language)));
 }
コード例 #27
0
ファイル: MetricsTest.cs プロジェクト: lukas-ais/sonar-csharp
 private static int Classes(AnalyzerLanguage language, string text) => MetricsFor(language, text).ClassCount;
コード例 #28
0
 private static IEnumerable <RuleDetail> GetRuleDetailFromRuleAttributes(Type analyzerType,
                                                                         AnalyzerLanguage language)
 {
     return(analyzerType.GetCustomAttributes <RuleAttribute>()
            .Select(ruleAttribute => GetRuleDetail(ruleAttribute, analyzerType, language)));
 }
コード例 #29
0
ファイル: MetricsTest.cs プロジェクト: lukas-ais/sonar-csharp
 private static int Functions(AnalyzerLanguage language, string text) => MetricsFor(language, text).FunctionCount;
コード例 #30
0
 public ProjectBuilder AddProject(AnalyzerLanguage language, bool createExtraEmptyFile = true, OutputKind outputKind = OutputKind.DynamicallyLinkedLibrary) =>
 AddProject(language, $"{GeneratedAssemblyName}{ProjectIds.Count}", createExtraEmptyFile, outputKind);