ข้ามไปยังเนื้อหา

คำสั่งกราฟ

codeknit มีคำสั่งกราฟสำหรับการแสดงภาพโครงสร้าง การวิเคราะห์อัตโนมัติ และการรวมกราฟการพึ่งพาปัจจุบันกับประวัติการเปลี่ยนแปลงของ Git

สร้างกราฟแบบ HTML ที่สามารถโต้ตอบได้ของโค้ดเบสของคุณ

Terminal window
codeknit graph show <input-path>

คำสั่งนี้จะทำการแยกวิเคราะห์โค้ดเบสของคุณและสร้างไฟล์ HTML ที่สามารถใช้งานได้ด้วยตัวเองพร้อมกับการแสดงภาพกราฟแบบโต้ตอบ สัญลักษณ์ (ฟังก์ชัน คลาส ประเภท) จะปรากฏเป็นโหนด และความสัมพันธ์ของพวกมัน (การเรียกใช้ การบรรจุ การนำมาใช้) จะปรากฏเป็นเส้นเชื่อม การแสดงภาพจะเปิดขึ้นโดยอัตโนมัติในเว็บเบราว์เซอร์เริ่มต้นของคุณ

โปรแกรมแสดงผลจะวาดความสัมพันธ์ที่ถูกแก้ไขแล้ว จะแสดงจำนวนความไม่แน่นอน แต่จะไม่วาดความสัมพันธ์ที่ไม่ได้รับการแก้ไขหรือคลุมเครือ หรือลิงก์ผู้สมัครของพวกมัน ตรวจสอบความสัมพันธ์เหล่านั้นด้วยเอาต์พุตการแยกวิเคราะห์:

Terminal window
codeknit parse ./src --output-mode inline --edges
codeknit parse ./src --output-mode inline --format json --edges
Flag Default Description
-o, --output ./skeleton/codeknit-graph.html เส้นทางไฟล์ HTML เอาต์พุต
--collect-test false รวมไฟล์ทดสอบในการวิเคราะห์
--workers NumCPU จำนวนสูงสุดของ goroutines การแยกวิเคราะห์พร้อมกัน
--verbose false แสดงข้อมูลความคืบหน้าในระหว่างการประมวลผล
Terminal window
# Generate default visualization
codeknit graph show ./myproject
# Custom output file
codeknit graph show ./myproject -o graph.html
# Include test files
codeknit graph show ./src --collect-test

เรียกใช้อัลกอริทึมกราฟโครงสร้างบนโค้ดเบสของคุณและส่งออกรายงาน .skt ที่สามารถอ่านได้โดย LLM ซึ่งประกอบด้วยข้อมูลเชิงลึกเกี่ยวกับคุณภาพโค้ด

Terminal window
codeknit graph analyze <input-path>

คำสั่งนี้จะรายงานผู้สมัครสำหรับการตรวจสอบ รวมถึงการพึ่งพาแบบวนรอบ สัญลักษณ์ฮับ โค้ดที่ไม่ได้ใช้งาน คลาส/ฟังก์ชันก็อด และคอขวดทางสถาปัตยกรรม

การวิเคราะห์ประกอบด้วยอัลกอริทึมกราฟโครงสร้าง 22 รายการ:

  • การพึ่งพาแบบวนรอบ (Tarjan’s SCC)
  • การตรวจจับฮับ (การเชื่อมต่อ fan-in/fan-out สูง)
  • การตรวจจับรายการกำพร้า (ผู้สมัครโค้ดที่ไม่ได้ใช้งาน)
  • การตรวจจับคลาส/ฟังก์ชันก็อด (มีรายการย่อยมากเกินไป)
  • เมตริกความไม่เสถียร (Robert C. Martin’s Ce/(Ca+Ce))
  • เชนการสืบทอดที่ลึก
  • Betweenness centrality (การตรวจจับคอขวด)
  • จุดเชื่อมต่อ (จุดเดียวของความล้มเหลว)
  • PageRank (ความสำคัญแบบเรียกซ้ำ)
  • fan-in แบบส่งผ่าน (ขอบเขตผลกระทบ)
  • การจำลองการแพร่กระจายการเปลี่ยนแปลง
  • การพึ่งพาระหว่างแพ็กเกจแบบวนรอบ
  • การตรวจจับการละเมิดเลเยอร์
  • การเข้าถึงได้จากจุดเริ่มต้น
  • ส่วนประกอบที่เชื่อมต่อกันอย่างอ่อน
  • น้ำหนักการพึ่งพา (ความแข็งแกร่งของการเชื่อมต่อแพ็กเกจ)
  • ระยะห่างจาก Main Sequence (สมดุล A+I)
  • การตรวจจับการผ่าตัดแบบปืนลูกซอง
  • การตรวจจับความอิจฉาคุณสมบัติ
  • การละเมิดการพึ่งพาที่เสถียร
  • การละเมิดการแบ่งแยกอินเทอร์เฟซ
  • ความลึกของการบรรจุ

เมตริกการพึ่งพาใช้ความสัมพันธ์ที่ถูกแก้ไขแล้ว รายงานจะนับความสัมพันธ์ที่ไม่ได้รับการแก้ไขและคลุมเครือที่ถูกยกเว้น ข้อมูลเมตาไฟล์/รวมจะถูกยกเว้นจากการจัดอันดับการพึ่งพาและการค้นหาโค้ดที่ไม่ได้ใช้งาน

  • fan-in และ fan-out นับเพื่อนบ้านที่แตกต่างกัน ความสัมพันธ์ที่ซ้ำกันจะไม่เพิ่มจำนวนเหล่านี้ และการบรรจุไม่ถือเป็นการพึ่งพา
  • ความลึกของการสืบทอดพิจารณาฐานและอินเทอร์เฟซทั้งหมด ลำดับชั้นแบบวนรอบจะไม่ได้รับการกำหนดความลึก
  • การเข้าถึงเริ่มต้นจาก callable ที่ชื่อ main, Main, หรือ init และตามเส้นเชื่อมการพึ่งพา การเข้าถึงสมาชิกจะทำให้คอนเทนเนอร์ของมันเกี่ยวข้องโดยไม่ต้องทำเครื่องหมายทุกพี่น้องว่าสามารถเข้าถึงได้ หากไม่มีจุดเริ่มต้นที่รู้จัก การค้นพบการเข้าถึงจะถูกละเว้น
  • อาร์กิวเมนต์ callback และ callable ที่ถูกส่งกลับเป็นการอ้างอิง ไม่ใช่หลักฐานว่าคอลแบ็กถูกดำเนินการ
  • การแพร่กระจายการเปลี่ยนแปลงใช้เส้นทางการพึ่งพาที่แข็งแกร่งที่สุด คะแนนและกฎเลเยอร์ที่อิงตามไดเรกทอรีเป็นฮิวริสติกส์ ไม่ใช่ความน่าจะเป็นที่วัดได้

ผู้เรียกจากภายนอก การส่งผ่านแบบไดนามิก และการพึ่งพานอกการสแกนสามารถเปลี่ยนแปลงข้อสรุปได้ ดู การรองรับภาษาและความเที่ยงตรงของ API สำหรับกฎและข้อจำกัดในการแก้ไข

Flag Default Description
-o, --output ./skeleton/graph_analysis.skt เส้นทางไฟล์ .skt เอาต์พุต
--collect-test false รวมไฟล์ทดสอบในการวิเคราะห์
--workers NumCPU จำนวนสูงสุดของ goroutines การแยกวิเคราะห์พร้อมกัน
--verbose false แสดงข้อมูลความคืบหน้าในระหว่างการประมวลผล
--fan-threshold 10 ค่า fan-in หรือ fan-out ขั้นต่ำในการระบุสัญลักษณ์ฮับ
--god-threshold 15 จำนวนขอบการบรรจุขั้นต่ำในการระบุคลาส/ฟังก์ชันก็อด
--max-inheritance-depth 5 ระบุเชนการสืบทอดที่ลึกกว่านี้
--top-n 30 จำกัดส่วนเอาต์พุตที่จัดอันดับ; 0 = ไม่มีขีดจำกัด
--betweenness-threshold 0.001 ค่าความสำคัญของ betweenness ขั้นต่ำในการรายงาน
--propagation-cutoff 0.05 คะแนนฮิวริสติกขั้นต่ำในการดำเนินการแพร่กระจายการเปลี่ยนแปลง
Terminal window
# Run structural analysis with defaults
codeknit graph analyze ./myproject
# Custom output and thresholds
codeknit graph analyze ./myproject -o analysis.skt --fan-threshold 15
# Show more results per section
codeknit graph analyze ./myproject --top-n 50
# Remove the cap on ranked sections
codeknit graph analyze ./myproject --top-n 0
# Include test files
codeknit graph analyze ./src --collect-test

จัดอันดับไฟล์ที่มีการเปลี่ยนแปลงบ่อยและมีความสำคัญทางโครงสร้าง:

Terminal window
codeknit graph hotspots <input-path>

คะแนนรวมความถี่ในการคอมมิต การเปลี่ยนแปลงบรรทัด และความใหม่เข้ากับ PageRank ระดับไฟล์ fan-in แบบส่งผ่าน และ betweenness centrality รายงานยังระบุการเชื่อมโยงชั่วคราวระหว่างไฟล์ที่มีการเปลี่ยนแปลงซ้ำในคอมมิตเดียวกัน

คอมมิตการผสานจะถูกยกเว้นโดยค่าเริ่มต้น คอมมิตที่เปลี่ยนแปลงไฟล์มากกว่า 50 ไฟล์ก็ถูกยกเว้นเช่นกัน เพื่อไม่ให้การเปลี่ยนแปลงที่สร้างขึ้นโดยอัตโนมัติ การนำเข้า หรือการเปลี่ยนแปลงจำนวนมากบิดเบือนผลลัพธ์

Flag Default Description
-o, --output ./skeleton/hotspots.skt เส้นทางไฟล์เอาต์พุต
--format skt รูปแบบเอาต์พุต: skt หรือ json
--since 12mo ช่วงเวลาประวัติ เช่น 180d, 12mo, หรือ 2y
--max-commits 2000 จำนวนคอมมิตสูงสุดที่จะตรวจสอบ
--max-files-per-commit 50 ยกเว้นคอมมิตที่เปลี่ยนแปลงไฟล์มากเกินไป
--min-cochanges 3 จำนวนคอมมิตที่ใช้ร่วมกันขั้นต่ำสำหรับการเชื่อมโยงชั่วคราว
--top-n 30 จำนวนสูงสุดของผลลัพธ์ต่อส่วนรายงาน
--include-merges false รวมคอมมิตการผสาน
--collect-test false รวมไฟล์ทดสอบ
--workers NumCPU จำนวนสูงสุดของ goroutines การแยกวิเคราะห์พร้อมกัน
--verbose false แสดงข้อมูลความคืบหน้า
Terminal window
# Analyze the last 12 months
codeknit graph hotspots ./myproject
# Analyze two years and emit JSON
codeknit graph hotspots ./myproject --since 2y --format json -o hotspots.json
# Include larger commits and require stronger coupling
codeknit graph hotspots . --max-files-per-commit 100 --min-cochanges 5