springboot~spring-javaformat插件惹的祸

起因

我们在写代码时,有时间代码过高,尤其是stream流的时间,可能有多个map,filter,sort组成,这样我们更希望看到的是一种可读性更好的风格

  • 我的代码是这样的
  • 于是我手动将map进行了换行,想让代码更清晰一些
  • 我编码之后,添加了手动换行,我习惯上会进行代码统一格式化,idea里的ctrl+alt+L,这时,我发现我的换行没了,又回去了
  • 于是我问了chatgpt,是否是自己配置的原因
在 IntelliJ IDEA 中手动修改代码对齐并按回车换行后,如果在进行自动格式化后发现修改的部分被恢复,这可能是由于以下几种情况导致的:

1. 自动格式化设置:检查你的 IntelliJ IDEA 的自动格式化设置,确保它与你期望的格式化风格一致。你可以在 "Preferences"(或 "Settings")菜单中的 "Editor" -> "Code Style" 下找到相应的设置。确保选择了适合你的编码风格的选项,并且没有启用不希望的格式化功能(例如,"Reformat on file save")。

2. 代码风格设置:如果你手动修改的代码与当前项目的代码风格设置不一致,自动格式化可能会覆盖你的更改。在 "Preferences"(或 "Settings")菜单中的 "Editor" -> "Code Style" 中,选择适合你的项目的代码风格,并确保与你手动修改的代码一致。

3. 编辑器行为设置:在 IntelliJ IDEA 的 "Preferences"(或 "Settings")菜单中,检查 "Editor" -> "General" -> "Smart Keys" 设置。有些选项,如 "Reformat block on typing '}'" 或 "Keep when formatting",可能会影响自动格式化后的代码。

4. 版本控制:如果你的项目使用了版本控制系统(如 Git),在进行提交或拉取操作时,IntelliJ IDEA 可能会根据版本控制的规则自动格式化代码。这可能导致你手动修改的部分被恢复为代码库中的规范格式。

请检查上述设置,并根据你的需求进行适当的调整,以确保代码格式化的行为与你期望的一致。如果问题仍然存在,请提供更多的上下文信息,例如你手动修改的代码示例和你的自动格式化设置,以便更好地帮助你解决问题。
  • 最后,我想起来,我使用了spring格式统一的代码格式插件spring-javaformat,这个插件有两个时机会触发:
    • build项目时,会通过spring-javaformat去检查你的代码格式,不符合要求会提示你
    • 在编辑单个文件时,使用ctrl+alt+L进行代码格式化时,这个插件也会把你代码更新成符合它的格式
  • 我把这个插件删除后,再执行一下格式化,问题就解决了,不过,我最后还是把spring-javaformat插件装上了,因为这是一种统一的风格,我们应该去适应它和遵守它,因为它是一个标准化的方案
    <build>
        <plugins>
            <!--代码格式插件,默认使用spring 规则 ./mvnw spring-javaformat:apply
            在进行ctrl+alt+L组合键进行代码格式化时,样式也会生效的 -->
            <plugin>
                <groupId>io.spring.javaformat</groupId>
                <artifactId>spring-javaformat-maven-plugin</artifactId>
                <version>${spring.checkstyle.plugin}</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <inherited>true</inherited>
                        <goals>
                            <goal>validate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>