【问题标题】:Java AST traversal in Sonar in custom rule creation自定义规则创建中 Sonar 中的 Java AST 遍历
【发布时间】:2018-03-08 18:19:04
【问题描述】:

我正在尝试使用 Sonar 的 java AST api 在 Sonar 中编写新的自定义 Java 规则。但是我找不到任何用于编写新规则的全面 api 文档。

我在https://github.com/SonarSource/sonar-examples/zipball/master 中找到了一个示例,并实现了它并成功地将给定的自定义规则集成到了 Sonar 中。但由于缺乏适当的 api 或示例,我真的无法进一步编写新规则。 Maven 构建插件时出现未知错误。

例如,谁能帮我创建一个简单的规则,比如在我的代码中不使用 System.out.print 语句?非常感谢任何指向代码示例的指针。

【问题讨论】:

    标签: sonarqube


    【解决方案1】:

    虽然我,作为 sonarqube java 插件的维护者,同意应该改进自定义规则编写的文档(我们的 TODO 列表中有这个)对于 api 使用的代码示例,你可以看看 @ 987654321@

    对于检测System.out.print 语句的规则,there is already one for that 但我建议依赖语义 API(检查符号和类型)来自定义规则,而不是仅仅依赖语法。

    【讨论】:

    • 嗨@benzonica,我试图从您上面提供的代码库链接中制定我的自定义规则来避免 System.out 。只需更改 Rule 键并保持与我之前集成时相同的结构。当我尝试构建与以前相同的项目以创建自定义插件 jar 时,我遇到了这样的错误:-- 错误测试:AvoidSysoStatementCheckTest.detected:13 ╗ IllegalState 预计至少有一个问题...测试运行:8,失败:0,错误:1,跳过:0 这个错误也发生在我尝试过的其他几个规则中。我在这里错过了什么?
    • 这是一个失败的单元测试。只需阅读单元测试中的错误消息并修复它。在这里它失败了,因为在测试的源文件上没有出现问题。
    • 是的..解决了..谢谢@benzonico。但是,我现在必须实现以下规则: 1. 识别硬编码的 URL 和端口号。在 Java 代码(包括常量)中,最好将其外部化到属性文件 2. 确保异常在 catch 块中的 ERROR 级别记录的规则。 3. 识别任何记录信用卡或 SSN 号码的记录器语句。任何关于这些的指示或帮助将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多