1

嘿嘿,

我已经启动并运行了我的 sonar-kotlin-plugin。我的 RuleDefinitions 显示在规则页面上,但是在分析一些 kotlin 项目时,发现的问题没有保存。

我的传感器问题添加代码如下所示:

private fun projectIssues(detektion: Detektion, context: SensorContext) {
    val fileSystem = context.fileSystem()
    val baseDir = fileSystem.baseDir()
    val predicates = fileSystem.predicates()
    detektion.findings.forEach { _, findings ->
        findings.forEach { issue ->
            val inputFile = fileSystem.inputFile(predicates.`is`(baseDir.resolve(issue.location.file)))
            if (inputFile != null) {
                val newIssue = context.newIssue()
                        .forRule(findKey(issue.id))
                        .gap(2.0) // TODO what to write here?
                        .primaryLocation(issue, inputFile)
                println(newIssue)
                newIssue.save()
            } else {
                println("No file found for ${issue.location.file}")
            }
        }
    }
}

private fun NewIssue.primaryLocation(issue: Finding, inputFile: InputFile): NewIssue {
    val (line, _) = issue.startPosition
    val newIssueLocation = newLocation()
            .on(inputFile)
            .at(inputFile.selectLine(line))
            .message("TODO needs PR!")
    return this.at(newIssueLocation)
}

甚至println(newIssue)显示它是创建的。

我使用sonar-plugin-api version 5.6, org.sonar-gradle-plugin in version 2.5,我的声纳分布在版本中5.6.6,我使用embedded database.

我的整个代码都在这个 PRhttps://github.com/arturbosch/detekt/pull/81中。

感谢您提前提供帮助。

4

1 回答 1

1

我通过在 RulesProfile 中激活我的规则解决了我的问题:

override fun createProfile(validation: ValidationMessages): RulesProfile {
    val profile = RulesProfile.create(DETEKT_WAY, KOTLIN_KEY)
    RULE_KEYS.forEach {
        profile.activateRule(Rule.create(it.repository(), it.rule()), null)
    }
    return profile
} 
于 2017-06-28T15:25:19.297 回答