나는이 checkstyle의 3 개 이상의 입력 매개 변수와 클래스 메소드를 정의하는 금지 내 프로젝트에서 구성 유효성 검사 규칙을. 규칙은 대한 벌금을 작동 내 수업, 그러나 때때로 나는이 특정 규칙을 준수하지 않는 타사 클래스를 확장해야합니다.
“checkstyle”에 특정 방법을 자동으로 무시하도록 지시 할 가능성이 있습니까?
BTW, 나는 checkstyle : qulice.com 의 자체 래퍼로 끝났습니다 ( Java Code Quality의 엄격한 제어 참조 )
답변
http://checkstyle.sourceforge.net/config_filters.html#SuppressionCommentFilter 에서 supressionCommentFilter 사용을 확인 하십시오 . checkstyle.xml에 모듈을 추가해야합니다
<module name="SuppressionCommentFilter"/>
구성 할 수 있습니다. 따라서 코드에 주석을 추가하여 체크 스타일을 끄고 (다양한 수준에서) 코드에서 주석을 사용하여 다시 다시 설정할 수 있습니다. 예 :
//CHECKSTYLE:OFF
public void someMethod(String arg1, String arg2, String arg3, String arg4) {
//CHECKSTYLE:ON
더 나은 방법은 다음과 같이 조정 된 버전을 사용하는 것입니다.
<module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
<property name="checkFormat" value="$1"/>
</module>
특정 코드 줄에 대한 특정 검사를 해제 할 수 있습니다.
//CHECKSTYLE.OFF: IllegalCatch - Much more readable than catching 7 exceptions
catch (Exception e)
//CHECKSTYLE.ON: IllegalCatch
* 참고 : 또한 다음을 추가해야합니다 FileContentsHolder
.
<module name="FileContentsHolder"/>
또한보십시오
<module name="SuppressionFilter">
<property name="file" value="docs/suppressions.xml"/>
</module>
SuppressionFilter
동일한 페이지 의 섹션 아래에서 패턴 일치 자원에 대한 개별 검사를 해제 할 수 있습니다.
따라서 checkstyle.xml에있는 경우 :
<module name="ParameterNumber">
<property name="id" value="maxParameterNumber"/>
<property name="max" value="3"/>
<property name="tokens" value="METHOD_DEF"/>
</module>
다음을 사용하여 억제 xml 파일에서 끌 수 있습니다.
<suppress id="maxParameterNumber" files="YourCode.java"/>
Checkstyle 5.7에서 사용 가능한 다른 방법은 @SuppressWarnings
java 주석을 통해 위반을 억제하는 것 입니다. 이렇게하려면 구성 파일에 두 개의 새 모듈 ( SuppressWarningsFilter
및 SuppressWarningsHolder
) 을 추가해야 합니다.
<module name="Checker">
...
<module name="SuppressWarningsFilter" />
<module name="TreeWalker">
...
<module name="SuppressWarningsHolder" />
</module>
</module>
그런 다음 코드 내에서 다음을 수행 할 수 있습니다.
@SuppressWarnings("checkstyle:methodlength")
public void someLongMethod() throws Exception {
또는 여러 번 억제하는 경우 :
@SuppressWarnings({"checkstyle:executablestatementcount", "checkstyle:methodlength"})
public void someLongMethod() throws Exception {
NB : ” checkstyle:
“접두어는 선택 사항입니다 (권장). 문서에 따르면 매개 변수 이름은 모두 소문자 여야하지만 실제로는 모든 경우가 작동 함을 나타냅니다.
답변
주석을 사용하여 규칙을 선택적으로 침묵 @SuppressWarnings
시키려는 경우 이제 Checkstyle 5.7 (및 Checkstyle Maven Plugin 2.12+에서 지원)부터 주석을 사용하여 가능합니다 .
먼저 checkstyle.xml
에서 SuppressWarningsHolder
모듈을 다음 에 추가 하십시오 TreeWalker
.
<module name="TreeWalker">
<!-- Make the @SuppressWarnings annotations available to Checkstyle -->
<module name="SuppressWarningsHolder" />
</module>
다음 SuppressWarningsFilter
으로 형제를 사용하여 거기를 활성화하십시오 TreeWalker
.
<!-- Filter out Checkstyle warnings that have been suppressed with the @SuppressWarnings annotation -->
<module name="SuppressWarningsFilter" />
<module name="TreeWalker">
...
이제 특정 Checkstyle 규칙에서 제외하려는 메소드에 주석을 달 수 있습니다.
@SuppressWarnings("checkstyle:methodlength")
@Override
public boolean equals(Object obj) {
// very long auto-generated equals() method
}
checkstyle:
에 대한 인수 의 접두어 @SuppressWarnings
는 선택 사항이지만이 경고의 출처를 상기시키는 것으로 좋아합니다. 규칙 이름은 소문자 여야합니다.
마지막으로, Eclipse를 사용하는 경우 알려지지 않은 인수에 대해 불평합니다.
지원되지 않는 @SuppressWarnings ( “checkstyle : methodlength”)
원하는 경우 환경 설정에서이 Eclipse 경고를 사용하지 않을 수 있습니다.
Preferences:
Java
--> Compiler
--> Errors/Warnings
--> Annotations
--> Unhandled token in '@SuppressWarnings': set to 'Ignore'
답변
잘 작동하는 것은 개별 주석을 사용하여 감사 이벤트를 억제 하는 SuppressWithNearbyCommentFilter 입니다.
예를 들어
// CHECKSTYLE IGNORE check FOR NEXT 1 LINES
public void onClick(View view) { ... }
다음 var LINES에 대한 CHECKSTYLE IGNORE 검사가 현재 행 및 다음 var 행에 대해 지정된 검사 (총 var + 1 행)에 대한 감사를 트리거하지 않도록 필터를 구성하려면 다음을 수행하십시오.
<module name="SuppressWithNearbyCommentFilter">
<property name="commentFormat" value="CHECKSTYLE IGNORE (\w+) FOR NEXT (\d+) LINES"/>
<property name="checkFormat" value="$1"/>
<property name="influenceFormat" value="$2"/>
</module>
답변
SuppressWarningsFilter를 언급하는 모든 답변 에는 중요한 세부 사항이 없습니다. checkstyle-config.xml에 정의 된 경우 소문자 ID 만 사용할 수 있습니다. 그렇지 않으면 원래 모듈 이름을 사용해야합니다.
예를 들어, checkstyle-config.xml에 다음이있는 경우 :
<module name="NoWhitespaceBefore"/>
사용할 수 없습니다 :
@SuppressWarnings({"nowhitespacebefore"})
그러나 다음을 사용해야합니다.
@SuppressWarnings({"NoWhitespaceBefore"})
첫 번째 구문이 작동하려면 checkstyle-config.xml에 다음이 있어야합니다.
<module name="NoWhitespaceBefore">
<property name="id" value="nowhitespacebefore"/>
</module>
이것은 적어도 CheckStyle 버전 6.17에서 나를 위해 일한 것입니다.
답변
checkStyle 경고를 오류로 설정했기 때문에 위의 답변에 어려움을 겪었습니다. 작동 한 것은 SuppressionFilter : http://checkstyle.sourceforge.net/config_filters.html#SuppressionFilter
이것의 단점은 라인 범위가 별도의 suppresssions.xml 파일에 저장되어 있기 때문에 익숙하지 않은 개발자가 즉시 연결하지 못할 수 있다는 것입니다.
답변
<module name="Checker">
<module name="SuppressionCommentFilter"/>
<module name="TreeWalker">
<module name="FileContentsHolder"/>
</module>
</module>
BEGIN GENERATED CODE 행이 포함 된 주석과 END GENERATED CODE 행이 포함 된 주석 사이의 감사 이벤트를 억제하도록 필터를 구성하려면 다음을 수행하십시오.
<module name="SuppressionCommentFilter">
<property name="offCommentFormat" value="BEGIN GENERATED CODE"/>
<property name="onCommentFormat" value="END GENERATED CODE"/>
</module>
//BEGIN GENERATED CODE
@Override
public boolean equals(Object obj) { ... } // No violation events will be reported
@Override
public int hashCode() { ... } // No violation events will be reported
//END GENERATED CODE
답변
https://checkstyle.sourceforge.io/config_filters.html#SuppressionXpathFilter를 사용해 볼 수
있습니다
CLI를 -g 옵션과 함께 사용하여 Xpath 억제를 생성하십시오. 그런 다음 억제하려는 줄에 고유 한 억제 요소를 선택하십시오. 이를 억제 파일에 저장하고 위의 SuppressionXpathFilter 요소에 해당 파일 경로를 지정하십시오.
https://checkstyle.sourceforge.io/cmdline.html#Command_line_usage
개미를 사용하는 경우이 게시물을 개미 작업으로 참조하여 억제 Xpath 파일을 생성 할 수 있습니다.
https://github.com/checkstyle/checkstyle/issues/6934#issuecomment-522289083
필터 사용 방법에 대해서는이 스레드를 확인하십시오.
https://groups.google.com/forum/m/#!topic/checkstyle/F_f6R_Qk1EM