Amarna เป็นเครื่องวิเคราะห์แบบคงที่และ linter สำหรับภาษาการเขียนโปรแกรมกรุงไคโร
วิเคราะห์โครงการไคโรในไดเรกทอรีปัจจุบันและส่งออกผลลัพธ์ SARIF ไปยังไฟล์:
amarna . -o out.sarif วิเคราะห์ file.cairo และส่งออกผลลัพธ์ SARIF ไปยังไฟล์:
amarna file.cairo -o out.sarif วิเคราะห์ file.cairo ไฟล์เดียว cairo และพิมพ์สรุปของผลลัพธ์:
amarna file.cairo -s| - | กฎ | สิ่งที่พบ | ผลกระทบ | ความแม่นยำ |
|---|---|---|---|---|
| 1 | การดำเนินการทางคณิตศาสตร์ | การใช้งานทางคณิตศาสตร์ทั้งหมด +, -, *และ / | ข้อมูล | สูง |
| 2 | ข้อโต้แย้งที่ไม่ได้ใช้ | อาร์กิวเมนต์ฟังก์ชั่นที่ไม่ได้ใช้ในฟังก์ชั่นที่ปรากฏ | คำเตือน | สูง |
| 3 | การนำเข้าที่ไม่ได้ใช้ | การนำเข้าที่ไม่ได้ใช้ | ข้อมูล | สูง |
| 4 | นักตกแต่งที่ผิดพลาด | นักตกแต่งรหัสที่ผิดพลาด | ข้อมูล | สูง |
| 5 | ฟังก์ชั่นที่ไม่ได้ใช้ | ฟังก์ชั่นที่ไม่เคยเรียก | ข้อมูล | ปานกลาง |
| 6 | รหัสข้อผิดพลาด | การเรียกใช้ฟังก์ชันที่มีค่าส่งคืนที่ต้องตรวจสอบ | ข้อมูล | สูง |
| 7 | ยืนยันการใช้งานที่ไม่สอดคล้องกัน | ยืนยันว่าใช้ค่าคงที่เดียวกันในรูปแบบที่แตกต่างกันเช่น assert_le(amount, BOUND) และ assert_le(amount, BOUND - 1) | คำเตือน | สูง |
| 8 | ร้านค้าที่ตายแล้ว | ตัวแปรที่กำหนดค่า แต่ไม่ได้ใช้ก่อนคำสั่งคืน | ข้อมูล | ปานกลาง |
| 9 | ไม่ถูกตรวจสอบล้น | การเรียกใช้ฟังก์ชันที่ไม่สนใจธงล้นที่ส่งคืนเช่น uint256_add | คำเตือน | สูง |
| 10 | ค่าส่งคืนที่อยู่ผู้โทร | ฟังก์ชั่นเรียกใช้ฟังก์ชัน get_caller_address | ข้อมูล | สูง |
| 11 | การปะทะกันของตัวแปรการจัดเก็บข้อมูล | หลาย @storage_var ที่มีชื่อเดียวกัน (เลิกใช้แล้ว) | คำเตือน | สูง |
| 12 | นำเข้าฟังก์ชั่นโดยนัย | ฟังก์ชั่นกับ Decorator @external, @view, @l1_handler ที่นำเข้าโดยปริยาย (เลิกใช้แล้ว) | ข้อมูล | สูง |
| 13 | ฟังก์ชั่นมุมมองที่ไม่ได้รับผลกระทบ | การปรับเปลี่ยนสถานะภายในฟังก์ชั่น @view | ข้อมูล | สูง |
| 14 | ตัวแปรที่ไม่สำคัญ | ตัวแปรท้องถิ่นที่ไม่เคยเริ่มต้น | ข้อมูล | สูง |
วิเคราะห์โครงการไคโรในไดเรกทอรีปัจจุบันและผลการส่งออกไปยังไฟล์:
amarna . -o out.sarif วิเคราะห์ไฟล์ deleverage.cairo และส่งออกไปยังไฟล์เดียว:
amarna deleverage.cairo -o deleverage.sarif วิเคราะห์ code.cairo ไฟล์เดียว cairo และพิมพ์สรุปของผลลัพธ์:
amarna code.cairo -s แยกวิเคราะห์ไฟล์ไคโรและส่งออก AST ที่กู้คืนใน png :
amarna file.cairo -pngวิเคราะห์ไฟล์ไคโรด้วยกฎ unused_import:
amarna file.cairo --rules=unused-importsวิเคราะห์ไฟล์ไคโรโดยใช้กฎทั้งหมดยกเว้นกฎทางคณิตศาสตร์ ADD:
amarna file.cairo --except-rules=arithmetic-addเมนูวิธีใช้เต็มรูปแบบคือ:
usage: amarna [-h] [-p] [-o OUTPUT] [-s] [-png] [-rules RULES] [-exclude-rules EXCLUDE_RULES] [-show-rules] [-disable-inline] -f
Amarna is a static-analyzer for the Cairo programming language.
positional arguments:
-f the name of the .cairo file or directory with .cairo files to analyze
optional arguments:
-h, --help show this help message and exit
-p, --print print output
-o OUTPUT, --output OUTPUT
file to write the output results in sarif format
-s, -summary, --summary
output summary
-png, --png save a png with the AST of a file
-rules RULES, --rules RULES
Only run this set of rules. Enter rule names comma-separated, e.g., dead-store,unused-arguments
-exclude-rules EXCLUDE_RULES, --exclude-rules EXCLUDE_RULES
Exclude these rules from the analysis. Enter rule names comma-separated, e.g., dead-store,unused-arguments
-show-rules, --show-rules
Show all supported rules and descriptions.
-disable-inline, --disable-inline
Disable rules with inline comments. The comments should be the first line and of the form: # amarna: disable=rulename1,rulename2
รูปแบบไฟล์ SARIF เป็นรูปแบบมาตรฐานสำหรับเครื่องมือการวิเคราะห์แบบคงที่และสามารถดูได้ใน VSCODE ด้วยส่วนขยายอย่างเป็นทางการ
pip install amarnaกฎการวิเคราะห์แบบคงที่สามารถ:
ตัวอย่างของสิ่งเหล่านี้คือ:
รับชื่อของกฎที่นำไปใช้ในปัจจุบันด้วย:
amarna --show-rulesเรียกใช้ amarna ด้วยชุดของกฎที่กำหนดโดยใช้
amarna --rules=rule1,rule2 . คำสั่งต่อไปนี้จะเรียกใช้กฎ unused-imports เท่านั้นและพิมพ์ผลสรุป
amarna --rules=unused-imports . -sเรียกใช้ amarna ด้วยกฎทั้งหมดยกเว้นชุดของกฎที่กำหนดโดยใช้
amarna --exclude-rules=arithmetic-add,arithmetic-sub . -sคุณสามารถเปลี่ยนบรรทัดแรกของไฟล์ไคโรเพื่อปิดใช้งานกฎเฉพาะที่ตั้งไว้ในไฟล์นั้น ตัวอย่างเช่นการเพิ่มบรรทัด
// amarna: disable=arithmetic-div,arithmetic-sub,arithmetic-mul,arithmetic-add เป็นบรรทัดแรกของ file.cairo และเรียกใช้ amarna ด้วย
amarna directory/ --disable-inline -s จะไม่รายงานกฎทางคณิตศาสตร์ใด ๆ ไปยังไฟล์ file.cairo