Tắt Sonar cho một số mã nhất định


164

Có thể tắt các phép đo sonar ( www.sonarsource.org ) cho các khối mã cụ thể, cái nào không muốn đo?

Một ví dụ là cảnh báo "Bảo tồn theo dõi ngăn xếp" mà Findbugs xuất ra. Khi rời khỏi máy chủ, tôi có thể chỉ muốn gửi lại tin nhắn cho khách hàng, không bao gồm ngoại lệ thực tế mà tôi vừa bắt được, nếu khách hàng không biết ngoại lệ đó (vì khách hàng không có JAR trong đó ngoại lệ được chứa ví dụ).

Câu trả lời:


70

Đây là một câu hỏi thường gặp . Bạn có thể đặt //NOSONARtrên dòng kích hoạt cảnh báo. Tôi thích sử dụng cơ chế FindBugs hơn, bao gồm thêm chú thích @SuppressFBWarnings:

@edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
    value = "NAME_OF_THE_FINDBUGS_RULE_TO_IGNORE",
    justification = "Why you choose to ignore it")

2
Đã đồng ý. Tuy nhiên, tôi không chắc liệu Sonar có giải thích chính xác @SuppressFBWarnings(được thêm vào để tránh đụng độ hay không java.lang.SuppressWarnings) và cũng bỏ qua nó.
Marcel Stor

AFAIK, Sonar sử dụng FindBugs. Vì vậy, nếu FindBugs xử lý các chú thích này, tôi sẽ không hiểu tại sao chúng không hoạt động khi chạy FindBugs thông qua Sonar. Không nên khó kiểm tra nào.
JB Nizet

4
Liên kết FAQ đã lỗi thời. Đây là Câu hỏi thường gặp
Wiredniko

11
Bạn có thể vui lòng cung cấp liên kết khác đến Câu hỏi thường gặp về SonarQube không? Tôi thấy một biểu mẫu đăng nhập thay vì FAQ
Win4ster

232

Bạn có thể chú thích một lớp hoặc một phương thức với SuppressWarnings

@java.lang.SuppressWarnings("squid:S00112")

mực: S00112 trong trường hợp này là ID vấn đề Sonar. Bạn có thể tìm thấy ID này trong UI Sonar. Đi đến vấn đề Khoan. Tìm một vấn đề bạn muốn ngăn chặn cảnh báo trên. Trong hộp vấn đề màu đỏ trong mã của bạn có liên kết Quy tắc với định nghĩa về một vấn đề nhất định. Khi bạn nhấp vào đó, bạn sẽ thấy ID ở đầu trang.


8
Tôi có thể xác nhận rằng điều này cũng hoạt động với ID quy tắc FindBugs cụ thể, vd @SuppressWarnings("findbugs:UI_INHERITANCE_UNSAFE_GETRESOURCE").
bcody

19
Vấn đề là Eclipse hiển thị một cảnh báo Unsupported @SuppressWarnings("squid:S00112"). Bạn có thể cấu hình Eclipse để bỏ qua điều này nhưng sau đó một lỗi đánh máy như trong @SuppressWarnings("uncheckedd")sẽ không được phát hiện.
Ortomala Lokni

1
Xem docs.codescan.io/hc/en-us/articles/ Khăn để tìm tài liệu trên @SuppressWarnings và Sonar.
Giàu có

89

Tôi khuyên bạn nên cố gắng ngăn chặn các cảnh báo cụ thể bằng cách sử dụng @SuppressWarnings("squid:S2078").

Để loại bỏ nhiều cảnh báo, bạn có thể làm như thế này @SuppressWarnings({"squid:S2078", "squid:S2076"})

Cũng có //NOSONARbình luận nói với SonarQube bỏ qua tất cả các lỗi cho một dòng cụ thể.

Cuối cùng, nếu bạn có quyền thích hợp cho giao diện người dùng, bạn có thể phát cờ là dương tính giả trực tiếp từ giao diện.

Lý do tại sao tôi khuyên bạn nên loại bỏ các cảnh báo cụ thể là vì đó là cách tốt hơn để chặn một vấn đề cụ thể thay vì sử dụng //NOSONARvà có nguy cơ xảy ra sự cố Sonar trong mã của bạn.

Bạn có thể đọc thêm về điều này trong FAQ

Lưu ý: Gábor Bakos đang trỏ đến Câu hỏi thường gặp cũ hơn bây giờ là 404s. Đây là kết quả google đầu tiên đối với tôi vì vậy tôi muốn giúp đỡ bất kỳ ai khác có thể có cùng câu hỏi

Chỉnh sửa: 6/30/16 SonarQube hiện được gọi là SonarLint

Trong trường hợp bạn đang tự hỏi làm thế nào để tìm số mực. Chỉ cần nhấp vào tin nhắn Sonar (ví dụ Remove this method to simply inherit it.) và vấn đề Sonar sẽ mở rộng.

Ở phía dưới bên trái, nó sẽ có số mực (ví dụ: squid:S1185Bảo trì> Dễ hiểu)

Vì vậy, sau đó bạn có thể ngăn chặn nó bằng cách @SuppressWarnings("squid:S1185")


2
Cảm ơn bạn đã gợi ý để nhận được nhiều cảnh báo khối sonar
AlexWien

1
Vấn đề khác với việc đánh dấu nó là dương tính giả trên giao diện là nếu vì lý do nào đó, dự án bị xóa và thêm lại, tất cả các cờ bạn đã đặt sẽ biến mất.
annedroiid

@nedroiid - Có cách nào nếu có thể được thực hiện tương tự trong tệp pom.xml không? Tôi đã đặt câu hỏi ở đây: stackoverflow.com/questions/57789832/ từ
Pra_A

8

Sử dụng // NOSONAR trên dòng bạn nhận được cảnh báo nếu đó là thứ bạn không thể giúp mã của mình. Nó hoạt động!


4

Tôi không thể tìm thấy số mực trong sonar 5.6, với chú thích này cũng hoạt động:

@SuppressWarnings({"pmd:AvoidCatchingGenericException", "checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.IllegalCatchCheck"})

1
squiddành cho cơ sở dữ liệu Java có nguồn gốc Sonar (SonarAnalyzer Java). pmdcheckstylelà trên các kho quy tắc khác.
Daniel C. Sobral
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.