CodeHawk adalah alat analisis statis untuk proyek JavaScript. Ini dimaksudkan sebagai sistem peringatan, untuk mengidentifikasi area kode yang kompleks yang membutuhkan perhatian khusus oleh pengembang.
FTA adalah pengganti langsung untuk proyek CODEHAWK CLI. Jauh lebih kuat dan lebih cepat secara dramatis, dengan analisis statis tingkat rendah dilakukan dalam karat.
Disarankan untuk menggunakan FTA atas CodeHawk CLI. FTA sedang dalam pengembangan aktif sedangkan CodeHawk CLI dalam mode pemeliharaan.
Tingkatkan ke FTA di sini.
Proyek JavaScript (termasuk TypeScript dan Flow) didukung untuk analisis. Alat CLI mendukung sistem file unix dan windows (ada jumlah kode kompatibilitas windows yang masuk akal).
Ini bekerja dengan melintasi direktori dan menemukan semua jenis filetypes yang didukung, menjalankan analisis statis rutin pada setiap file, kemudian melakukan analisis proyek seperti penghitungan antar-dependensi dan pemetaan cakupan pengujian.
CLI berjalan sebagai proses Node.js. Node.js> = 14 diperlukan, tetapi> = 16 direkomendasikan. Node V12 dan Under tidak didukung.
Cara paling sederhana untuk menggunakan CodeHawk-CLI adalah dengan menggunakannya terhadap direktori dalam proyek Anda:
npm install --save-dev codehawk-cli atau yarn add --dev codehawk-cli
Tambahkan codehawk.json ke akar proyek Anda, misalnya:
{
"skipDirectories" : [ " /node_modules " , " coverage " ]
} Tambahkan skrip baru ke package.json , misalnya: "codehawk": "codehawk src"
Jalankan npm run codehawk dan dapatkan output ke stdout
Lihat juga contoh menggunakan 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 | Untuk menyesuaikan analisis Anda, gunakan opsi berikut, ditempatkan di file codehawk.json di direktori root.
| Pilihan | Keterangan | Bawaan |
|---|---|---|
badgesDirectory | Direktori di mana keduanya lencana pemeliharaan akan dibuat (saat diaktifkan) | ['/generated'] |
enableFlow | Aktifkan dukungan aliran | false |
extensions | Ekstensi file yang harus dianalisis. Standarnya selalu digunakan, tetapi Anda dapat menambahkan lebih banyak ekstensi. Anda dapat menggunakan opsi exclude[...] untuk mengecualikan file tertentu. | ['.js', '.jsx', '.ts', '.tsx'] |
excludeFilenames | Pencocokan nama file yang harus dikecualikan dari analisis statis (tetapi masih ditampilkan dalam data). Standarnya selalu digunakan, tetapi Anda dapat menambahkan lebih banyak kecocokan untuk dikecualikan. Perhatikan bahwa pencocokannya tepat. Daftar Kecuali dipertimbangkan setelah daftar ekstensi. | ['.d.ts', '.min.js', '.bundle.js'] |
excludeDirectories | Pencocokan direktori yang harus dikecualikan dari analisis statis (tetapi masih ditampilkan dalam data). Relatif terhadap akar. Misalnya ['/fixtures', '/test'] | ['/dist', '/bin', '/build'] |
excludeExact | Pencocokan file yang tepat yang harus dikecualikan dari analisis statis (tetapi masih ditampilkan dalam data). Relatif terhadap akar. Misalnya ['/src/foo/bar.ts'] | [] |
skipDirectories | Direktori yang harus dikecualikan sepenuhnya, yaitu tidak terlihat dalam data yang dihasilkan sama sekali. Default akan selalu dilewati. | ['/node_modules', '/flow-typed', '/coverage'] |
minimumThreshold | Skor pemeliharaan minimum yang dapat diterima. Jika file melanggar skor ini, CLI akan keluar dengan Kode 1 (digunakan untuk memastikan tingkat pemeliharaan minimum di CI). Dianjurkan untuk mengatur ini ke setidaknya 30. | 10 |
cliOutputLimit | Jumlah file yang akan dicantumkan dalam output CLI (dari penilaian terburuk hingga skor terbaik). | 25 |
Analisis seluruh direktori:
const { analyzeProject } = require ( 'codehawk-cli' )
const output = analyzeProject ( '/path/to/project' ) // returns a Results object
// Get summary maintainability scores
const {
average ,
median ,
worst ,
} = output . summaryAnalisis satu bagian kode:
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 tergantung pada typhonjs-escomplex untuk metrik kompleksitas tingkat rendah.
Alur didukung melalui flow-remove-types dan naskah didukung melalui @babel/plugin-transform-typescript . Dengan kata lain, itu mengubah aliran atau kode naskah apa pun menjadi kode JavaScript sebelum analisis statis dilakukan.
Setiap file yang dianalisis dalam proyek Anda berakhir dengan:
codehawkScore - Skor CodeHAWK yang mewakili perkiraan tingkat pemeliharaan (0-100, lebih tinggi lebih baik)dependencies - Peta ketergantungan file initimesDependedOn - berapa kali file ini diimpor oleh file laincomplexityReport - Berbagai metrik kompleksitas terperinci seperti metrik Halstead dan kompleksitas siklomatik Secara default, CodeHawk-CLI menghasilkan 2 lencana (dalam generated/*.svg ) ketika dipanggil melalui antarmuka CLI utama:
Skor yang lebih tinggi lebih baik (kode yang lebih sederhana, lebih dapat dipelihara).
Untuk menghindari menghasilkan lencana, gunakan opsi --no-badge .
CodeHawk mengumpulkan berbagai metrik kompleksitas, termasuk:
codehawk.json saat ini diperlukan. Namun, mereka bisa kosong. "Sampel" berisi 4 proyek palsu dan 1 nyata untuk keperluan pengujian alat CLI.
Sweetalert di direktori ini adalah ekspor statis (dilakukan pada tahun 2019) dari perpustakaan itu.
Setiap sampel berisi file konfigurasi codehawk.json kosong (saat ini, konfigurasi ini)
Karakter non-Latin (atau unicode tertentu?) Seperti u2019 tipe flow-remove-types , lihat Facebook/Flow#8060