? Arguard
기능 가드 (일명 계약)에 대한 정적 통화 인수를 확인하는 Linter.
예
다음과 같은 기능이 있습니다.
func div ( n , d float64 ) float64 {
if d == 0 {
panic ( "denominator must not be zero" )
}
return n / d
} 그런 다음 다음과 같이 부릅니다.
우리가 userInput 모르더라도 두 번째 인수는 항상 0이기 때문에이 함수 호출이 런타임에 공황 상태라는 것을 알 수 있습니다.
Linter는 안전한 부분 코드 실행 및 Black Magic을 사용하여 그러한 장소를 찾고보고합니다.
? 설치
go install github.com/orsinium-labs/arguard@latest
용법
사용 가능한 깃발 :
-
-contracts.follow-imports : 수입 된 모듈에서 계약을 추출하지 않도록이 플래그를 False로 설정하십시오. 다시 말해, 계약 (가드) 위반은 계약 및 기능 호출이 동일한 분석 패키지에있는 경우에만보고됩니다. 더 나은 성능 에 유용합니다. -
-contracts.report-contracts : 감지 된 모든 계약에 대한 메시지를 방출합니다. 라이터에 의해 계약이 감지되었는지 여부를 확인하기 위해 디버깅 에 유용합니다. -
-arguard.report-errors : 계약 실행 중에이 플래그를 설정하여 실패를 표시합니다. 기본적으로 Arguard가 계약을 실행하지 않으면 아무 것도보고하지 않고 계속 진행됩니다. 계약 오류 가보고되지 않은 이유를 확인하기 위해 디버깅 에 유용합니다.
? QNA
- ? 어떻게 작동합니까? 내부에는 두 개의 분석기가 있습니다. 첫 번째는 코드에서 안전한 계약 (경비원)을 감지합니다. 두 번째는 알려진 계약으로 기능에 대한 통화를 감지하고 정적으로 알려진 인수를 추출하며 Yaegi를 사용하여 실행할 수있는 계약을 실행합니다.
- ? 가드 (계약) 란 무엇입니까? 기능 시작시 IF 조건 (다른 계약 만 이전에만 이동할 수 있음)은 안전한 체크를 확인하고 신체는 오류를 반환하거나
panic 호출 만 있습니다. - ? 결과는 얼마나 신뢰할 수 있습니까? 오류가보고되면 오류가 발생할 가능성이 높습니다. 오류를보고하지 않으면 여전히 오류가있을 수 있습니다. 공식적인 검증자가 아닌 린터입니다.
- ⚖️ 프로젝트는 얼마나 안정적입니까? GO의 정적 분석은 특히 부분 코드 실행을 수행 할 때 지저분해질 수 있습니다. 린터는 실패하거나 틀리거나 잠재적으로 똑똑하지 않을 수 있습니다. 그럼에도 불구하고 그것은 생산 의존성이 아닌 정적 분석기이므로 모든 환경의 모든 프로젝트에서 사용하는 것이 안전해야합니다. 그러나 부분 코드 실행이 여전히 존재한다는 점을 명심하십시오. 따라서 안전을 위해 신뢰할 수없는 코드에서 실행해서는 안됩니다.
- ? 깨지는 변화가 있을까요? 이 프로젝트는 Semver를 따릅니다. 그러나 모든 릴리스, 패치 1조차도 코드에서 새로운 위반을보고 할 수 있습니다. 따라서 어떤 의미에서는 모든 릴리스가 깨질 수 있습니다.
- ? Golangci-Lint 통합이 있습니까? 아직은 아니지만 결국있을 것입니다. 분석 구동 라인을 Golangci-Lint와 통합하기 쉽고 Arguard는 분석 구동입니다. 계속 지켜봐주십시오.
- ✏️ IDE 통합이 있습니까? 아직 아님. Golangci-Lint 통합이 있으면 IDE 통합이 무료로 제공됩니다.
- ? 이것이 새로운 아이디어입니까? 이 프로젝트는 거래하는 것 중 하나를 구현합니다. 거래 자체는 세대의 지혜에 기반을두고 있으며이 타임 라인을 참조하십시오.
- Go API가 있으므로 라이브러리로 사용할 수 있습니까? 예. 분석 패키지는 분석기를 작성하는 기본 방법을 제공하며 프로젝트를 사용할 수있는 방법입니다. 다중
analysis.Analyzer 작성하고 작성하는 방법의 예는 Main.Go를 참조하십시오. - ? it it? ️ 가 적극적으로 유지되고 있습니까? 유닉스 웨이의 최고의 전통 에서이 프로젝트는 매우 작고 명확하게 정의 된 범위를 가지고 있습니다. 나는 때때로 그것으로 돌아와서 잠들지 않는 밤에 가지고 있었던 새로운 흥미로운 아이디어를 가져올 수 있지만, 매일 유지할 것이 없습니다. 오늘 작동한다면, 짧은 종속성 목록과 Go 1 호환성 약속 덕분에 내일 깨지지 않을 것입니다.
- ? 버그를 찾으면 어떻게됩니까? 프로젝트를 포크하고, 버그를 고치고, 테스트를 작성하고, 풀 요청을 엽니 다. 나는 보통 하루 안에 기부금을 병합하고 공개합니다.