Intellij IDEA 13: Làm cách nào để tắt nhận xét và chuỗi cấu trúc lại?


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

Tôi đang cố gắng cấu trúc lại biến lớp value, điều này xảy ra tại chỗ. Điều đó có nghĩa là không có hộp thoại nào bật lên; Tôi nhấn enter và nó cố gắng tái cấu trúc lại toàn bộ dự án, bao gồm cả nhận xét và những gì không, bao gồm:

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

trong tệp .jsp. Đó là cách quá "thông minh" khi cố gắng cấu trúc lại các bình luận phù hợp trên toàn bộ dự án. Điều này thường gây ra nhiều rủi ro lỗi và việc tái cấu trúc trong môi trường Java không còn an toàn nữa.

Điều tương tự cũng xảy ra trong Intellij 12. Thực sự mà nói, tôi không cần Intellij khuyến nghị bất cứ điều gì được coi là không an toàn, hoặc khi không chắc nó là điều tương tự!

Tôi có thể loại trừ việc tái cấu trúc nhưng tôi không có thời gian để đánh giá năm "đề xuất" mỗi lần. Nó chỉ làm tăng khả năng xảy ra lỗi của con người: hầu hết thời gian tôi chỉ nhấn enter, và rất tiếc mọi thứ đã được cấu trúc lại.

Tái cấu trúc cũng là một vấn đề lớn trong môi trường Java khi nó đôi khi cố gắng thay thế mọi thứ trong tệp .js. Nghiêm túc mà nói, điều này phải dừng lại.

Nếu không có hộp thoại bật lên, tôi không thể bỏ chọn "chuỗi tìm kiếm". Ngay cả khi điều đó được đánh dấu, Intellij sẽ không bao giờ bao gồm các đề xuất theo mặc định, đặc biệt là khi nó nằm ngoài tệp hiện tại. Nó cũng có thể khuyên bạn nên cấu trúc lại chúng, nhưng chúng nên được loại trừ theo mặc định. Đó là, nó phải là một tính năng chọn tham gia, thay vì theo mặc định phá hủy mọi thứ.

Đây là một vấn đề nghiêm trọng về trải nghiệm người dùng với cái gọi là tái cấu trúc Intellij "thông minh" gần đây. Khi cấu trúc lại các tệp JS, tôi không muốn tìm kiếm các tệp Java cho các nhận xét hoặc chuỗi! Giai đoạn = Stage! Và ngược lại!

An toàn là trên hết! Các nhà phát triển biết họ đang làm gì sẽ tự tìm kiếm các chuỗi nếu cần. Trong một môi trường ngôn ngữ động, nó khiến Intellij không thể sử dụng được, bởi vì thường xuyên và không có bất kỳ khuôn mẫu rõ ràng nào, đôi khi việc tái cấu trúc được thực hiện, đôi khi nó thay đổi mọi thứ trong dự án và những thứ không.

Nên có một tùy chọn có nội dung "refactor chỉ liên quan đến tệp này hoặc khi được suy ra 100%!", Đặc biệt là đối với các ngôn ngữ động! Đối với các ngôn ngữ tĩnh, nó thậm chí không nên cố gắng tìm kiếm các nhận xét và chuỗi bên ngoài tệp.

Tôi không có ý định đưa nó ra công khai, nhưng tôi đã nêu vấn đề này hơn 2 năm trước trong bugtracker, nhưng không ai để ý đến.

BIÊN TẬP

Đối với những người trong số các bạn nghĩ rằng tôi có thể sẽ tiến xa, tôi chỉ thử điều này:

Với lớp này:

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

Và thêm nó vào bất kỳ lớp Java nào , chẳng hạn:

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

Khi cấu trúc lại KV.valnhư trước đây, tôi nhận được các đề xuất sau, một ENTER khỏi thảm họa và một số thứ tôi phải đánh giá và loại trừ từng cái một. Nó cần nỗ lực và vừa phiền phức vừa rủi ro. Giống như ai đó hét lên, DỪNG LẠI! Và rồi ooh, không có gì sau một phút, sự thất vọng và một bài luận dài 1000 từ (cái này).

nhập mô tả hình ảnh ở đây

Nghiêm túc mà nói, có cách nào để vô hiệu hóa loại hành vi nguy hiểm này không !? Và có lý do gì khiến điều này được bật theo mặc định không ??

CHỈNH SỬA 20200706

Điều tồi tệ tiếp tục xảy ra vào năm 2020: https://youtrack.jetbrains.com/issue/IDEA-245370


5
Intellij có đầy những thứ buộc tôi phải làm. Nếu android hỗ trợ các trình chỉnh sửa khác, tôi sẽ chuyển đổi trong tích tắc. Tôi thấy mình đang chiến đấu với biên tập viên, thay vì dành thời gian viết mã. Tôi dành thời gian ở đây để cố gắng tìm cách tắt mọi thứ. Hầu hết các trường hợp, họ không đề xuất các giải pháp. Hầu hết thời gian họ đều nói ... "TẠI SAO BẠN CỨ GHÉT TÍNH NĂNG NÀY?"
TatiOverflow

1
Ít nhất thì tính năng này phải có giới hạn độ dài tối thiểu - chẳng hạn như nếu tôi đang cấu trúc lại một biến có tên 3 chữ cái phổ biến, thì việc tìm kiếm và thay thế biến đó trong chuỗi và nhận xét theo mặc định là vô nghĩa . Chuỗi 3 chữ cái đó rất có thể tồn tại trong một chuỗi ngẫu nhiên nếu đó là một dự án lớn. Ặc.
Vicky Chijwani

1
Nó bây giờ đơn giản và đơn giản bị hỏng. Nó từng là một IDE có ý nghĩa. Không thể tắt hành vi mặc định khủng khiếp này làm cho IntelliJ trở thành một công cụ khủng khiếp để sử dụng, tôi đã vô tình tạo ra những lỗi khủng khiếp dường như không liên quan bằng cách đổi tên các biến như IntelliJ đã khiến tôi phải nhớ trong nhiều năm ... Tôi luôn quên rằng tôi có thể ' không tin tưởng vào khả năng tái cấu trúc của nó nữa -.-
yeoman

1
Hôm nay, nó đã thay đổi đường dẫn của ánh xạ Spring MVC POST vì tôi đã chuyển lớp sang một gói khác (!!!!!!!)
yeoman

1
Vâng, đây là một trong những tính năng tồi tệ nhất của intellij. Nếu tôi muốn đổi tên một lớp, tôi có thể kết thúc việc phá vỡ toàn bộ dự án nơi tên lớp đó xuất hiện trong chuỗi. Vì vậy, nếu bạn đổi tên lớp Userđể MyUsernó sẽ đổi tên tất cả mọi thứ bao gồm các file cấu hình, nhãn, url, con đường trong bản đồ các cuộc gọi còn lại ...
ACV

Câu trả lời:


99

Khi bạn nhấn Shift + F6 (Refactor Rename)hai lần, hộp thoại sẽ mở ra và bạn có thể tắt "Tìm kiếm trong nhận xét và chuỗi"


9
Nói rõ hơn đó là kích hoạt phím tắt cho "Refactor Rename" TWICE. Nó có thể là một sự kết hợp khác nhau tùy thuộc vào bản đồ phím của bạn.
Kris Erickson

4
Cảm ơn, tôi thấy rằng bạn cũng có thể vô hiệu hóa bộ tái cấu trúc tại chỗ, mặc dù nó rất hay, vì điều đó luôn cho cảm giác an toàn. Điểm chính của bài đăng của tôi là nhấn mạnh rằng nên tắt tính năng tìm kiếm nhận xét và chuỗi trên toàn cầu. Nó không có ý nghĩa gì nếu nó cố gắng thay đổi một giá trị trong một biến trong một lớp khác. Nó không thông minh. Có một vấn đề khi trí thông minh hoặc AI cho rằng bằng cách tăng khả năng đúng, bằng cách nào đó nó được phép có một khoảng sai số. Tôi muốn tái cấu trúc java nghiêm ngặt, mà nên bao gồm các file XML trừ khi toàn bộ tên gói tồn tại
mmm

1
Nhưng vì nó ghi nhớ các cài đặt, tôi không thấy vấn đề gì với nó. Bạn có thể sử dụng tính năng tái cấu trúc toàn văn đó hoặc không, tùy thuộc vào những gì bạn cần.
Meo

3
Thật không may, hộp kiểm dường như xuất hiện lại ngay bây giờ và sau đó. Có ai biết về cài đặt sẽ tắt tính năng này vĩnh viễn không? Như đã đề cập trước đây IntelliJ là quá "thông minh" vì lợi ích riêng của mình ở đây ...
Erk

@Meo nó không tôn trọng điều đó ở mọi nơi. Ngày nay, tái cấu trúc văn bản inline, incode trong javascript đang sửa đổi các giá trị và nhận xét trong mã thậm chí không có trong hàm.
mmm

8

Và có lý do gì khiến điều này được bật theo mặc định không ??

Có, có. Ngày nay, mọi người có xu hướng sử dụng quá nhiều DSL, mẫu và ngôn ngữ. Trong Java cũ đơn giản, tất cả những thứ này chủ yếu tồn tại dưới dạng chuỗi. Reflection API cũng đại diện cho tên phương thức / lớp dưới dạng một Chuỗi. Không phải bất kỳ IDE nào cũng có thể hỗ trợ và nhận ra tất cả, vì vậy tốt nhất là bạn nên cung cấp cho bạn một mạng lưới an toàn để chống lại các lỗi cấu trúc lại có thể xảy ra. Tuy nhiên, nếu bạn có phạm vi kiểm tra đơn vị tuyệt vời, thì bạn có thể an toàn ở đây.

Đối với các bình luận, chúng thường chứa các mẫu mã. Các đoạn mã này nhanh chóng trở nên lỗi thời trong quá trình đổi tên, vì vậy sẽ rất hữu ích khi IDE nhắc bạn về sự tồn tại của chúng.

Việc kiểm tra này, tất nhiên, đôi khi dẫn đến kết quả dương tính giả. Tuy nhiên, nếu bạn đang đặt tên tự giải thích mang tính mô tả cho các biến của mình (ý tôi là không phải "var" hoặc "val"), thì điều này khó có thể xảy ra. Vì vậy, IDE đang thúc đẩy bạn hướng tới một phong cách mã tốt hơn theo một cách nào đó.

Nếu bạn vẫn chưa thuyết phục, hãy làm theo lời khuyên của @Meo và tắt tính năng tìm kiếm trong chuỗi và nhận xét.


9
Vâng, đó là một gợi ý tốt. Nhưng như tôi đã nhận xét về anh ta, có một vấn đề khi trí thông minh hoặc AI cho rằng bằng cách tăng khả năng đúng, bằng cách nào đó nó được phép có một khoảng sai số. Tôi muốn cấu trúc lại java nghiêm ngặt, bao gồm các tệp XML trừ khi tồn tại toàn bộ tên gói và thậm chí sau đó, tôi muốn được thông báo. Kết quả của trình tái cấu trúc không nên liệt kê các nhận xét và chuỗi trước và nên loại trừ theo mặc định. Nó đã trở nên ít thân thiện với người dùng hơn và đòi hỏi sự tập trung của tôi buộc tôi phải nghiêng người về phía trước và căng mắt.
mmm

2
Nó giống như cố gắng gỡ xuống một số điện thoại bị nhồi nhét. Bạn có thể lặp lại số này: 392314213343234295423442 được không? Đối với tôi đó cũng là một loại nỗ lực, và chắc chắn là đối với nhiều người khác. Tôi hy vọng những người của Intellij tiếp nhận và cung cấp cho chúng tôi tùy chọn để tắt tính năng này.
mmm,

10
"Tuy nhiên, nếu bạn có phạm vi kiểm tra đơn vị xuất sắc, thì có lẽ bạn đang an toàn ở đây" - đó không phải là cái cớ để cung cấp cho chúng tôi một IDEA coi Java như một ngôn ngữ động. Nếu tôi muốn một ngôn ngữ động, tôi sẽ viết mã trong Groovy. "Nếu bạn đang đặt tên tự giải thích mang tính mô tả cho các biến của mình (ý tôi là không phải" var "hoặc" val ")" - Tuy nhiên, nguy cơ va chạm vẫn tồn tại. Chỉ cần cung cấp cho chúng tôi chế độ / tùy chọn Java "Nghiêm ngặt", như Eclipse và Intellij đã từng cung cấp.
mmm,

5
Một cú nhấp chuột sai và tôi sẽ xóa khuôn khổ của Symfony. Chúng tôi sẽ có thể 'loại trừ theo mặc định'.
Nicolas Zozol

3
Chỉ cần chạy vào điều này là tốt. Mặc định hoàn toàn nguy hiểm phải có và tôi đã mắc sai lầm khi đổi tên những thứ như 'giá trị' một vài lần và không nhận thấy ngay những thiệt hại nghiêm trọng có thể gây ra cho một dự án.
Jilles van Gurp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.