Java groovy intelliJ“;尖括号(<;>;)";修改代码样式设置

Java groovy intelliJ“;尖括号(<;>;)";修改代码样式设置,java,intellij-idea,groovy,formatting,Java,Intellij Idea,Groovy,Formatting,我目前对codestylesettings有一个问题,即IntelliJ中的“重新格式化代码”功能 必要信息: 我正在编写groovy脚本,它使用一些Java功能(例如泛型) 似乎我的groovy版本(由于各种原因无法更改)在定义如下变量时遇到编译问题: 非工作: final List listOfMaps=a[“b”]作为列表 问题是,编译器只能正确解释最后2个结束尖括号,如果它们之间有空格 工作: final List listOfMaps=a[“b”]作为列表 这是我正在使用的groo

我目前对codestylesettings有一个问题,即IntelliJ中的“重新格式化代码”功能

必要信息:

我正在编写groovy脚本,它使用一些Java功能(例如泛型)

似乎我的groovy版本(由于各种原因无法更改)在定义如下变量时遇到编译问题:

非工作:

final List listOfMaps=a[“b”]作为列表
问题是,编译器只能正确解释最后2个结束尖括号,如果它们之间有空格

工作:

final List listOfMaps=a[“b”]作为列表
这是我正在使用的groovy版本中的一个已知错误

问题:

“重新格式化代码”功能总是删除空格,我在右尖括号之间添加了空格,以使脚本可编译

问题:

我如何教IntelliJ不要删除空格

尝试:

java文件确实存在此设置(设置->编辑器->代码样式->java->空格->内->尖括号)

导出的XML设置:

<JavaCodeStyleSettings>
<option name="SPACES_WITHIN_ANGLE_BRACKETS" value="true" />

但不适用于groovy,因此我尝试为groovy添加它,如下所示:

<codeStyleSettings language="Groovy">
<option name="SPACES_WITHIN_ANGLE_BRACKETS" value="true" />

重新格式化时,它只会冻结一分钟左右,然后再次删除空格


可能是因为groovy不知道这些尖括号,所以这里使用的是Java功能

我已经检查了反编译的源代码,它似乎不支持
Groovy
尖括号内的空格。每个格式化程序都有单独的格式化规则和配置。现有配置中没有一个可以帮助您完成任务

正如@ybedrov所提到的,您将需要使用打开一个增强请求

现有的选项对您没有帮助

正如
@daniel
所指出的,确实存在一种方法,那就是创建自己的自定义语言

但是,如果你只关心一个空间,那么在童话世界中,这种选择是存在的。我只需要一个
sed
命令就可以通过运行bash脚本来解决这个问题

$ find . -name "*.groovy" | xargs sed 's|>>|> >|g' -i

也许您可以在有问题的区域添加注释,以防止格式化程序破坏代码。例如:

final List<Map<String, Object>> listOfMaps = a["b"] as List<Map<String, Object>/**/>
final List listOfMaps=a[“b”]作为列表

假设这是可行的,它至少比坏代码好,尽管相当难看。

似乎不可能。可以在YouTrack上创建功能请求:。您是否可以尝试在\u GSTRING\u INJECTION\u大括号中添加一个
空格,\u并查看是否有帮助?价值将是true@TarunLalwani我是这样加的:没有帮助……根据其他答案,这现在是不可能的。一个潜在的解决方法是记录一个宏,该宏首先格式化代码,然后用>>替换所有>>。不过,如果您使用右班操作人员,这将不利于右班操作人员。您可以尝试将其正则化,但无法在宏中强制执行。从技术上讲,也可以为此添加一种自定义语言(可能您可以基于Groovy?):但这是一项非常重要的任务。是否有方法增强现有配置?不,这是一个封闭源代码项目,因此,除了要求他们将此作为一项功能外,您什么也做不了。自定义语言支持包括在内,但不是“半小时内自己动手”之类的项目。文档可以在这里找到:对于缺少的空间,这将是一个很大的工作:-)
$ find . -name "*.groovy" | xargs sed 's|>>|> >|g' -i
final List<Map<String, Object>> listOfMaps = a["b"] as List<Map<String, Object>/**/>