【问题标题】:This sonar rule is not triggered未触发此声纳规则
【发布时间】:2019-11-20 05:42:24
【问题描述】:

我刚刚安装了最新版本的 SonarLint 并对我们的新学员的代码进行了完整的 SonarLint 分析,他将一些非静态非注入成员放入 Spring 单例中,就像在这个例子中一样:

@Controller
public class HelloWorld {

  private String name = null;

  @RequestMapping("/greet", method = GET)
  public String greet(String greetee) {

    if (greetee != null) {
      this.name = greetee;
    }

    return "Hello " + this.name;  // if greetee is null, you see the previous user's data
  }
}

https://rules.sonarsource.com/java/tag/spring/RSPEC-3749

所以我希望 SonarLint 能够检测到它,但没有(我有其他建议,但对此一无所知)。

此规则是否属于需要在某个配置中激活的特殊设置?

【问题讨论】:

    标签: java sonarqube sonarlint


    【解决方案1】:

    正如您直观地认为的那样,默认情况下,规则 squid:S3749 不是质量配置文件的一部分(通常称为 SonarWay)。因此,如果没有正确配置,它将不会在全新安装 SonarLint 时执行。

    从那里,您有两个选项来启用规则:

    • 将 SonarLint 连接到 SonarQube 实例或 SonarCloud,这将允许您自动配置和同步所有项目的质量配置文件,执行每个项目的预期规则
    • 使用最新版本的 SonarLint(我尝试使用 4.1 版的 eclipse),您应该能够直接通过插件配置启用规则,但这不会与从事该项目的其他人共享。

    请注意,遗憾的是,目前无法在 https://rules.sonarsource.com/ 上查看有关质量配置文件的信息(我现在正在提供内部反馈,以便将来可能解决此问题)

    【讨论】:

    • 好的,谢谢,这很有用,但对于像我这样的声纳新手来说可能有点轻:要选择的“质量配置文件”的名称是什么?当您可以在数百条规则的无序、未编号、未分类列表中勾选/取消勾选规则时,在 SonarLint 中选择好规则的过程是什么?
    • 默认启用的规则对应于 SonarWay 质量配置文件,如 SonarQube 实例或 SonarCloud 中所述。这些是 SonarSource 认为在所有情况下始终有效的规则。所有其他规则通常取决于上下文/项目,或者可能是有争议的。对我来说,解决这个问题的最佳方法是设置一个 SonarQube 实例,定义您自己的质量配置文件并在专用 UI​​ 中使用规则填充它,这些都是为此目的而考虑的。 SonarLint UI 仅适用于愿意启用/禁用他们知道的某些特定规则的高级用户。
    • @Tristan 你能接受我的回答吗?我对其进行了轻微编辑以使其更加明确,但我不确定该主题还有很多内容要添加。
    • 当然,您的答案很明确。我希望这个工具更像 Checkstyle。
    • 好的,Michael,现在我有时间安装了 SonarQube 服务器。我已经使用从“sonar way”复制的名为“my way”的质量配置文件创建了一个“项目”,并且我已经将我的本地项目绑定到我的 sonarqube 项目,正如你所建议的那样。我在本地启动分析,然后以“我的方式”停用一些规则并再次启动它(删除所有项目后)。结果是我的远程质量配置文件被完全忽略,停用的规则仍然被触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2023-04-02
    • 2015-07-07
    相关资源
    最近更新 更多