我试图在VisualStudio 2015中创建一个自定义SonarQube规则,使用Roslyn SDK生成器。
生成器工作良好,我能够将.jar文件发布到SonarQube服务器,并在日常构建中使用我的自定义规则。现在我想将规则归类为"漏洞",但它总是显示为"代码气味"。
我尝试了几种方法:
-
将DiagnosticDescriptor类的"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); } }
-
更改了生成器提供的xml模板,并使用新的xml重新生成了插件(我尝试了"SECURITY"one_answers"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>
到目前为止没有任何效果。
我使用以下配置:
- VS2015 Update 3SonarQube v. 6.1SonarLint v. 2.8
- 使用SonarQube.Roslyn.SDK v. 1.0开发的自定义c#分析器
遗憾的是,似乎还没有实现显式设置类别的能力-参见https://jira.sonarsource.com/browse/SFSRAP-48
作为一种解决方法,您可以将标记security
添加到规则中,并且由于SonarQube将标记自动转换为类别,因此规则将被归类为Vulnerabilty
。然而,在构建SonarQube规则时,SonarQube.Plugins.Roslyn.RuleGenerator
似乎没有考虑CustomTags
属性,但是将newRule.Tags = diagnostic.CustomTags?.ToArray();
添加到SonarQube.Plugins.Roslyn.RuleGenerator.GetAnalyzerRules
方法并重建sonarqube-roslyn-sdk
将完成这项工作。