빠르고 구성 가능하며 확장 가능하며 유연하며 아름다운 라이터. 골린트의 드롭 인 교체. Revive 사용자 정의 규칙 개발을위한 프레임 워크를 제공하고 개발 및 코드 검토 프로세스를 향상시키기위한 엄격한 사전 설정을 정의 할 수 있습니다 .
var-namingrevive 사용합니다go install github.com/mgechev/revive@latest또는 릴리스 페이지에서 릴리스 실행 파일을 가져옵니다.
다음과 함께 메인 브랜치 (마지막 커밋 포함)를 설치할 수 있습니다.
go install github.com/mgechev/revive@master revive 의 기본 동작은 추가 플래그를 제공하지 않고 golint 와 호환되므로 유일한 차이점은 더 빠른 실행입니다.
revive 값이 revive 's Linting에 사용할 규칙을 설명하는 TOML 파일에 해당 해야하는 -config 플래그를 지원합니다. 제공되지 않으면 revive 글로벌 구성 파일을 사용하려고 시도합니다 ( $HOME/revive.toml 에 위치한 것으로 가정). 그렇지 않으면 구성이없는 경우 Toml 파일이 발견되지 않으면 revive 내장 기본 줄무늬 규칙 세트를 사용합니다.
현재 저장소를 컨테이너와 공유하려면 볼륨을 장착해야합니다. BIND 마운트 DOCKER 문서를 참조하십시오
docker run -v " $( pwd ) " :/var/ < repository > ghcr.io/mgechev/revive:v1.3.7 -config /var/ < repository > /revive.toml -formatter stylish ./var/kidle/...-v 볼륨을위한 것입니다ghcr.io/mgechev/revive:v1.3.7 은 이미지 이름이고 해당 버전은 revive Command에 해당합니다.Bazel과 함께 Revive를 사용하려면 Atlassian이 유지하는 규칙을 살펴보십시오.
VScode-go에서 VSCODE 지원.
파일 감시자를 통해 골란 랜드 지원.
Linter-Revive를 통한 원자 지원.
밀도 분석/ale를 통해 VIM 지원.
let g: ale_linters = {
' go ' : [ ' revive ' ],
}null-ls.nvim을 통한 Neovim 지원.
require ( " null-ls " ). setup ({
sources = {
require ( " null-ls " ). builtins . diagnostics . revive
},
})Codeac.io- 자동화 된 코드 검토 서비스는 Github, Bitbucket 및 Gitlab (자체 호스팅)과 통합되어 기술 부채와 싸우는 데 도움이됩니다. 자동으로 회복하여 풀 수십을 확인하십시오. (오픈 소스 프로젝트 무료)
golangci-lint 의 revive 가능하게하려면 활성화 된 라이터 목록에 revive 추가해야합니다.
# golangci-lint configuration file
linters :
enable :
- revive 그런 다음 구성의 linters-settings 섹션에 항목을 추가하여 revive 구성 할 수 있습니다.
# golangci-lint configuration file
linters-settings :
revive :
ignore-generated-header : true
severity : warning
rules :
- name : atomic
- name : line-length-limit
severity : error
arguments : [80]
- name : unhandled-error
arguments : ["fmt.Printf", "myFunction"] 위의 구성은 세 가지 revive 규칙, 즉 원자 , 선 길이 제한 및 처리되지 않은 오류를 가능하게하며 마지막 두 가지에 일부 인수를 전달합니다. 이 문서의 구성 섹션은 revive 구성 방법에 대한 세부 정보를 제공합니다. revive 구성은 Toml에 있지만 golangci-lint 의 구성은 Yaml에 있습니다.
특정 구성이 제공되지 않으면 revive go-lint 와 같이 작동합니다. 즉, 모든 go-lint 규칙이 활성화됩니다 (사용 가능한 규칙 테이블 세부 사항은 go-lint 규칙이 무엇인지). 구성이 제공되면 구성의 규칙 만 활성화됩니다.
revive 다음 명령 행 매개 변수를 수락합니다.
-config [PATH] - 구성 파일의 경로는 toml 형식으로 기본적으로 $HOME/revive.toml 로 기본적으로 존재합니다.
-exclude [PATTERN] - 라인을 위해 제외 할 파일/디렉토리/패키지의 패턴. 패키지 이름 (예 : github.com/mgechev/revive )으로 Linting을 제외하려는 파일을 지정하거나 개별 파일 (예 : file.go ), 디렉토리 (예 : ./foo/... ) 또는 세 가지 조합으로 나열 할 수 있습니다. 제외 패턴이 지정되지 않으면 vendor/... 기본적으로 제외됩니다.
-formatter [NAME] - Formatter는 출력에 사용됩니다. 현재 사용 가능한 포피터는 다음과 같습니다.
default - golint 와 같은 방식으로 실패를 출력합니다.json 실패를 JSON 형식으로 출력합니다.ndjson Newline Delimited JSON (NDJSON) 형식의 스트림으로 실패를 출력합니다.friendly - 발견 될 때 실패를 출력합니다. 모든 실패의 요약을 보여줍니다.stylish - 테이블의 고장을 형식화합니다. 출력을 스트리밍하지 않으므로 다른 사람들에 비해 느린 것으로 인식 될 수 있습니다.checkstyle Java의 CheckStyle과 호환되는 XML 형식의 고장을 출력합니다. -max_open_files 최대 열린 파일 수는 동시에. 기본값으로 무제한.
-set_exit_status 종료 상태 warningCode 1 errorCode 설정하십시오.
- -version 부활 버전을 얻으십시오.
revive -config revive.toml -exclude file1.go -exclude file2.go -formatter friendly github.com/mgechev/revive package/...revive.toml 의 구성을 사용합니다revive file1.go 및 file2.go 무시합니다friendly 포맷터와 포맷됩니다github.com/mgechev/revive 분석하고 package 의 파일을 분석합니다.주석을 사용하여 전체 파일의 Linter를 비활성화하거나 다양한 줄만 비활성화 할 수 있습니다.
//revive:disable
func Public () {}
//revive:enable 위의 스 니펫은 부활 사이의 revive 비활성화합니다 revive:disable 및 revive:enable . revive:enable 나머지 파일의 Linter가 비활성화됩니다.
revive:disable-next-line 및 revive:disable-line 특정 코드 라인에서 revive 할 수 있습니다.
규칙 수준에서 동일한 작업을 수행 할 수 있습니다. 특정 규칙 만 비활성화하려면 다음을 사용할 수 있습니다.
//revive:disable:unexported-return
func Public () private {
return private
}
//revive:enable:unexported-return 이런 식으로 revive 내보내기 기능에서 수출되지 않은 유형의 대상을 반환하고 있다고 경고하지 않습니다.
예를 들어 지침에 후행 텍스트를 추가하여 라이터를 비활성화하는 이유를 문서화 할 수 있습니다.
//revive:disable Until the code is stable //revive:disable:cyclomatic High complexity score but easy to understand 또한 Linter Linter Disabling Directives를 추가하여 revive 구성 할 수도 있습니다.
[ directive . specify-disable-reason ]구성에서. 이 지침 위반의 심각도 (기본값으로 경고 )를 설정할 수 있습니다.
[ directive . specify-disable-reason ]
severity = " error " TOML 파일로 revive 구성 할 수 있습니다. 다음은 개별 속성에 대한 설명이있는 샘플 구성입니다.
# When set to false, ignores files with "GENERATED" header, similar to golint
ignoreGeneratedHeader = true
# Sets the default severity to "warning"
severity = " warning "
# Sets the default failure confidence. This means that linting errors
# with less than 0.8 confidence will be ignored.
confidence = 0.8
# Sets the error code for failures with the "error" severity
errorCode = 0
# Sets the error code for failures with severity "warning"
warningCode = 0
# Configuration of the `cyclomatic` rule. Here we specify that
# the rule should fail if it detects code with higher complexity than 10.
[ rule . cyclomatic ]
arguments = [ 10 ]
# Sets the severity of the `package-comments` rule to "error".
[ rule . package-comments ]
severity = " error " 기본적으로 revive 구성 파일에 명명 된 라인팅 규칙 만 활성화합니다. 예를 들어, 이전 구성 파일은 사이클 성 및 패키지 코멘트 라일링 규칙 만 가능 revive 합니다.
사용 가능한 모든 규칙을 활성화하려면 다음을 추가해야합니다.
enableAllRules = true이렇게하면 구성 파일에 어떤 규칙이 명명되어 있든 상관없이 사용 가능한 모든 규칙이 가능합니다.
규칙을 비활성화하려면 구성에서 비활성화 된 것으로 표시됩니다. 예를 들어:
[ rule . line-length-limit ]
Disabled = true모든 규칙을 활성화 할 때 여전히 규칙에 대한 특정 구성을 제공 할 수 있습니다. 다음 파일은 명시 적으로 비활성화 된 규칙을 제외하고 모든 규칙을 제외하고 모든 규칙을 제외하고 모든 규칙을 제외하고 모든 규칙을 제외하고 모든 규칙을 제외하고 모든 규칙을 제외하고는 모든 규칙을 제외하고 모든 규칙을 제외하고는 모든 규칙을 제외하고는 모든 규칙을 제외하고는 모든 규칙을 제외하고는 모든 규칙을 제외하고는 다음과 같이 구성됩니다.
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
# Enable all available rules
enableAllRules = true
# Disabled rules
[ rule . blank-imports ]
Disabled = true
[ rule . file-header ]
Disabled = true
[ rule . max-public-structs ]
Disabled = true
[ rule . line-length-limit ]
Disabled = true
[ rule . function-length ]
Disabled = true
[ rule . banned-characters ]
Disabled = true
# Rule tuning
[ rule . argument-limit ]
Arguments = [ 5 ]
[ rule . cyclomatic ]
Arguments = [ 10 ]
[ rule . cognitive-complexity ]
Arguments = [ 7 ]
[ rule . function-result-limit ]
Arguments = [ 3 ]
[ rule . error-strings ]
Arguments = [ " mypackage.Error " ] revive 의 기본 구성은 defaults.toml 에서 찾을 수 있습니다. 이를 통해 golint 에서 사용 가능한 모든 규칙이 가능하고 기본 구성을 사용할 수 있습니다 (즉, golint 에서 하드 코딩되는 방식).
revive -config defaults.toml github.com/mgechev/revive 이것은 configuration file defaults.toml , default Formatter를 사용하며 github.com/mgechev/revive 패키지에서 Linting을 실행합니다.
revive -config config.toml -formatter friendly github.com/mgechev/revive friendly 포맷터 인 config.toml 사용하고 github.com/mgechev/revive 패키지 위로 Linting을 실행합니다.
다음 스 니펫에는 프로젝트에서 사용할 수있는 권장 revive 구성이 포함되어 있습니다.
ignoreGeneratedHeader = false
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
[ rule . blank-imports ]
[ rule . context-as-argument ]
[ rule . context-keys-type ]
[ rule . dot-imports ]
[ rule . error-return ]
[ rule . error-strings ]
[ rule . error-naming ]
[ rule . exported ]
[ rule . increment-decrement ]
[ rule . var-naming ]
[ rule . var-declaration ]
[ rule . package-comments ]
[ rule . range ]
[ rule . receiver-naming ]
[ rule . time-naming ]
[ rule . unexported-return ]
[ rule . indent-error-flow ]
[ rule . errorf ]
[ rule . empty-block ]
[ rule . superfluous-else ]
[ rule . unused-parameter ]
[ rule . unreachable-code ]
[ rule . redefines-builtin-id ]또한 각 규칙에 대해 사용자 정의 제외를 설정할 수도 있습니다.
그것은 Global -exclude 프로그램 Arg의 대안입니다.
ignoreGeneratedHeader = false
severity = " warning "
confidence = 0.8
errorCode = 0
warningCode = 0
[ rule . blank-imports ]
Exclude =[ " **/*.pb.go " ]
[ rule . context-as-argument ]
Exclude =[ " src/somepkg/*.go " , " TEST " ]다음은 패턴 제외를 사용할 수 있습니다
src/pkg/mypkg/some.gosrc/**/*.pb.go~.(pb|auto|generated).go$TEST ( **/*_test.go 와 동일)* 및 ~ 패턴은 모든 파일을 제외합니다 (규칙을 비활성화하는 것과 동일한 효과) b. "" (빈) 패턴은 아무것도 제외하지 않습니다참고 : TOML 파일의 최상위 레벨에서 사용할 수있는
exclude엉망으로 만들지 마십시오. 즉, "파일 패턴 제외"가 아니라 "패키지 패턴 제외"를 의미합니다.
사용 가능한 모든 규칙의 목록. golint 에서 포팅 된 규칙은 변경되지 않고 golint 열에 표시됩니다.
| 이름 | 구성 | 설명 | golint | 타이핑 |
|---|---|---|---|---|
context-keys-type | N/A | context.WithValue 에서 기본 유형의 사용을 불만으로 표시합니다. | 예 | 예 |
time-equal | N/A | 평등 점검 시간을 위해 == 을 대신 time.Time.Equal != 하도록 제안합니다. | 아니요 | 예 |
time-naming | N/A | 시간 변수의 이름 지정에 관한 규칙. | 예 | 예 |
unchecked-type-assertions | N/A | 결과를 확인하지 않고 유형 어설 션을 불쾌하게합니다. | 아니요 | 예 |
var-declaration | N/A | 변수 선언에 대한 중복성을 줄입니다. | 예 | 예 |
unexported-return | N/A | 공개 반환이 수출되지 않은 유형에서 발생하는 경우 경고합니다. | 예 | 예 |
errorf | N/A | errors.New(fmt.Sprintf()) fmt.Errorf() 로 바꿔야합니다. | 예 | 예 |
blank-imports | N/A | 빈 가져 오기를 분리시킵니다 | 예 | 아니요 |
context-as-argument | N/A | context.Context 함수의 첫 번째 인수 여야합니다. | 예 | 아니요 |
dot-imports | N/A | 금지 . 수입. | 예 | 아니요 |
error-return | N/A | 오류 반환 매개 변수는 마지막이어야합니다. | 예 | 아니요 |
error-strings | []끈 | 오류 문자열 주변의 규칙. | 예 | 아니요 |
error-naming | N/A | 오류 변수 이름 지정. | 예 | 아니요 |
exported | []끈 | 수출 된 기호에 대한 이름 지정 및 댓글 규칙. | 예 | 아니요 |
if-return | N/A | 오류를 반환 할 때 중복됩니다. | 아니요 | 아니요 |
increment-decrement | N/A | i += 1 i -= 1 i++ 와 i-- 사용합니다. | 예 | 아니요 |
var-naming | 초기리스트 및 블록리스트 허용 | 이름 지정 규칙. | 예 | 아니요 |
package-comments | N/A | 주석 컨벤션 패키지. | 예 | 아니요 |
range | N/A | 컬렉션을 반복 할 때 중복 변수를 방지합니다. | 예 | 아니요 |
receiver-naming | 지도 (선택 사항) | 수신자 이름에 대한 규칙. | 예 | 아니요 |
indent-error-flow | []끈 | 중복 다른 진술을 방지합니다. | 예 | 아니요 |
argument-limit | int (기본값으로 8) | 함수가받을 수있는 최대 인수 수를 지정합니다. | 아니요 | 아니요 |
cyclomatic | int (기본값으로 10) | 최대 순환 복잡성에 대한 제한을 설정합니다. | 아니요 | 아니요 |
max-public-structs | int (기본값으로 5) | 파일의 최대 공개 구조 수. | 아니요 | 아니요 |
file-header | 문자열 (기본값으로 없음) | 각 파일이 가져야 할 헤더. | 아니요 | 아니요 |
empty-block | N/A | 빈 코드 블록에 경고합니다 | 아니요 | 예 |
superfluous-else | []끈 | 중복 indent-error-flow 방지합니다. | 아니요 | 아니요 |
confusing-naming | N/A | 자본화에 의해서만 다른 이름을 가진 방법에 대해 경고 | 아니요 | 아니요 |
get-return | N/A | 결과를 얻지 못하는 Getters에 대해 경고합니다 | 아니요 | 아니요 |
modifies-parameter | N/A | 기능 매개 변수에 대한 할당에 대해 경고합니다 | 아니요 | 아니요 |
confusing-results | N/A | 잠재적으로 혼란스러운 기능 결과를 명시하도록 제안합니다 | 아니요 | 아니요 |
deep-exit | N/A | main() 또는 init() 이외의 기능에서 프로그램 종료를 찾습니다. | 아니요 | 아니요 |
unused-parameter | N/A | 사용하지 않은 기능 매개 변수를 바꾸거나 제거하도록 제안합니다 | 아니요 | 아니요 |
unreachable-code | N/A | 도달 할 수없는 코드에 대해 경고합니다 | 아니요 | 아니요 |
add-constant | 지도 | 마법 번호와 문자열 리터럴에 상수를 사용하는 것을 제안합니다 | 아니요 | 아니요 |
flag-parameter | N/A | 제어 커플 링을 만드는 부울 매개 변수에 대해 경고합니다 | 아니요 | 아니요 |
unnecessary-stmt | N/A | 불필요한 진술을 제거하거나 단순화 할 것을 제안합니다 | 아니요 | 아니요 |
struct-tag | []끈 | json , xml , yaml 과 같은 일반적인 구조 태그 확인 | 아니요 | 아니요 |
modifies-value-receiver | N/A | 가치 통과 메소드 수신기에 대한 과제에 대해 경고합니다 | 아니요 | 예 |
constant-logical-expr | N/A | 일정한 논리 표현에 대해 경고합니다 | 아니요 | 아니요 |
bool-literal-in-expr | N/A | 논리 표현식에서 부울 리터럴을 제거 할 것을 제안합니다 | 아니요 | 아니요 |
redefines-builtin-id | N/A | 내장 식별자의 재정의에 대한 경고 | 아니요 | 아니요 |
function-result-limit | int (기본값 3) | 함수가 반환 할 수있는 최대 결과 수를 지정합니다. | 아니요 | 아니요 |
imports-blocklist | []끈 | 지정된 패키지를 가져 오는 불일치 | 아니요 | 아니요 |
range-val-in-closure | N/A | 범위 값이 Goroutine으로 발송 된 클로저에서 사용되는 경우 경고 | 아니요 | 아니요 |
range-val-address | N/A | 범위 값의 주소가 위험하게 사용되는지 경고합니다 | 아니요 | 예 |
waitgroup-by-value | N/A | Sync.WaitGroup을 취하는 함수에 대한 경고에 따라 값 매개 변수로 경고합니다 | 아니요 | 아니요 |
atomic | N/A | sync/atomic 패키지의 일반적인 실수 사용법을 확인하십시오 | 아니요 | 아니요 |
empty-lines | N/A | 블록에 신형 신축성이있을 때 경고 | 아니요 | 아니요 |
line-length-limit | int (기본값으로 80) | 한 줄에 최대 문자 수를 지정합니다 | 아니요 | 아니요 |
call-to-gc | N/A | 쓰레기 수집가에게 명시적인 부름에 대해 경고합니다 | 아니요 | 아니요 |
duplicated-imports | N/A | 두 번 이상 가져온 패키지를 찾습니다. | 아니요 | 아니요 |
import-shadowing | N/A | 수입을 섀도 잉 식별자로 지정합니다 | 아니요 | 아니요 |
bare-return | N/A | 베어 리턴에 대해 경고합니다 | 아니요 | 아니요 |
unused-receiver | N/A | 사용하지 않은 메소드 수신기의 이름을 바꾸거나 제거하도록 제안합니다 | 아니요 | 아니요 |
unhandled-error | []끈 | 함수 호출로 반환 된 처리되지 않은 오류에 대해 경고합니다 | 아니요 | 예 |
cognitive-complexity | int (기본값으로 7) | 최대인지 복잡성에 대한 제한을 설정합니다. | 아니요 | 아니요 |
string-of-int | N/A | Int에서 String까지 의심스러운 캐스트에 대해 경고합니다 | 아니요 | 예 |
string-format | 지도 | 하나 이상의 사용자 구성 일반 표현식에 실패하는 특정 문자 리터럴에 대해 경고 | 아니요 | 아니요 |
early-return | []끈 | 둥지를 줄이기 위해 술어가 반전 될 수있는 경우, 엘레비터 | 아니요 | 아니요 |
unconditional-recursion | N/A | (직접) 무한 재귀로 이어질 기능 호출에 대해 경고 | 아니요 | 아니요 |
identical-branches | N/A | If-then-ELSE 진술을 동일하게 한 then 과 else 지점 | 아니요 | 아니요 |
defer | 지도 | 일부 연기 Gotchas에 대해 경고합니다 | 아니요 | 아니요 |
unexported-naming | N/A | 잘못 지명되지 않은 수출 된 기호에 대해 경고합니다 | 아니요 | 아니요 |
function-length | int, int (기본값은 50 개의 진술, 75 줄) | 진술 또는 줄을 초과하는 기능에 대한 경고 | 아니요 | 아니요 |
nested-structs | N/A | 구조 내에서 구조에 대해 경고합니다 | 아니요 | 아니요 |
useless-break | N/A | 조항의 경우 쓸모없는 break 진술에 대해 경고합니다 | 아니요 | 아니요 |
banned-characters | [] string (defaults to [] string {}) | 식별자에서 금지 된 문자를 확인합니다 | 아니요 | 아니요 |
optimize-operands-order | N/A | 비효율적 인 조건부 표현을 점검합니다 | 아니요 | 아니요 |
use-any | N/A | interface{} any 으로 대체 할 것을 제안합니다 | 아니요 | 아니요 |
datarace | N/A | 잠재적 인 데이터가 있습니다 | 아니요 | 아니요 |
comment-spacings | []끈 | 잘못된 의견에 대해 경고합니다 | 아니요 | 아니요 |
redundant-import-alias | N/A | 가져 오기 패키지 이름과 일치하는 가져 오기 별칭에 대해 경고합니다 | 아니요 | 아니요 |
import-alias-naming | 문자열 또는지도 [문자열] 문자열 (Regex Pattern ^[az] [a-z0-9] {0,} $)를 허용하는 기본값 | 수입 별명의 이름 지정에 관한 규칙. | 아니요 | 아니요 |
enforce-map-style | 문자열 (기본값으로 "Any") | make(map[type]type) 또는 map[type]type{} 의 일관된 사용량을 맵 초기화에 적용합니다. make(map[type]type, size) 구성에 영향을 미치지 않습니다. | 아니요 | 아니요 |
enforce-slice-style | 문자열 (기본값으로 "Any") | 슬라이스 초기화에 대해 일관된 make([]type, 0) 또는 []type{} 의 사용을 시행합니다. make(map[type]type, non_zero_len, or_non_zero_cap) 구성에 영향을 미치지 않습니다. | 아니요 | 아니요 |
enforce-repeated-arg-type-style | 문자열 (기본값으로 "Any") | 반복되는 인수 및/또는 반환 값 유형에 대한 일관된 스타일을 시행합니다. | 아니요 | 아니요 |
max-control-nesting | int (기본값으로 5) | 제어 구조의 최대 중첩에 대한 제한을 설정합니다. | 아니요 | 아니요 |
comments-density | int (기본값으로 0) | 최소 주석 / 코드 관계를 시행합니다 | 아니요 | 아니요 |
file-length-limit | 지도 (선택 사항) | 파일 당 최대 줄 수를 시행합니다 | 아니요 | 아니요 |
filename-format | 정규 표현식 (선택 사항) | 파일 이름의 형식을 시행합니다 | 아니요 | 아니요 |
redundant-build-tag | N/A | 중복성에 대해 경고 // +build | 아니요 | 아니요 |
use-errors-new | N/A | errors.New 로 대체 할 수있는 fmt.Errorf 에 대한 호출 스팟. | 아니요 | 아니요 |
여기에서 기존 규칙을 구성하는 방법을 찾을 수 있습니다.
var-naming 이 규칙은 문자열의 두 조각, 허용리스트 및 초기리스트 블록 목록을 허용합니다. 기본적으로 규칙은 golint 의 대안으로 정확하게 동작하지만 선택적으로는이를 완화 할 수 있습니다 (Golint/Lint/Issues/89 참조).
[ rule . var-naming ]
arguments = [[ " ID " ], [ " VM " ]] 이런 식으로 Revive는 customId 라는 식별자에 대해 경고하지 않지만 customVm customVM 이라고해야한다고 경고합니다.
이 섹션에는 사용 가능한 모든 Formatter가 나열되어 있으며 각각의 스크린 샷을 제공합니다.


기본 Formatter는 golint 와 동일한 출력을 생성합니다.

Plain Formatter는 기본 포맷터와 동일한 출력을 생성하고 규칙 설명에 URL을 추가합니다.

UNIX Formatter는 기본 Formatter와 동일한 출력을 생성하지만 [] 의 규칙을 둘러싸고 있습니다.

json Formatter는 JSON 형식의 출력을 생성합니다.
ndjson Formatter는 Newline Delimited JSON 형식으로 출력을 생성합니다.
checkstyle Formatter는 체크 스타일과 같은 형식으로 출력을 생성합니다.
sarif Formatter는 정적 분석 결과 인터체인지 형식을 위해 SARIF에서 출력을 생성합니다.
표준의 현재 지원되는 버전은 SARIF-V2.1.0입니다.
이 도구는 사용자 정의 규칙 또는 형성자로 확장 할 수 있습니다. 이 섹션에는 이러한 구현 방법에 대한 추가 정보가 포함되어 있습니다.
사용자 정의 규칙으로 Linter를 확장하려면이 저장소로 푸시하거나 라이브러리로 revive 사용할 수 있습니다 (아래 참조).
커스텀 포맷터를 추가하려면이 저장소로 푸시하거나 포크해야합니다. 이는 Linux에서만 작동하는 Limited -buildmode=plugin 지원에 기인합니다 (알려진 문제 포함).
각 규칙은 lint.Rule 인터페이스를 구현해야합니다.
type Rule interface {
Name () string
Apply ( * File , Arguments ) [] Failure
} Arguments 유형은 유형 []interface{} 의 별칭입니다. 규칙의 인수는 구성 파일에서 전달됩니다.
주어진 식별자가있는 구조의 이름을 말하지 않는 BanStructNameRule 이라는 규칙을 개발했다고 가정 해 봅시다. TOML 구성 파일을 사용하여 금지 된 식별자를 설정할 수 있습니다.
[ rule . ban-struct-name ]
arguments = [ " Foo " ]위의 스 니펫으로 우리 :
ban-struct-name 이라는 이름으로 규칙을 활성화하십시오. 우리의 규칙의 Name() 메소드는 ban-struct-name 일치하는 문자열을 반환해야합니다.Foo 로 규칙을 구성하십시오. 인수 목록은 우리가 현재 줄어드는 대상 파일과 함께 Apply(*File, Arguments) 을 전달합니다.샘플 규칙 구현은 여기에서 찾을 수 있습니다.
revive 사용합니다 규칙이 귀하의 사용 사례에만 해당되는 경우 (즉, revive 의 규칙 세트에 추가되는 좋은 후보자가 아닙니다) 라인 엔진으로 revive 사용하여 Linter에 추가 할 수 있습니다.
다음 코드는 응용 프로그램에서 revive 사용하는 방법을 보여줍니다. 예에서는 하나의 규칙 만 추가됩니다 ( myRule ). 물론 필요한만큼 추가 할 수 있습니다. 규칙은 프로그래밍 방식으로 구성되거나 표준 revive 구성 파일로 구성 될 수 있습니다. revive 의 전체 규칙 세트는 응용 프로그램에서도 실행 가능합니다.
package main
import (
"github.com/mgechev/revive/cli"
"github.com/mgechev/revive/lint"
"github.com/mgechev/revive/revivelib"
)
func main () {
cli . RunRevive ( revivelib . NewExtraRule ( & myRule {}, lint. RuleConfig {}))
}
type myRule struct {}
func ( f myRule ) Name () string {
return "myRule"
}
func ( f myRule ) Apply ( * lint. File , lint. Arguments ) []lint. Failure { ... } 도서관 또는 CLI의 일부로 CLI 없이도 더 나아가서 revive 사용할 수 있습니다.
package mylib
import (
"github.com/mgechev/revive/cli"
"github.com/mgechev/revive/revivelib"
"github.com/mgechev/revive/lint"
)
// Error checking removed for clarity
func LintMyFile ( file string ) {
conf , _ := config . GetConfig ( "../defaults.toml" )
revive , _ := revivelib . New (
conf , // Configuration file
true , // Set exit status
2048 , // Max open files
// Then add as many extra rules as you need
revivelib . NewExtraRule ( & myRule {}, lint. RuleConfig {}),
)
failuresChan , err := revive . Lint (
revivelib . Include ( file ),
revivelib . Exclude ( "./fixtures" ),
// You can use as many revivelib.Include or revivelib.Exclude as required
)
if err != nil {
panic ( "Shouldn't have failed: " + err . Error ())
}
// Now let's return the formatted errors
failures , exitCode , _ := revive . Format ( "stylish" , failuresChan )
// failures is the string with all formatted lint error messages
// exit code is 0 if no errors, 1 if errors (unless config options change it)
// ... do something with them
}
type myRule struct {}
func ( f myRule ) Name () string {
return "myRule"
}
func ( f myRule ) Apply ( * lint. File , lint. Arguments ) []lint. Failure { ... }각 형성자는 다음 인터페이스를 구현해야합니다.
type Formatter interface {
Format ( <- chan Failure , Config ) ( string , error )
Name () string
} Format 메소드는 Failure 인스턴스의 채널과 활성화 된 규칙의 구성을 허용합니다. Name() 메소드는 이미 기존 규칙의 이름과 다른 문자열을 반환해야합니다. 이 문자열은 revive CLI 도구를 호출 할 때 Formatter를 지정할 때 사용됩니다.
샘플 포맷터의 경우이 파일을 살펴보십시오.
golint 와 비교할 때 revive 각 개별 규칙의 파일을 별도의 고루 틴으로 인쇄하기 때문에 더 잘 수행됩니다. Kubernetes에서 2013 년 초에 MacBook Pro의 기본 성능 벤치 마크는 다음과 같습니다.
time golint kubernetes/... > /dev/null
real 0m54.837s
user 0m57.844s
sys 0m9.146s # no type checking
time revive -config untyped.toml kubernetes/... > /dev/null
real 0m8.471s
user 0m40.721s
sys 0m3.262s 유형 확인이 필요한 규칙을 사용하면 성능이 golint 보다 2 배 빠르게 떨어질 수 있습니다.
# type checking enabled
time revive kubernetes/... > /dev/null
real 0m26.211s
user 2m6.708s
sys 0m17.192s현재 유형 확인은 기본적으로 활성화됩니다. 유형 확인없이 Linter를 실행하려면 구성 파일에서 모든 타이핑 된 규칙을 제거하십시오.
기본적으로 revive TTY에 연결되어 있는지 여부에 따라 출력을 색칠할지 여부를 결정합니다. 이것은 대부분의 사용 사례에 대해 작동하지만 STDOUT가 다른 명령으로 파이프를하는 명령 파이프 라인에서 revive 사용하는 경우 예상대로 작동하지 않을 수 있습니다.
색상화를 강제하려면 실행중인 환경에 REVIVE_FORCE_COLOR=1 추가하십시오.
REVIVE_FORCE_COLOR=1 revive -formatter friendly ./... | tee revive.log| mgechev | 차바 카바 | denisvmedia | Mfederowicz | Xuri | 알렉산드어 |
| Ldez | Doniacld | 클리버 | morphy2k | Bernhardreisenberger | 드 셰민 |
| 부 투 조프 | comdiv | heynemann | Gsamokovarov | Mdelah | Tymonx |
| Sina-Devel | Rawen17 | Dominiquelefevre | git-hulk | SHMSR | ytnsym |
| 짐마 스키 | MapReal19 | CCE | 스카 지 | Ccoveilil | Tamird |
| Markelog | 미하이 아토도르 | dvejmz | Abeltay | damif94 | Groxx |
| Stephenbuttolph | Stephenbrown2 | LSYTJ0413 | Qascade | Ridvansumset | rliebz |
| rdeusser | Rmarku | rnikoopour | 라파마드리즈 | paco0x | PA-M |
| 시나 | Natefinch | Nunnatsa | 미칼 하임 | Zeripath | Y-YAGI |
| Techknowlogick | Okhowang | Meanguy | 좋아요 | 커널 트랙 | jmckenzieark |
| Haya14busa | Fregin | 이다 | Willabides | 헤이비토 | Vincentbaron |
| 스코프 | vkrol | Kirillsluchaev | Jarema | 타르 탈 | Tmzane |
| 펠리페 다비드 | EUANK | 욕설 | Juneezee | echoix | 숨길 |
| Petethepig | Dirk007 | 양 다비안 츠 | 데릭 퍼킨스 | Bboreham | 다소 |
| Hatamiarash7 | 아라 구 | 아민 첼로 | 쿨티 | Abirdcfly | Abhinav |
| R- 리치 | mmcloughlin | Mathieu-Aubin | 마틴 시베 | 아보리마 | Moukoublen |
| 매우 재미있었습니다 | Johnrichardrinehart | 벽 | jefersonf | 제임스 메이드 | Jalaziz |
| 그 롱고 | 묶다 | 준일 | Davidhsingyuchen | Gfariasalves-ionos | Gburanov |
| ginglis13 | 플리스저 |
MIT