Codehawk은 JavaScript 프로젝트를위한 정적 분석 도구입니다. 개발자가 특별한주의를 기울여야하는 복잡한 코드 영역을 식별하기위한 경고 시스템으로 고안되었습니다.
FTA는 Codehawk CLI 프로젝트를 직접 대체합니다. 녹에서 낮은 수준의 정적 분석이 수행되면서 훨씬 더 강력하고 극적으로 빠릅니다.
Codehawk CLI를 통해 FTA를 사용하는 것이 좋습니다. FTA는 활발한 개발 중이며 Codehawk CLI는 유지 보수 모드에 있습니다.
FTA로 업그레이드하십시오.
JavaScript (TypeScript 및 Flow 포함) 프로젝트는 분석을 위해 지원됩니다. CLI 도구는 UNIX 및 Windows 파일 시스템을 지원합니다 (합리적인 양의 Windows 호환성 코드가 있습니다).
디렉토리를 가로 지르고 지원되는 모든 필레 타입을 발견하고 각 파일에서 정적 분석 루틴을 실행 한 다음 상호 의존성 계산 및 테스트 적용 범위 매핑과 같은 프로젝트 전체 분석을 수행합니다.
CLI는 node.js 프로세스로 실행됩니다. node.js> = 14가 필요하지만> = 16이 권장됩니다. 노드 v12 이하는 지원되지 않습니다.
Codehawk-Cli를 사용하는 가장 간단한 방법은 프로젝트의 디렉토리에 사용하는 것입니다.
npm install --save-dev codehawk-cli 또는 yarn add --dev codehawk-cli
예를 들어 프로젝트의 루트에 codehawk.json 을 추가하십시오.
{
"skipDirectories" : [ " /node_modules " , " coverage " ]
} "codehawk": "codehawk src" 와 같은 package.json 에 새 스크립트를 추가하십시오.
npm run codehawk 하고 Stdout에 출력하십시오
또한 Next.js를 사용하는 예를 참조하십시오.
Codehawk Static Analysis Results
Top 14 files
| File | # of Lines | Times Used/Depended On | Maintainability (higher is better) |
| -------------------------------------------------- | ---------- | ---------------------- | ---------------------------------- |
| /test/codehawk.test.js | 149 | 1 | 45.3 (Needs improvement) |
| /src/util.ts | 143 | 4 | 47.26 (Needs improvement) |
| /src/codehawk.ts | 122 | 2 | 47.94 (Needs improvement) |
| /src/options.ts | 72 | 2 | 52.64 (Could be better) |
| /src/analyze.ts | 67 | 3 | 54.04 (Could be better) |
| /src/cli-util.ts | 63 | 2 | 54.68 (Could be better) |
| /src/traverseProject.ts | 51 | 2 | 56.91 (Could be better) |
| /src/reporters/escomplex.ts | 43 | 2 | 57.44 (Could be better) |
| /src/badge.ts | 45 | 2 | 58.09 (Could be better) |
| /test/options.test.js | 47 | 1 | 58.55 (Could be better) |
| /src/dependencies.ts | 40 | 2 | 58.7 (Could be better) |
| /src/coverage.ts | 21 | 2 | 60.75 OK |
| /src/index.ts | 20 | 1 | 60.97 OK | 분석을 사용자 정의하려면 루트 디렉토리의 codehawk.json 파일에 배치 된 다음 옵션을 사용하십시오.
| 옵션 | 설명 | 기본 |
|---|---|---|
badgesDirectory | 두 개의 유지 보수 배지가 생성되는 디렉토리 (활성화 된 경우) | ['/generated'] |
enableFlow | 흐름 지원을 활성화하십시오 | false |
extensions | 분석 해야하는 파일 확장. 기본값은 항상 사용되지만 더 많은 확장자를 추가 할 수 있습니다. exclude[...] 옵션을 사용하여 특정 파일을 제외 할 수 있습니다. | ['.js', '.jsx', '.ts', '.tsx'] |
excludeFilenames | 정적 분석에서 제외 해야하는 파일 이름 일치 (그러나 여전히 데이터에 표시). 기본값은 항상 사용되지만 더 많은 일치를 추가하여 제외 할 수 있습니다. 일치하는 것이 정확합니다. 제외 목록은 확장 목록 후에 고려됩니다. | ['.d.ts', '.min.js', '.bundle.js'] |
excludeDirectories | 정적 분석에서 제외 해야하는 디렉토리 일치 (그러나 여전히 데이터에 표시). 뿌리와 관련이 있습니다. 예 : ['/fixtures', '/test'] | ['/dist', '/bin', '/build'] |
excludeExact | 정적 분석에서 제외 해야하는 정확한 파일 일치 (그러나 여전히 데이터에 표시). 뿌리와 관련이 있습니다. 예 : ['/src/foo/bar.ts'] | [] |
skipDirectories | 완전히 제외되어야하는 디렉토리, 즉 결과 데이터에는 전혀 보이지 않습니다. 기본값은 항상 건너 뜁니다. | ['/node_modules', '/flow-typed', '/coverage'] |
minimumThreshold | 최소 수용 가능한 유지 관리 가능성 점수. 파일 이이 점수를 위반하는 경우 CLI는 코드 1 (CI에서 최소 유지 보수 수준을 보장하는 데 사용)으로 종료됩니다. 이것을 최소 30으로 설정하는 것이 좋습니다. | 10 |
cliOutputLimit | CLI 출력에 나열 할 파일 수 (최악의 득점에서 최상의 득점까지). | 25 |
전체 디렉토리 분석 :
const { analyzeProject } = require ( 'codehawk-cli' )
const output = analyzeProject ( '/path/to/project' ) // returns a Results object
// Get summary maintainability scores
const {
average ,
median ,
worst ,
} = output . summary단일 코드 분석 :
const { calculateComplexity } = require ( 'codehawk-cli' )
const STATIC_SAMPLE = `
import lodash from 'lodash';
const chunkIntoFives = (myArr) => {
return _.chunk(myArr, 5);
}
export default chunkIntoFives;
`
const metrics = calculateComplexity ( STATIC_SAMPLE )
console . log ( metrics ) // Inspect the full metrics Codehawk는 낮은 수준 복잡성 지표에 대한 typhonjs-escomplex 에 의존합니다.
Flow는 flow-remove-types 통해 지원되며 TypeScript는 @babel/plugin-transform-typescript 통해 지원됩니다. 다시 말해, 정적 분석을 수행하기 전에 플로우 또는 타입 스크립트 코드를 JavaScript 코드로 변환합니다.
프로젝트의 각 분석 된 파일은 다음과 같습니다.
codehawkScore 유지 관리 수준을 나타내는 코드 호크 점수 (0-100, 높음)dependencies -이 파일의 종속성 맵timesDependedOn 이 파일이 다른 파일에서 가져온 횟수complexityReport Halstead Metrics 및 Cyclomatic Complexity와 같은 다양한 상세한 복잡성 메트릭 기본적으로 Codehawk-Cli는 기본 CLI 인터페이스를 통해 호출 될 때 2 개의 배지 ( generated/*.svg )를 생성합니다.
점수가 높아집니다 (간단하고 유지 관리 가능한 코드).
배지 생성을 피하려면 --no-badge 옵션을 사용하십시오.
Codehawk은 다음을 포함하여 다양한 복잡성 지표를 수집합니다.
codehawk.json 구성 파일이 현재 필요합니다. 그러나 그들은 비어있을 수 있습니다. "샘플"에는 CLI 도구를 테스트 할 목적으로 4 개의 가짜 및 1 개의 실제 프로젝트가 포함되어 있습니다.
이 디렉토리의 Sweetalert는 해당 라이브러리의 정적 수출 (2019 년에 수행)입니다.
각 샘플에는 빈 codehawk.json 구성 파일이 포함되어 있습니다 (현재이 구성)
u2019와 같은 비 라틴 (또는 특정 유니 코드) 문자 혼동 flow-remove-types , Facebook/Flow#8060 참조.