สนามเด็กเล่น | บทช่วยสอน | เอกสาร
GritQL เป็นภาษาคิวรีที่ประกาศสำหรับการค้นหาและแก้ไขซอร์สโค้ด
อ่านเอกสาร บทช่วยสอนแบบโต้ตอบ หรือเรียกใช้ grit --help
ติดตั้ง Grit CLI:
curl -fsSL https://docs.grit.io/install | bash
ค้นหาการเรียก console.log
ทั้งหมดของคุณโดยใส่รูปแบบที่ต้องการใน backticks:
grit apply '`console.log($_)`'
แทนที่ console.log
ด้วย winston.log
โดยใช้ =>
เพื่อสร้างการเขียนใหม่:
grit apply '`console.log($msg)` => `winston.log($msg)`'
บันทึกรูปแบบลงในไฟล์ grit.yaml
และไม่รวมกรณีทดสอบในส่วนคำสั่ง Where:
cat << 'EOF' > .grit/grit.yaml
patterns:
- name: use_winston
level: error
body: |
`console.log($msg)` => `winston.log($msg)` where {
$msg <: not within or { `it($_, $_)`, `test($_, $_)`, `describe($_, $_)` }
}
EOF
grit apply use_winston
เรียกใช้ grit check
เพื่อบังคับใช้รูปแบบของคุณเป็นผ้าสำลีแบบกำหนดเอง
grit check
console.log
ทั้งหมด ยกเว้นว่าการโทรเหล่านั้นอยู่ภายในบล็อก try-catch `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
ดูตัวอย่างอื่นๆ อีกมากมายได้ในไลบรารีมาตรฐาน GritQL
สามารถรวมรูปแบบเพื่อสร้างแบบสอบถามที่ซับซ้อน รวมถึงรีแฟคเตอร์ขนาดใหญ่
GritQL มาจากประสบการณ์ของเราในการดำเนินการรีแฟคเตอร์และการย้ายข้อมูลขนาดใหญ่
โดยปกติแล้ว การย้ายข้อมูลจะเริ่มต้นด้วยงานสำรวจเพื่อหาขอบเขตของปัญหา ซึ่งมักใช้การค้นหา grep แบบง่ายๆ สิ่งเหล่านี้เริ่มต้นได้ง่าย แต่การโยกย้ายส่วนใหญ่จบลงด้วยการสะสมข้อกำหนดเพิ่มเติม เช่น การตรวจสอบให้แน่ใจว่ามีการนำเข้าแพ็คเกจที่ถูกต้อง และไม่รวมกรณีต่างๆ ที่ไม่มีเส้นทางการย้ายที่ทำงานได้
ในที่สุด การโยกย้ายที่ซับซ้อนใดๆ ก็กลายเป็นโปรแกรมโค้ดโมดเต็มรูปแบบที่เขียนด้วยเครื่องมืออย่าง jscodeshift สิ่งนี้มาพร้อมกับปัญหาของตัวเอง:
GritQL คือความพยายามของเราในการพัฒนาจุดกึ่งกลางที่ทรงพลัง:
$metavariables
สำหรับช่องโหว่ที่คุณต้องการนำเสนอGritQL ใช้ tree-sitter สำหรับโปรแกรมแยกวิเคราะห์ภาษาทั้งหมด และได้รับประโยชน์อย่างมากจากระบบนิเวศของ Rust
GritQL เปิดตัวภายใต้ใบอนุญาต MIT
ยินดีบริจาค ในการเริ่มต้น โปรดดู หลักเกณฑ์การมีส่วนร่วม
คุณสามารถเข้าร่วมกับเราได้ที่ Discord