2014-12-29 28 views
21

tôi cố gắng lờ đi hoặc vô hiệu hóa một số cảnh báo vô dụng trong nhật thực bởi checkstyle với chú thích @SuppressWarnings như How to disable a particular checkstyle rule for a particular line of code?Bỏ qua các cảnh báo Checkstyle với @SuppressWarnings chú thích

nhưng điều này không làm việc cho tôi.

Đây là checkstyle.xml

<module name="Checker"> 
    <property name="severity" value="warning"/> 
    <module name="SuppressWarningsFilter"/> 
    <module name="TreeWalker"> 
    <property name="tabWidth" value="4"/> 
    <module name="FileContentsHolder"/> 
    <module name="SuppressWarningsHolder"/> 
    <module name="CyclomaticComplexity"/> 
    ... 

và đây mã java:

@SuppressWarnings("checkstyle:CyclomaticComplexity") 
public void doSomeThing() { 
... 
} 

Ngoài ra thiết lập giá trị của cảnh báo cho "tất cả" @SuppressWarnings("all") hoặc @SuppressWarnings("CyclomaticComplexity"), @SuppressWarnings("cyclomaticcomplexity") là không có bất kỳ kết quả.

Tài liệu về kiểu kiểm tra kém. Một vài ý tưởng?

+0

Bạn đang sử dụng Checkstyle 5.7 hoặc cao hơn? @SuppressWarnings được hỗ trợ từ 5.7. – satellite779

+0

Tôi cũng gặp vấn đề này với Checkstyle 6.0 – Marcin

Trả lời

37

A. SuppressWarnings Lọc

Với checkstyle 6.5.0 Tôi có thể sử dụng @SuppressWarnings. Vui lòng xem xét các điểm sau:

  • Bộ lọc SuppressWarnings phải là bật trong cài đặt Kiểu kiểm tra.
  • Trong thẻ cho chú thích SuppressWarnings, bạn phải sử dụng tên của mô-đun kiểm tra trong tất cả các chữ thường.
  • Tùy chọn một tiền tố "checkstyle:" có thể được sử dụng trong thẻ.
  • Nếu chú thích không hoạt động như mong đợi, hãy thử đổi vị trí của nó. Chú thích cho mô-đun MagicNumber cần được đặt trước phương thức. Một số chú thích phải được đặt trực tiếp nơi hiển thị sự cố và các chú thích khác phải được đặt trước định nghĩa lớp.

Một số ví dụ cho các mô-đun checkstyle "MagicNumber":

trình:

@SuppressWarnings("checkstyle:magicnumber") 
public example(){ 
    int g = 5; 
} 

.

@SuppressWarnings("magicnumber") 
public example(){ 
    int g = 5; 
} 

Không làm việc:

@SuppressWarnings("MagicNumber") 
public example(){ 
    int g = 5; 
} 

.

@SuppressWarnings("magicNumber") 
public example(){   
    int g = 5; 
} 

.

public example(){ 
    @SuppressWarnings("magicnumber") 
    int g = 5; 
} 

ghi chú Hơn nữa

  • tôi nhận được một cảnh báo suppresswarnings không được hỗ trợ mà tôi vô hiệu hóa trong các ưu đãi với Java => Compiler => lỗi/cảnh báo => Chú thích => Unhandled thẻ Eclipse trong '@SuppressWarnings' ': Bỏ qua

  • Tên (như được định nghĩa trong tệp xml) của mô-đun kiểm tra tương ứng là không được hiển thị trong thông báo vi phạm bật lên khi di chuột qua vấn đề về mã. Tôi đã bật tùy chọn "bao gồm id mô-đun (nếu có) trong thông báo vi phạm" và tự thay đổi tất cả id mô-đun giống với tên mô-đun tương ứng trong tệp xml, nhưng trường hợp thấp hơn. Ví dụ: có một mô-đun < name = "AnonInnerLength" > được hiển thị trong cài đặt kiểu kiểm tra Eclipse là "Độ dài lớp bên trong ẩn danh". Mô-đun đó không có id mô-đun. Tôi đã thay đổi id module để checkstyle: anoninnerlength để làm cho nó dễ dàng hơn cho các đồng nghiệp của tôi để ngăn chặn các cảnh báo:

    < tên module = "AnonInnerLength" >
    < property name = "id" value = "checkstyle: anoninnerlength "/ >
    < mô-đun >

  • tôi sử dụng tiền tố 'checkstyle:' trong id mô-đun cũng như trong thẻ SuppressWarnings để làm cho nó rõ ràng rằng các cảnh báo không phải là một 'cảnh báo Eclipse chuẩn'. (Tiền tố tùy chọn "checkstyle:" có thể đã được sử dụng trong thẻ mà không thay đổi id mô-đun. Tuy nhiên, tiền tố sẽ không được hiển thị trong thông báo vi phạm. bao gồm tiền tố trong thẻ, quá.)

B. Suppression Comment Lọc

  • Bộ lọc checkstyle Filters => Suppression Comment Lọc sử dụng tên mô-đun vì nó được quy định trong xml tập tin.
  • Nếu bạn sử dụng tiền tố "checkstyle:", tên mô-đun cũng có thể được sử dụng trong trường hợp thấp hơn.

trình:

//CHECKSTYLE:OFF: checkstyle:magicnumber   
public example(){ 
    int g = 5; 
} 
//CHECKSTYLE:ON: checkstyle:magicnumber 

.

//CHECKSTYLE:OFF: MagicNumber   
public example(){ 
    int g = 5; 
} 
//CHECKSTYLE:ON: MagicNumber 

Không làm việc:

//CHECKSTYLE:OFF: magicnumber   
public example(){ 
    int g = 5; 
} 
//CHECKSTYLE:ON: magicnumber 

C. Ví dụ settings.xml checkstyle file:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> 


<!-- 
    Checkstyle-Configuration with module ids that can be used as  
    tags in @SuppressWarnings 
--> 

<module name="Checker"> 

    <property name="severity" value="warning"/> 

    <module name="TreeWalker"> 
    <property name="tabWidth" value="4"/> 
    <module name="FileContentsHolder"/> 
    <module name="SuppressWarningsHolder"/> 

    <module name="JavadocMethod"> 
     <property name="id" value="checkstyle:javadocmethod"/> 
     <property name="severity" value="ignore"/> 
     <property name="allowMissingParamTags" value="true"/> 
     <property name="allowMissingThrowsTags" value="true"/> 
     <property name="allowMissingReturnTag" value="true"/> 
     <property name="suppressLoadErrors" value="true"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="JavadocType"> 
     <property name="id" value="checkstyle:javadoctype"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="JavadocVariable"> 
     <property name="id" value="checkstyle:javadocvariable"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="JavadocStyle"> 
     <property name="id" value="checkstyle:javadocstyle"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="ConstantName"> 
     <property name="id" value="checkstyle:constantname"/> 
    </module> 

    <module name="LocalFinalVariableName"> 
     <property name="id" value="checkstyle:localfinalvariablename"/> 
    </module> 

    <module name="LocalVariableName"> 
     <property name="id" value="checkstyle:localvariablename"/> 
    </module> 

    <module name="MemberName"> 
     <property name="id" value="checkstyle:membername"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="MethodName"> 
     <property name="id" value="checkstyle:methodname"/> 
    </module> 

    <module name="PackageName"> 
     <property name="id" value="checkstyle:packagename"/> 
    </module> 

    <module name="ParameterName"> 
     <property name="id" value="checkstyle:parametername"/> 
    </module> 

    <module name="StaticVariableName"> 
     <property name="id" value="checkstyle:staticvariablename"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="TypeName"> 
     <property name="id" value="checkstyle:typename"/> 
    </module> 

    <module name="AvoidStarImport"> 
     <property name="id" value="checkstyle:avoidstarimport"/> 
    </module> 

    <module name="IllegalImport"> 
     <property name="id" value="checkstyle:illegalimport"/> 
    </module> 

    <module name="RedundantImport"> 
     <property name="id" value="checkstyle:redundantimport"/> 
    </module> 

    <module name="UnusedImports"> 
     <property name="id" value="checkstyle:unusedimports"/> 
    </module> 

    <module name="ParameterNumber"> 
     <property name="id" value="checkstyle:parameternumber"/> 
    </module> 

    <module name="EmptyForIteratorPad"> 
     <property name="id" value="checkstyle:emptyforiteratorpad"/> 
    </module> 

    <module name="MethodParamPad"> 
     <property name="id" value="checkstyle:methodparampad"/> 
    </module> 

    <module name="NoWhitespaceAfter"> 
     <property name="id" value="checkstyle:nowhitespaceafter"/> 
     <property name="tokens" value="BNOT,DEC,DOT,INC,LNOT,UNARY_MINUS,UNARY_PLUS"/> 
    </module> 

    <module name="NoWhitespaceBefore"> 
     <property name="id" value="checkstyle:nowhitespacebefore"/> 
    </module> 

    <module name="OperatorWrap"> 
     <property name="id" value="checkstyle:operatorwrap"/> 
     <property name="option" value="eol"/> 
    </module> 

    <module name="ParenPad"> 
     <property name="id" value="checkstyle:parenpad"/> 
    </module> 

    <module name="TypecastParenPad"> 
     <property name="id" value="checkstyle:typecastparenpad"/> 
    </module> 

    <module name="WhitespaceAfter"> 
     <property name="id" value="checkstyle:whitespaceafter"/> 
    </module> 

    <module name="WhitespaceAround"> 
     <property name="id" value="checkstyle:whitespacearound"/> 
    </module> 

    <module name="ModifierOrder"> 
     <property name="id" value="checkstyle:modifierorder"/> 
    </module> 

    <module name="RedundantModifier"> 
     <property name="id" value="checkstyle:redundantmodifier"/> 
    </module> 

    <module name="LeftCurly"> 
     <property name="id" value="checkstyle:leftcurly"/> 
    </module> 

    <module name="NeedBraces"> 
     <property name="id" value="checkstyle:needbraces"/> 
    </module> 

    <module name="RightCurly"> 
     <property name="id" value="checkstyle:rightcurly"/> 
    </module> 

    <module name="AvoidInlineConditionals"> 
     <property name="id" value="checkstyle:avoidinlineconditionals"/> 
    </module> 

    <module name="EmptyStatement"> 
     <property name="id" value="checkstyle:emptystatement"/> 
    </module> 

    <module name="HiddenField"> 
     <property name="id" value="checkstyle:hiddenfield"/> 
     <property name="tokens" value="VARIABLE_DEF"/> 
    </module> 

    <module name="IllegalInstantiation"> 
     <property name="id" value="checkstyle:illegalinstantiation"/> 
    </module> 

    <module name="InnerAssignment"> 
     <property name="id" value="checkstyle:innerassignment"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="MagicNumber"> 
     <property name="id" value="checkstyle:magicnumber"/> 
    </module> 

    <module name="MissingSwitchDefault"> 
     <property name="id" value="checkstyle:missingswitchdefault"/> 
    </module> 

    <module name="RedundantThrows"> 
     <property name="id" value="checkstyle:redundantthrows"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="SimplifyBooleanExpression"> 
     <property name="id" value="checkstyle:simplifybooleanexpression"/> 
    </module> 

    <module name="SimplifyBooleanReturn"> 
     <property name="id" value="checkstyle:simplifybooleanreturn"/> 
    </module> 

    <module name="DesignForExtension"> 
     <property name="id" value="checkstyle:designforextension"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="FinalClass"> 
     <property name="id" value="checkstyle:finalclass"/> 
    </module> 

    <module name="HideUtilityClassConstructor"> 
     <property name="id" value="checkstyle:hideutilityclassconstructor"/> 
    </module> 

    <module name="VisibilityModifier"> 
     <property name="id" value="checkstyle:visibilitymodifier"/> 
    </module> 

    <module name="ArrayTypeStyle"> 
     <property name="id" value="checkstyle:arraytypestyle"/> 
    </module> 

    <module name="UpperEll"> 
     <property name="id" value="checkstyle:upperell"/> 
    </module> 

    <module name="AnnotationUseStyle"> 
     <property name="id" value="checkstyle:annotationusestyle"/> 
    </module> 

    <module name="MissingDeprecated"> 
     <property name="id" value="checkstyle:missingdeprecated"/> 
    </module> 

    <module name="MissingOverride"> 
     <property name="id" value="checkstyle:missingoverride"/> 
    </module> 

    <module name="PackageAnnotation"> 
     <property name="id" value="checkstyle:packageannotation"/> 
    </module> 

    <module name="AbstractClassName"> 
     <property name="id" value="checkstyle:abstractclassname"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="AnonInnerLength"> 
     <property name="id" value="checkstyle:anoninnerlength"/>  
    </module> 

    <module name="ExecutableStatementCount"> 
     <property name="id" value="checkstyle:executablestatementcount"/> 
     <property name="max" value="20"/> 
     <property name="tokens" value="INSTANCE_INIT,STATIC_INIT,METHOD_DEF,CTOR_DEF"/> 
    </module> 

    <module name="LineLength"> 
     <property name="id" value="checkstyle:linelength"/> 
     <property name="max" value="120"/> 
     <property name="tabWidth" value="4"/> 
    </module> 

    <module name="MethodLength"> 
     <property name="id" value="checkstyle:methodlength"/> 
     <property name="severity" value="ignore"/> 
     <property name="max" value="20"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="OuterTypeNumber"> 
     <property name="id" value="checkstyle:outertypenumber"/> 
    </module> 

    <module name="RegexpSinglelineJava"> 
     <property name="id" value="checkstyle:regexpsinglelinejava"/> 
     <property name="format" value="^.*System.out.println.*$"/> 
     <property name="ignoreComments" value="true"/> 
    </module> 

    <module name="AvoidNestedBlocks"> 
     <property name="id" value="checkstyle:avoidnestedblocks"/> 
     <property name="allowInSwitchCase" value="true"/> 
    </module> 

    <module name="CovariantEquals"> 
     <property name="id" value="checkstyle:covariantequals"/> 
    </module> 

    <module name="DefaultComesLast"> 
     <property name="id" value="checkstyle:defaultcomeslast"/> 
    </module> 

    <module name="DeclarationOrder"> 
     <property name="id" value="checkstyle:declarationorder"/> 
    </module> 

    <module name="EqualsHashCode"> 
     <property name="id" value="checkstyle:equalshashcode"/> 
    </module> 

    <module name="ExplicitInitialization"> 
     <property name="id" value="checkstyle:explicitinitialization"/> 
    </module> 

    <module name="FallThrough"> 
     <property name="id" value="checkstyle:fallthrough"/> 
    </module> 

    <module name="IllegalCatch"> 
     <property name="id" value="checkstyle:illegalcatch"/> 
    </module> 

    <module name="IllegalThrows"> 
     <property name="id" value="checkstyle:illegalthrows"/> 
    </module> 

    <module name="MissingCtor"> 
     <property name="id" value="checkstyle:missingctor"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="ModifiedControlVariable"> 
     <property name="id" value="checkstyle:modifiedcontrolvariable"/> 
    </module> 

    <module name="MultipleStringLiterals"> 
     <property name="id" value="checkstyle:multiplestringliterals"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="MultipleVariableDeclarations"> 
     <property name="id" value="checkstyle:multiplevariabledeclarations"/> 
    </module> 

    <module name="NestedForDepth"> 
     <property name="id" value="checkstyle:nestedfordepth"/> 
     <property name="max" value="2"/> 
    </module> 

    <module name="NestedIfDepth"> 
     <property name="id" value="checkstyle:nestedifdepth"/> 
     <property name="max" value="2"/> 
    </module> 

    <module name="NestedTryDepth"> 
     <property name="id" value="checkstyle:nestedtrydepth"/> 
    </module> 

    <module name="NoClone"> 
     <property name="id" value="checkstyle:noclone"/> 
    </module> 

    <module name="NoFinalizer"> 
     <property name="id" value="checkstyle:nofinalizer"/> 
    </module> 

    <module name="ParameterAssignment"> 
     <property name="id" value="checkstyle:parameterassignment"/> 
    </module> 

    <module name="StringLiteralEquality"> 
     <property name="id" value="checkstyle:stringliteralequality"/> 
    </module> 

    <module name="OneStatementPerLine"> 
     <property name="id" value="checkstyle:onestatementperline"/> 
    </module> 

    <module name="InnerTypeLast"> 
     <property name="id" value="checkstyle:innertypelast"/> 
    </module> 

    <module name="InterfaceIsType"> 
     <property name="id" value="checkstyle:interfaceistype"/> 
    </module> 

    <module name="MutableException"> 
     <property name="id" value="checkstyle:mutableexception"/> 
    </module> 

    <module name="BooleanExpressionComplexity"> 
     <property name="id" value="checkstyle:booleanexpressioncomplexity"/> 
    </module> 

    <module name="ClassFanOutComplexity"> 
     <property name="id" value="checkstyle:classfanoutcomplexity"/> 
     <property name="max" value="10"/> 
    </module> 

    <module name="JavaNCSS"> 
     <property name="id" value="checkstyle:gavancss"/> 
     <property name="methodMaximum" value="20"/> 
    </module> 

    <module name="NPathComplexity"> 
     <property name="id" value="checkstyle:npathcomplexity"/> 
     <property name="max" value="1200"/> 
    </module> 

    <module name="TrailingComment"> 
     <property name="id" value="checkstyle:trailingcomment"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="UncommentedMain"> 
     <property name="id" value="checkstyle:uncommentedmain"/> 
    </module> 

    <module name="CyclomaticComplexity"> 
     <property name="id" value="checkstyle:cyclomaticcomplexity"/> 
     <property name="max" value="7"/> 
    </module> 

    <module name="StrictDuplicateCode"> 
     <property name="id" value="checkstyle:strictduplicatecode"/> 
     <property name="severity" value="ignore"/> 
     <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="SuppressWarnings"> 
     <property name="id" value="checkstyle:suppresswarnings"/> 
    </module> 

    </module> 



    <module name="JavadocPackage"> 
    <property name="id" value="checkstyle:javadocpackage"/> 
    <property name="severity" value="ignore"/> 
    <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 
    </module> 

    <module name="Translation"> 
     <property name="id" value="checkstyle:translation"/> 
    </module> 

    <module name="FileLength"> 
    <property name="id" value="checkstyle:filelength"/> 
    <property name="max" value="1000"/> 
    </module> 

    <module name="NewlineAtEndOfFile"> 
    <property name="id" value="checkstyle:newlineatendoffile"/> 
    <property name="fileExtensions" value="*.java"/> 
    </module> 

    <module name="SuppressWithNearbyCommentFilter"/> 

    <module name="SuppressWarningsFilter"/> 

    <module name="SuppressionCommentFilter"> 
    <metadata name="net.sf.eclipsecs.core.comment" value="Single warning"/> 
    <property name="offCommentFormat" value="CHECKSTYLE\:OFF\: ([\w\|]+)"/> 
    <property name="onCommentFormat" value="CHECKSTYLE\:ON\: ([\w\|]+)"/> 
    <property name="checkFormat" value="$1"/> 
    </module> 

</module> 
4

phiên bản checkstyle tôi là 8.1.

Nó hoạt động với cấu hình gradle như thế này:

build.gradle:

apply plugin: 'checkstyle' 

checkstyle { 
    configFile = file('config/checkstyle.xml') 
    toolVersion = '8.1' 
} 

Và bỏ qua con số kỳ diệu như thế này:

@SuppressWarnings("checkstyle:MagicNumber") 
private String f(String a) { 
    String b = a.substring(0, 7); 
    String c = a.substring(a.length() - 3); 
    return b + "-" + c; 
} 

LƯU Ý: tiền tố checkstyle: là không bắt buộc. Hy vọng điều này có thể giúp ai đó.

+0

bạn có muốn chia sẻ tệp checkstyle.xml của mình không? –

+0

@JustinTilson chắc chắn. xem gist của tôi https://gist.github.com/pengisgood/c2432403a03500cf4ec1826b85a08234 –

+0

Nội dung nào đó phải tắt trong môi trường của tôi. Tôi đã sao chép nguyên bản của cấu hình và các biện pháp ngăn chặn của tôi vẫn bị bỏ qua. Tôi đang sử dụng checkstyle 8.1 và Gradle 4.4.1. Khi bắt đầu mỗi lỗi, tôi thấy: [ant: checkstyle] [ERROR] ... Tôi không chắc chắn về cách kiến ​​đang chơi vào điều này hoặc nếu đó là vấn đề. Mã của bạn có nằm trong repo có thể truy cập công khai ở mọi nơi không? Tôi có thể sao chép nó và cố gắng chạy nó? –

Các vấn đề liên quan