使用Roslyn SDK Generator生成的自定义SonarQube规则始终会发出类型" Code Smell"

时间:2016-11-16 16:18:18

标签: c# sonarqube sonarlint roslyn-code-analysis sonarlint-vs

我尝试使用Roslyn SDK Generator在VisualStudio 2015中创建自定义SonarQube规则。

生成器工作正常,我能够将.jar文件发布到SonarQube服务器,并在每日构建中使用我的自定义规则。 现在我想将规则归类为" Vulnerabilty",但它总是显示为" Code Smell"。

我尝试了几种方法:

  1. 更改了"类别" DiagnosticDescriptor类到"安全"

    private const string Category = "Security";
    
    private static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, isEnabledByDefault: true, description: Description);
    
    public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } }
    
  2. 更改了生成器提供的xml模板,并使用新的xml重新生成了插件(我尝试过&#34; SECURITY&#34;&#34; SECURITY_COMPLIANCE&#34;代替生成的&#34; ; MAINTENABILITY_COMPLIANCE&#34)

     <sqale xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <chc>
        <key>SECURITY</key>
        <chc>
          <rule-key>MyRule</rule-key>
          <prop>
            <key>remediationFunction</key>
            <txt>CONSTANT_ISSUE</txt>
          </prop>
          <prop>
            <key>offset</key>
            <txt />
            <val>15min</val>
          </prop>
        </chc>
      </chc>
    </sqale>
    
  3. 到目前为止没有任何工作。

    我使用以下配置:

    • VS2015 Update 3
    • SonarQube v.6.1
    • SonarLint v.2.8
    • 使用SonarQube.Roslyn.SDK v.1.0
    • 开发的自定义C#分析器

1 个答案:

答案 0 :(得分:1)

不幸的是,似乎尚未实现明确设置类别的能力 - 请参阅 https://jira.sonarsource.com/browse/SFSRAP-48

作为一种变通方法,您可以将标记security添加到规则中,并且由于automatic conversion of tag into category in SonarQube,规则将被归类为Vulnerabilty。但是,SonarQube.Plugins.Roslyn.RuleGenerator在构建SonarQube规则时似乎没有考虑CustomTags属性,但在方法SonarQube.Plugins.Roslyn.RuleGenerator.GetAnalyzerRules中添加newRule.Tags = diagnostic.CustomTags?.ToArray();并重建sonarqube-roslyn-sdk将会做好这份工作。