私は SonarQube プラグイン開発の初心者です。技術部門の修復が、そのルールの問題ごとに次の式で与えられるルールを作成したいと思います: dept = constant_duration * エフォートが与えられ、問題ごとに異なる場合、constant_durationがルールに指定されます。
次の RuleDefinition を作成できました。
public class SodaRuleDefinition
implements RulesDefinition
{
public static final String REPO_KEY = "soda";
public static final String SODA_METHOD_COVERAGE_KEY = "soda-method-coverage";
@Override
public void define(Context context) {
NewRepository repository = context.createRepository(REPO_KEY, Java.KEY);
repository.setName("SoDA");
repository.createRule(SODA_METHOD_COVERAGE_KEY)
.setName("SoDA aggregated method coverage")
.setMarkdownDescription("foo")
.setDebtSubCharacteristic("UNIT_LEVEL")
.setDebtRemediationFunction(
new DefaultDebtRemediationFunction(
DebtRemediationFunction.Type.LINEAR, "1h", null));
repository.done();
}
}
次に、Sensor クラスで、次のような課題を作成しました。
public class SodaCoverageSensor
implements org.sonar.api.batch.Sensor{
// ...
@Override
public void analyse(Project project, SensorContext sc) {
// ...
sc.newIssue()
.at(new DefaultIssueLocation()
.on(new DefaultInputFile(project.getKey(), resource.getPath()))
.message(String.format("Coverage (%f) is lower than %f.", entry.getValue(), limit)))
.effortToFix(1.0)
.forRule(ruleKey)
.save();
// ...
}
最後に、プラグイン クラスを介してすべてのクラスを登録し、Sonarの品質プロファイル用に SonarQube の GUI でルールを有効にします。
public class SonarQubePlugin
extends org.sonar.api.SonarPlugin{
@Override
public List getExtensions() {
return Arrays.asList(
SodaClassCoverageMetric.class,
SodaCoverageSensor.class,
SodaRuleDefinition.class
);
}
}
すべてが正常に動作し、コードが実行され (3 回確認しました)、ルールと課題が期待どおりに作成され、実行中にエラーもログ ファイルにも記録されませんでした。技術部門だけがユーザー インターフェイスに表示されません。同じタイプの他の問題を見つけましたが、問題DebtRemediationFunction.Type.LINEAR
なく動作しています。
これを乗り越える方法についての手がかり、助け、または推奨事項は非常に高く評価されています!