Intellij IDEA 13:如何禁用重构注释和字符串?

问题描述 投票:0回答:2
public class KV<K, V> {
    public K key;
    public V value;
    public KV(K key, V value) {
        this.key = key;
        this.value = value;
    } 
}

我正在尝试重构类变量

value
,这发生在适当的位置。这意味着不会弹出任何对话框;我按 Enter 键,它会尝试重构整个项目,包括注释和不包括的内容,包括:

<%--<link href="<c:url value="../core/core.css" />" />--%>

在 .jsp 文件中。这太“聪明”了,无法尝试重构整个项目中匹配的comments。这通常会导致大量错误风险,并且 Java 环境中的重构不再安全。

同样的事情也发生在 Intellij 12 中。说真的,我不需要 Intellij 推荐任何被认为不安全的东西,或者当不确定它是同一件事时!

我可以排除重构,但我没有时间每次都评估五个“建议”。它只会增加人为错误的可能性:大多数时候我只是按回车键,哎呀事情就被重构了。

当 Java 环境有时尝试替换 .js 文件中的内容时,重构也是一个主要问题。说真的,这必须停止。

如果没有弹出对话框,我无法取消选中“搜索字符串”。即使勾选了该选项,Intellij 也应该never默认包含建议,尤其是当它位于当前文件之外时。它也可以建议重构它们,但默认情况下应排除它们。也就是说,它应该是一个选择加入的功能,而不是默认情况下破坏一切。

这是最近所谓的“智能”Intellij 重构的一个严重的用户体验问题。当重构 JS 文件时,我不想在 Java 文件中搜索注释或字符串!时期!反之亦然!

安全第一!如果需要,知道自己在做什么的开发人员将自行搜索字符串。在动态语言环境中,它使得 Intellij 无法使用,因为经常在没有任何清晰模式的情况下,有时会进行重构,有时会改变整个项目的内容,有时则不会。

应该有一个选项说:“仅相对于该文件或当 100% 推断时重构!”,特别是对于动态语言!对于静态语言,它甚至不应该尝试在文件外部查找注释和字符串。

我本来不想公开发布,但我在两年多前就在 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";
}

像以前一样重构

KV.val
时,我得到以下建议,从灾难中按回车键,以及我必须一次评估和排除一个的建议。这需要付出努力,而且很烦人和有风险。就像有人大喊,停下来!然后哦,一分钟后什么也没有,沮丧和一篇 1000 字的长文(这个)。

enter image description here

说真的,有没有办法阻止这种危险行为!?默认情况下启用此功能有什么原因吗?

编辑20200706

2020年,糟糕的事情仍在继续: https://youtrack.jetbrains.com/issue/IDEA-245370

intellij-idea
2个回答
113
投票

按如下方式重命名项目:

  1. 导航到要重命名的项目。
  2. 单击 重构 > 重命名
  3. 再次单击 重构 > 重命名(是的,两次)。

显示一个对话框。继续:

  1. 取消选中在注释和字符串中搜索
  2. 也可以取消选中搜索文本出现
  3. 单击重构

项目被重命名,不影响注释和字符串。

注意:根据您的 IDE 设置,这可以使用键盘快捷键进行。请参阅分配的热键的菜单。


7
投票

默认情况下启用此功能有什么原因吗?

是的,有。如今,人们倾向于使用太多的 DSL、模板和语言注入。在普通的旧 Java 中,所有这些东西主要以字符串的形式存在。反射 API 还将方法/类名称表示为字符串。任何 IDE 都不可能支持和识别所有这些,因此它最好为您提供一个安全网,以防止可能的重构错误。不过,如果您有出色的单元测试覆盖率,那么您在这里可能是安全的。

至于注释,它们通常包含代码示例。这些代码块在重命名期间很快就会过时,因此 IDE 提醒您它们的存在会很有帮助。

当然,这种检查有时会导致误报。但是,如果您为变量提供描述性的不言自明的名称(我的意思不是“var”或“val”),则不太可能发生这种情况。因此,IDE 在某种程度上推动您走向更好的代码风格。

如果您仍然不相信,请按照@Meo的建议并禁用字符串和评论中的搜索。

© www.soinside.com 2019 - 2024. All rights reserved.