提问人:mjs 提问时间:1/2/2014 最后编辑:mjs 更新时间:7/7/2020 访问量:11584
Intellij IDEA 13:如何禁用重构注释和字符串?
Intellij IDEA 13: how do I disable refactor comments and strings?
问:
public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
我正在尝试重构类变量,这发生在原地。这意味着不会弹出任何对话框;我按回车键,它试图在整个项目中重构,包括注释和其他不注释的内容,包括:value
<%--<link href="<c:url value="../core/core.css" />" />--%>
在 .jsp 文件中。这太“聪明”了,无法尝试重构与整个项目匹配的注释。这通常会导致大量的错误风险,并且在 Java 环境中重构不再安全。
同样的事情也发生在 Intellij 12 中。说真的,我不需要 Intellij 推荐任何被认为不安全的东西,或者当它不确定它是一回事时!
我可以排除重构,但我没有时间每次都评估五个“建议”。它只会增加人为错误的机会:大多数时候我只是按回车键,然后事情就会被重构。
重构也是 Java 环境中的一个主要问题,因为它有时会尝试替换 .js 文件中的内容。说真的,这必须停止。
如果没有弹出对话框,我无法取消选中“搜索字符串”。即使勾选了该选项,Intellij 也不应默认包含建议,尤其是当它位于当前文件之外时。它也可以建议重构它们,但默认情况下应排除它们。也就是说,它应该是一个选择加入的功能,而不是默认破坏所有内容。
这是最近所谓的“智能”Intellij 重构的一个严重的用户体验问题。重构 JS 文件时,我不想在 Java 文件中搜索注释或字符串!时期!反之亦然!
安全第一!知道自己在做什么的开发人员会在需要时自己搜索字符串。在动态语言环境中,它使 Intellij 无法使用,因为通常没有任何明确的模式,有时重构会通过,有时它会改变整个项目的内容等等。
应该有一个选项说,“仅相对于此文件或在 100% 推断时重构!”,特别是对于动态语言!对于静态语言,它甚至不应该尝试在文件外部查找注释和字符串。
我并不是要把它公开发布,但我在 2 多年前在 bugtracker 中提出了这个问题,但没有人注意。
编辑
对于那些认为我可能会走得更远的人,我只是尝试了一下:
使用此类:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
并将其添加到任何 Java 类中,例如:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
像以前一样重构时,我会得到以下建议,一个来自灾难的 ENTER,以及我必须一次评估和排除一个的建议。这需要努力,而且很烦人和冒险。就像有人大喊,停下!然后哦,一分钟后什么都没有,沮丧和一篇 1000 字的长文(这个)。KV.val
说真的,有没有办法禁用这种危险行为!?有什么理由默认打开??
编辑20200706
答:
当您按两次时,它会打开对话框,您可以禁用“在注释和字符串中搜索”Shift + F6 (Refactor Rename)
评论
有什么理由默认打开??
是的,有。如今,人们倾向于使用太多的 DSL、模板和语言注入。在普通的旧 Java 中,所有这些东西主要以 String 的形式存在。反射 API 还将方法/类名表示为 String。任何 IDE 都不可能支持和识别所有这些,因此最好为您提供一个安全网,防止可能的重构错误。但是,如果您有很好的单元测试覆盖率,那么您在这里可能是安全的。
至于注释,它们通常包含代码示例。这些代码块在重命名过程中会很快过时,因此当 IDE 提醒您它们的存在时会很有帮助。
当然,这种检查有时会导致误报。但是,如果您为变量提供描述性不言自明的名称(我的意思是不是“var”或“val”),则不太可能发生这种情况。因此,IDE 正在以某种方式推动您走向更好的代码风格。
如果您仍然不相信,请遵循@Meo的建议,并禁用字符串和注释中的搜索。
评论
User
MyUser