Programing

Intellij IDEA 13 : 리팩터링 주석 및 문자열을 비활성화하려면 어떻게합니까?

lottogame 2020. 10. 6. 07:44
반응형

Intellij IDEA 13 : 리팩터링 주석 및 문자열을 비활성화하려면 어떻게합니까?


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 파일에서. 이는 전체 프로젝트에서 일치하는 주석 을 리팩토링하기에는 너무 "영리한"방법 입니다. 이로 인해 많은 버그 위험이 발생하며 Java 환경에서 리팩토링하는 것은 더 이상 안전하지 않습니다.

Intellij 12에서도 똑같은 일이 발생했습니다. 진지하게, 안전하지 않은 것으로 간주되거나 동일한 것이 확실하지 않을 때 Intellij가 필요하지 않습니다!

리팩토링을 제외 할 수는 있지만 매번 5 개의 "제안"을 평가할 시간이 없습니다. 인적 오류의 가능성이 높아집니다. 대부분의 경우 Enter 키를 누르기 만하면 상황이 리팩토링됩니다.

리팩토링은 때때로 .js 파일의 항목을 대체하려고 시도 할 때 Java 환경에서 주요 문제입니다. 진지하게, 이것은 멈춰야합니다.

팝업 대화 상자가 없으면 "검색 문자열"을 해제 할 수 없습니다. 선택되어 있더라도 Intellij는 특히 현재 파일 외부에있을 때 기본적으로 제안을 포함 해서는 안됩니다 . 리팩토링도 권장 할 수 있지만 기본적으로 제외해야합니다. 즉, 기본적으로 모든 것을 파괴하는 것이 아니라 옵트 인 기능이어야합니다.

이것은 "스마트"Intellij 리팩토링으로 불리는 최근의 심각한 사용자 경험 문제입니다. JS 파일을 리팩토링 할 때 Java 파일에서 주석이나 문자열을 검색하고 싶지 않습니다! 기간! 그 반대!

안전이 최우선입니다! 자신이하는 일을 알고있는 개발자는 필요한 경우 문자열을 직접 검색합니다. 동적 언어 환경에서는 Intellij를 사용하는 것이 불가능합니다. 왜냐하면 명확한 패턴없이 자주 리팩토링이 진행되고 때로는 프로젝트 전반에 걸쳐 변경되기 때문입니다.

특히 동적 언어의 경우 "이 파일과 관련하여 또는 100 % 추론 될 때만 리팩터링합니다!"라는 옵션이 있어야합니다! 정적 언어의 경우 파일 외부의 주석과 문자열을 찾으려고 시도하지 않아야합니다.

공개하려는 의도는 아니었지만 2 년 전에 버그 추적기에서이 문제를 제기했지만 아무도 관심을 기울이지 않았습니다.

편집하다

내가 멀리 갈 거라고 생각하시는 분들을 위해 그냥 시도해 보았습니다.

이 수업으로 :

public class KV<K, V> {
    public K key;
    public V val;
    public KV(K key, V val) {
        this.key = key;
        this.val = val;
    }
}

그리고이 추가 모든 예를 들어, 자바 클래스 :

public class CoreConfig {
    String abc = "kv.val";
    String def = "somethingElse.val";
}

KV.val이전과 같이 리팩토링 할 때 다음 권장 사항, 재해로부터의 ENTER 및 한 번에 하나씩 평가하고 제외해야하는 것을 얻습니다. 노력이 필요하고 성 가시고 위험합니다. 누군가 소리를 지르는 것과 같습니다. 그만! 그리고 우, 잠시 후 아무것도, 좌절감과 1000 개의 긴 단어 에세이 (this).

여기에 이미지 설명 입력

진지하게, 이런 종류의 위험한 행동을 비활성화하는 방법이 있습니까!? 그리고 이것이 기본적으로 켜져있는 이유가 있습니까 ??


Shift + F6 (Refactor Rename)두 번 누르면 대화 상자가 열리고 "주석 및 문자열에서 검색"을 비활성화 할 수 있습니다.


그리고 이것이 기본적으로 켜져있는 이유가 있습니까 ??

네, 있습니다. 사람들은 요즘 너무 많은 DSL, 템플릿 및 언어 삽입을 사용하는 경향이 있습니다. 평범한 오래된 Java에서는 이러한 모든 것이 주로 문자열로 존재합니다. Reflection API는 또한 메서드 / 클래스 이름을 문자열로 나타냅니다. IDE가 모두를 지원하고 인식하는 것은 불가능하므로 가능한 리팩토링 실수에 대한 안전망을 제공하는 것이 가장 좋습니다. 하지만 단위 테스트 범위가 훌륭하다면 여기에서 안전 할 것입니다.

주석은 종종 코드 샘플을 포함합니다. 이러한 코드 청크는 이름을 변경하는 동안 빠르게 폐기되므로 IDE에서 그 존재를 알려줄 때 유용합니다.

물론이 검사는 때때로 오탐을 초래합니다. 그러나 변수에 설명이 포함 된 이름 ( "var"또는 "val"이 아님을 의미)을 제공하는 경우 이런 일이 발생하지 않을 것입니다. 따라서 IDE는 어떤 식 으로든 더 나은 코드 스타일을 추구합니다.

여전히 확신이 서지 않는다면 @Meo의 조언을 따르고 문자열과 주석 검색을 비활성화하십시오.

참고 URL : https://stackoverflow.com/questions/20871171/intellij-idea-13-how-do-i-disable-refactor-comments-and-strings

반응형