CodeHawk เป็นเครื่องมือวิเคราะห์แบบคงที่สำหรับโครงการ JavaScript มันมีจุดประสงค์เพื่อเป็นระบบเตือนเพื่อระบุพื้นที่ที่ซับซ้อนของรหัสที่ต้องการความสนใจเป็นพิเศษโดยนักพัฒนา
FTA เป็นการแทนที่โดยตรงสำหรับโครงการ CodeHawk CLI มันแข็งแกร่งกว่าและเร็วกว่ามากโดยมีการวิเคราะห์แบบคงที่ระดับต่ำในสนิม
ขอแนะนำให้ใช้ FTA ผ่าน CodeHawk CLI 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 " ]
} เพิ่มสคริปต์ใหม่ลงใน package.json ตัวอย่างเช่น: "codehawk": "codehawk src"
เรียกใช้ 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 กล่าวอีกนัยหนึ่งมันจะแปลงรหัสการไหลหรือ typescript ใด ๆ เป็นรหัส JavaScript ก่อนที่จะทำการวิเคราะห์แบบคงที่
แต่ละไฟล์วิเคราะห์ในโครงการของคุณจะจบลงด้วย:
codehawkScore - คะแนน CodeHawk ซึ่งแสดงถึงระดับการบำรุงรักษาโดยประมาณ (0-100 สูงกว่าดีกว่า)dependencies - แผนที่ของไฟล์นี้timesDependedOn - จำนวนครั้งที่ไฟล์นี้นำเข้าโดยไฟล์อื่น ๆcomplexityReport - ตัวชี้วัดความซับซ้อนที่มีรายละเอียดต่าง ๆ เช่นตัวชี้วัด Halstead และความซับซ้อนของวัฏจักร โดยค่าเริ่มต้น CodeHawk-CLI จะสร้างตรา 2 ใบ (ใน generated/*.svg ) เมื่อเรียกผ่านอินเตอร์เฟส CLI หลัก:
คะแนนที่สูงกว่านั้นดีกว่า (ง่ายกว่ารหัสที่บำรุงรักษาได้มากขึ้น)
เพื่อหลีกเลี่ยงการสร้างป้ายให้ใช้ตัวเลือก --no-badge
CodeHawk รวบรวมตัวชี้วัดความซับซ้อนต่าง ๆ รวมถึง:
codehawk.json อย่างไรก็ตามพวกเขาสามารถว่างเปล่า "ตัวอย่าง" มี 4 โครงการปลอมและ 1 โครงการจริงสำหรับวัตถุประสงค์ในการทดสอบเครื่องมือ CLI
Sweetalert ในไดเรกทอรีนี้เป็นการส่งออกแบบคงที่ (ดำเนินการในปี 2019) ของห้องสมุดนั้น
แต่ละตัวอย่างมีไฟล์การกำหนดค่า codehawk.json ที่ว่างเปล่า (ในปัจจุบันการกำหนดค่านี้)
อักขระที่ไม่ใช่ละติน (หรือ Unicode บางตัว) เช่น u2019 สร้างความสับสนให้กับ flow-remove-types ดู Facebook/flow#8060