【问题标题】:Package names should comply with a naming convention (squid:S00120) and underscore包名称应符合命名约定 (squid:S00120) 和下划线
【发布时间】:2018-05-31 05:13:19
【问题描述】:

SonarLint 产生错误:

Package names should comply with a naming convention (squid:S00120) ... With the default regular expression ^[a-z]+(\.[a-z][a-z0-9]*)*$.

但是 JLS 允许甚至建议使用下划线。第 6.1 条。声明说,i.a.,

如果域名包含连字符或任何其他特殊字符 标识符中不允许出现(第 3.8 节),请将其转换为下划线。

我可以更改正则表达式还是必须在产品中修复它?

【问题讨论】:

  • 下划线和大写字母在包名中合法,但它们被广泛认为是不好的风格。
  • 我对禁止大写字母没有问题,但是没有下划线就不能遵守 JLS 中的另一个条款:“您通过首先拥有(或属于拥有的组织)来形成唯一的包名称一个 Internet 域名,例如 oracle.com。然后,您可以逐个组件地反转此名称,...,并将其用作您的程序包名称的前缀,使用您组织内制定的约定来进一步管理程序包名称。我的域名是 www.qsm-fss.com。所以在包名中有下划线不会是不好的风格。
  • 基于域名的包命名算法是非规范的,对吧?它在实践中被广泛违反。
  • 这不是规范,但强烈推荐,即使是 Java 9。我看不出 JLS 推荐怎么会被认为是不好的风格。
  • 我会告诉声纳人员停止执行不同于指定的约束捷豹路虎。他们这样做是 100% 错误的。

标签: java sonarlint


【解决方案1】:

考虑使用SonarQube 服务器。您可以将 SonarLint 插件连接到服务器,并在您的 IDE 中操作 SL 执行 SCA 的方式。

SQ 的一个更好的功能是能够禁用 SCA 规则并将它们从所有未来的扫描中删除。使用此功能,您可以禁用包名称规则(我也觉得这很烦人),并且不会让编辑视图混乱。

另一种选择是创建一个新规则,它将对包名称强制执行新的正则表达式约定 - 例如,允许包名称为驼峰式。

最后,正如Jonathan Rosenne 在对该问题的评论中所述,Jonathan 在此问题之后打开的包名称问题 SONARJAVA-2596 已得到修复,如here 所示。

参考:

【讨论】:

  • 敏感软件不宜使用外部服务器。
  • @JonathanRosenne :SQ 服务器是本地服务器 - 它驻留在您的私有云上​​,不会暴露在您的组织之外。只需下载 SQ 安装并在内部私有云中创建专用 SQ 服务器。
  • 很高兴知道我们是否需要它。
  • @JonathanRosenne :我强烈建议在任何组织的 CI/CD 流程中使用静态代码分析工具。由于 SQ/SL,我已经看到了多个在正式版本发布之前暴露出关键问题的示例。
  • 好吧,在查看了以下 SCA 列表之后:en.wikipedia.org/wiki/… - 我可以说我从以前没有亲自使用过的自动化和 ThreadSafe 经验中了解了一点 JTest。 JTest 之所以有趣,是因为它能够整合自动化测试和 SCA,这是协同的恕我直言。 ThreadSafe 我从在高度多线程环境中工作的朋友那里听说过,他们提到它是救命稻草。添加一个代码覆盖工具,你的 CI 应该接近完美了。
猜你喜欢
  • 2018-09-28
  • 2012-04-04
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多