在 Checkstyle 中使用 IntelliJ 代码样式

Posted

技术标签:

【中文标题】在 Checkstyle 中使用 IntelliJ 代码样式【英文标题】:Use IntelliJ code style in Checkstyle 【发布时间】:2015-11-29 01:44:00 【问题描述】:

本质上,我想从 IntelliJ 中导出代码样式设置(默认的就可以了)并在 Checkstyle 中使用它们。 (这是针对已经设置好的 maven 构建验证类型的东西,但我们希望使用 IntelliJ 的代码样式,而不是 Sun 或 Google 的)

第一步应该是导出 IntelliJ 代码样式。似乎说起来容易做起来难。

现在,我知道在 SO 和其他地方都有很多关于此的材料,但是 我根本无法在任何地方找到代码样式 xml 文件,即使在使用“复制到项目”之后也是如此或 IntelliJ 设置代码样式对话框中的“另存为...”。

我也尝试通过 IntelliJ 文件菜单导出代码样式,但它只会导出已更改区域的代码样式(例如,将选项卡空间从 4 更改为 2,它只会导出代码样式的“OTHER_INDENT_OPTIONS”部分)。

我应该补充一点,我正在使用 IDEA 14.1.4。

是否可以导出完整的 IntelliJ 代码样式?

【问题讨论】:

我在 IntelliJ Github 上找到了 codeStyleSettings.xml。但是,它似乎并不能很好地映射到 checkstyle 正在使用的内容。我开始认为我正在输掉这场战斗。是否有任何其他“代码样式验证器”可以满足我的要求? 【参考方案1】:

不幸的是,由于(至少)三个原因,您不可能做您想做的事,前两个原因您已经提出:

    虽然可以使用 File->Settings->Code Style->Java->单击设置图标->从 Intellij IDEA 中导出代码样式文件弹出菜单,导出的 XML 文件仅包含您对默认设置所做的更改。

    这些导出设置的格式仅对 Intellij 有意义,因此即使您可以将每个 Java 代码样式设置导出到 XML 文件,您也必须大量编辑该文件以使其有意义检查样式。

    最后,请注意,Intellij 有一个公开的请求,可以完全按照您的意愿行事。见IDEA-149529:

目前缺少代码样式的导出功能。唯一有用的 供 IntelliJ 的其他用户使用或作为备份。仅导出差异 在用户定义的设置和内置默认值之间。 这使得它 很难为其他人制作匹配的样式 格式化/美化工具。

如果导出选项可以导出所有 IDEA 使用的设置。

但是,还有另一种方法。与其向 Checkstyle 提供 Intellij IDEA 文件,不如向 Intellij IDEA 提供 Checkstyle 文件...

    安装 Checkstyle 插件,然后在 Intellij IDEA 中打开两组一个或多个重复文件,一组配置为使用 IDEA 的格式,一组配置为 Checkstyle 的格式。

    反复调整 Checkstyle 设置,直到其打开的文件被格式化为符合 IDEA 格式化的相应文件。当文件集匹配时,创建一个 Checkstyle XML 规则文件。乏味,但只有一次活动。

    最后,您可以使用 Import Scheme -> CheckStyle Configuration 将自定义的 CheckStyle XML 规则文件导入 Intellij Idea,如下面的屏幕截图所示(当且仅当,您已经安装了 CheckStyle-IDEA 插件)。创建 OP 时此功能不存在。有关更多详细信息,请参阅以下错误报告:IDEA-61520 Codestyle from Checkstyle,尤其是 JetBrains 于 2016 年 2 月 8 日的回复。

另见:

Intellij IDEA 错误Configure code style from checkstyle #126

发帖IntelliJ IDEA code format from checkstyle configuration

【讨论】:

唉,我想这就是现在的答案。不过,这是不久前的事了,不再需要解决方案。我什至不记得我是如何解决这个问题的。我认为这与您的回答类似=)【参考方案2】:

我也在寻找这个问题的答案。我想你想像我一样将它添加到你的构建过程中。由于我认为强制执行无法自动化的操作没有任何价值,因此我决定(尚未实现)将样式格式化程序作为预提交挂钩(我使用 git)https://www.jetbrains.com/help/idea/command-line-formatter.html 对更改列表中的所有文件执行。我也使用默认值,这就足够了。

由于我没有任何自定义,我不知道除了 xml 中的差异之外,导出的代码样式 xml 是否会运行默认值。无论哪种方式,强制执行无法自动化的代码样式规则都是没有意义的。

【讨论】:

以上是关于在 Checkstyle 中使用 IntelliJ 代码样式的主要内容,如果未能解决你的问题,请参考以下文章

是否可以根据 IntelliJ idea 的代码样式在 checkstyle 中定义代码样式?

如何解决 Intellij Idea 的所有 checkstyle 问题?

android studio 使用checkstyle全攻略

IntelliJ IDEA 代码重新格式化不起作用

有没有办法让 IntelliJ 回缩方法声明参数?

在checkstyle中如何设置