使用 Roslyn SDK 生成器生成的自定义 SonarQube 规则始终具有问题类型 "Code Smell"

Custom SonarQube rules generated with Roslyn SDK Generator have always issue type "Code Smell"

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

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

我尝试了几种方法:

  1. 将 DiagnosticDescriptor class 的 "Category" 更改为 "Security"

    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 重新生成了插件(我尝试了 "SECURITY" 和 "SECURITY_COMPLIANCE"生成的 "MAINTENABILITY_COMPLIANCE")

     <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>
    

到目前为止没有任何效果。

我正在使用以下配置:

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

作为解决方法,您可以将标签 security 添加到规则中,由于 automatic conversion of tag into category in SonarQube. However it seems that SonarQube.Plugins.Roslyn.RuleGenerator is not considering the CustomTags property when building the SonarQube rule, but addition of newRule.Tags = diagnostic.CustomTags?.ToArray(); to the method SonarQube.Plugins.Roslyn.RuleGenerator.GetAnalyzerRules,规则将被归类为 Vulnerabilty,重建 sonarqube-roslyn-sdk 即可完成工作.