2

我是 SonarQube 插件开发的新手。我想创建一个规则,其中针对该规则的每个问题使用以下公式给出技术部门补救措施:dept = constant_duration * effort其中为每个问题提供了不同的努力,为规则指定了constant_duration 。

我设法创建了以下规则定义:

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();

    // ...

    }

最后,我通过插件类注册了我所有的类,并在 SonarQube 的 GUI 上激活了我的规则以获取声纳方式质量配置文件。

public class SonarQubePlugin
extends org.sonar.api.SonarPlugin{

    @Override
    public List getExtensions() {
        return Arrays.asList(
                SodaClassCoverageMetric.class,
                SodaCoverageSensor.class,
                SodaRuleDefinition.class
        );
    }    
}

一切正常,我的代码已执行(我三次检查),规则和问题按预期创建,执行期间没有错误,日志文件也没有。只是技术部门没有显示在用户界面上!我发现了相同类型的其他问题DebtRemediationFunction.Type.LINEAR,它们工作得很好。

任何关于如何克服这个问题的线索、帮助或建议都非常感谢!

4

0 回答 0