コード例 #1
0
        private void ProcessAnalyzer(DiagnosticAnalyzer analyzer, SqaleModel root)
        {
            foreach (DiagnosticDescriptor diagnostic in analyzer.SupportedDiagnostics)
            {
                SqaleDescriptor sqaleDescriptor = new SqaleDescriptor
                {
                    Remediation = new SqaleRemediation
                    {
                        RuleKey = diagnostic.Id
                    },
                    SubCharacteristic = "MAINTAINABILITY_COMPLIANCE"
                };

                sqaleDescriptor.Remediation.Properties.AddRange(new[]
                {
                    new SqaleRemediationProperty
                    {
                        Key  = "remediationFunction",
                        Text = "CONSTANT_ISSUE"
                    },
                    new SqaleRemediationProperty
                    {
                        Key   = "offset",
                        Value = this.remediationConstantValue,
                        Text  = string.Empty
                    }
                });

                root.Sqale.Add(sqaleDescriptor);
            }
        }
コード例 #2
0
        private static SqaleDescriptor GetSqaleDescriptor(string remediation, string remediationCost)
        {
            if (remediation == null)
            {
                return(null);
            }

            var sqaleDescriptor = new SqaleDescriptor();

            if (remediation == "Constant/Issue")
            {
                sqaleDescriptor.Remediation.Properties.AddRange(new[]
                {
                    new SqaleRemediationProperty
                    {
                        Key  = SqaleRemediationProperty.RemediationFunctionKey,
                        Text = SqaleRemediationProperty.ConstantRemediationFunctionValue
                    },
                    new SqaleRemediationProperty
                    {
                        Key   = SqaleRemediationProperty.OffsetKey,
                        Value = remediationCost,
                        Text  = string.Empty
                    }
                });
            }

            return(sqaleDescriptor);
        }
コード例 #3
0
        private static void GetSqale(Type analyzerType, RuleDetail ruleDetail)
        {
            var sqaleRemediation = analyzerType.GetCustomAttributes <SqaleRemediationAttribute>().FirstOrDefault();

            if (sqaleRemediation == null || sqaleRemediation is NoSqaleRemediationAttribute)
            {
                ruleDetail.SqaleDescriptor = null;
                return;
            }

            var sqaleSubCharacteristic = analyzerType.GetCustomAttributes <SqaleSubCharacteristicAttribute>().First();
            var sqaleDescriptor        = new SqaleDescriptor
            {
                SubCharacteristic = sqaleSubCharacteristic.SubCharacteristic.ToSonarQubeString()
            };
            var constantRemediation = sqaleRemediation as SqaleConstantRemediationAttribute;

            if (constantRemediation == null)
            {
                ruleDetail.SqaleDescriptor = sqaleDescriptor;
                return;
            }

            sqaleDescriptor.Remediation.Properties.AddRange(new[]
            {
                new SqaleRemediationProperty
                {
                    Key  = SqaleRemediationProperty.RemediationFunctionKey,
                    Text = SqaleRemediationProperty.ConstantRemediationFunctionValue
                },
                new SqaleRemediationProperty
                {
                    Key   = SqaleRemediationProperty.OffsetKey,
                    Value = constantRemediation.Value,
                    Text  = string.Empty
                }
            });

            ruleDetail.SqaleDescriptor = sqaleDescriptor;
        }
コード例 #4
0
        private static void GetSqale(Type analyzerType, RuleDetail ruleDetail)
        {
            var sqaleRemediation = analyzerType.GetCustomAttributes<SqaleRemediationAttribute>().FirstOrDefault();

            if (sqaleRemediation == null)
            {
                ruleDetail.SqaleDescriptor = null;
                return;
            }

            var sqaleSubCharacteristic = analyzerType.GetCustomAttributes<SqaleSubCharacteristicAttribute>().First();
            var sqaleDescriptor = new SqaleDescriptor
            {
                SubCharacteristic = sqaleSubCharacteristic.SubCharacteristic.ToSonarQubeString()
            };
            var constantRemediation = sqaleRemediation as SqaleConstantRemediationAttribute;
            if (constantRemediation == null)
            {
                ruleDetail.SqaleDescriptor = sqaleDescriptor;
                return;
            }

            sqaleDescriptor.Remediation.Properties.AddRange(new[]
            {
                new SqaleRemediationProperty
                {
                    Key = SqaleRemediationProperty.RemediationFunctionKey,
                    Text = SqaleRemediationProperty.ConstantRemediationFunctionValue
                },
                new SqaleRemediationProperty
                {
                    Key = SqaleRemediationProperty.OffsetKey,
                    Value = constantRemediation.Value,
                    Text = string.Empty
                }
            });

            ruleDetail.SqaleDescriptor = sqaleDescriptor;
        }
コード例 #5
0
        private static FullRuleDescriptor GetRuleDescriptor(Type analyzerType)
        {
            var rule = analyzerType.GetCustomAttributes <RuleAttribute>().FirstOrDefault();

            if (rule == null)
            {
                return(null);
            }

            var ruleDescriptor = new RuleDescriptor
            {
                Key                  = rule.Key,
                Title                = rule.Description,
                Severity             = rule.Severity.ToString().ToUpper(CultureInfo.InvariantCulture),
                IsActivatedByDefault = rule.IsActivatedByDefault,
                Cardinality          = rule.Template ? "MULTIPLE" : "SINGLE",
            };

            var resources = analyzerType.Assembly.GetManifestResourceNames();
            var resource  = resources.SingleOrDefault(r => r.EndsWith(
                                                          string.Format(CultureInfo.InvariantCulture, RuleDescriptionPathPattern, rule.Key),
                                                          StringComparison.OrdinalIgnoreCase));

            if (resource != null)
            {
                using (var stream = analyzerType.Assembly.GetManifestResourceStream(resource))
                    using (var reader = new StreamReader(stream))
                    {
                        ruleDescriptor.Description = reader.ReadToEnd();
                    }
            }
            var parameters = analyzerType.GetProperties()
                             .Where(p => p.GetCustomAttributes <RuleParameterAttribute>().Any());

            foreach (var ruleParameter in parameters
                     .Select(propertyInfo => propertyInfo.GetCustomAttributes <RuleParameterAttribute>().First()))
            {
                ruleDescriptor.Parameters.Add(
                    new RuleParameter
                {
                    DefaultValue = ruleParameter.DefaultValue,
                    Description  = ruleParameter.Description,
                    Key          = ruleParameter.Key,
                    Type         = ruleParameter.Type.ToSonarQubeString()
                });
            }

            var tags = analyzerType.GetCustomAttributes <TagsAttribute>().FirstOrDefault();

            if (tags != null)
            {
                ruleDescriptor.Tags.AddRange(tags.Tags);
            }

            var sqaleRemediation = analyzerType.GetCustomAttributes <SqaleRemediationAttribute>().FirstOrDefault();

            if (sqaleRemediation == null || sqaleRemediation is NoSqaleRemediationAttribute)
            {
                return(new FullRuleDescriptor
                {
                    RuleDescriptor = ruleDescriptor,
                    SqaleDescriptor = null
                });
            }

            var sqaleSubCharacteristic = analyzerType.GetCustomAttributes <SqaleSubCharacteristicAttribute>().First();
            var sqale = new SqaleDescriptor {
                SubCharacteristic = sqaleSubCharacteristic.SubCharacteristic.ToSonarQubeString()
            };
            var constant = sqaleRemediation as SqaleConstantRemediationAttribute;

            if (constant == null)
            {
                return(new FullRuleDescriptor
                {
                    RuleDescriptor = ruleDescriptor,
                    SqaleDescriptor = sqale
                });
            }

            sqale.Remediation.Properties.Add(new SqaleRemediationProperty
            {
                Key  = "remediationFunction",
                Text = "CONSTANT_ISSUE"
            });

            sqale.Remediation.Properties.Add(new SqaleRemediationProperty
            {
                Key   = "offset",
                Value = constant.Value,
                Text  = ""
            });

            sqale.Remediation.RuleKey = rule.Key;

            return(new FullRuleDescriptor
            {
                RuleDescriptor = ruleDescriptor,
                SqaleDescriptor = sqale
            });
        }