ล่วงหน้า linter สำหรับภาษาไวยากรณ์เหมือนไป
Tlin เป็น linter ที่ออกแบบมาสำหรับทั้งภาษาการเขียนโปรแกรม GO และ GNO มันใช้ประโยชน์จากการทำงานของ Golangci-Lint เป็นเครื่องยนต์หลักที่ให้การวิเคราะห์รหัสที่ทรงพลังสำหรับภาษาไวยากรณ์เหมือน GO
แรงบันดาลใจจากคลิปบี้ของ Rust, Tlin มีจุดมุ่งหมายเพื่อให้คำแนะนำการปรับปรุงรหัสเพิ่มเติมนอกเหนือจากกฎ Golangci-Lint เริ่มต้น
ในการติดตั้ง Tlin CLI ให้ทำตามขั้นตอนเหล่านี้:
git clone https://github.com/gnolang/tlin cd tlingo install ./cmd/tlin แค่ไหน! ตอนนี้คุณสามารถใช้คำสั่ง tlin ในเทอร์มินัลของคุณ
tlin < path > แทนที่ <path> ด้วยไฟล์หรือเส้นทางไดเรกทอรีที่คุณต้องการวิเคราะห์
เพื่อตรวจสอบไดเรกทอรีปัจจุบัน Run:
tlin . Tlin รองรับไฟล์การกำหนดค่า ( .tlin.yaml ) เพื่อปรับแต่งพฤติกรรมของมัน คุณสามารถสร้างไฟล์กำหนดค่าเริ่มต้นโดยรัน:
tlin -init คำสั่งนี้จะสร้างไฟล์ .tlin.yaml ในไดเรกทอรีปัจจุบันด้วยเนื้อหาต่อไปนี้:
# .tlin.yaml
name : tlin
rules :คุณสามารถปรับแต่งไฟล์การกำหนดค่าเพื่อเปิดใช้งานหรือปิดใช้งานกฎผ้าสำลีเฉพาะกำหนดเกณฑ์ความซับซ้อนของวงจรและอื่น ๆ
# .tlin.yaml
name : tlin
rules :
useless-break :
severity : WARNING
deprecated-function :
severity : OFF Linter ของเราอนุญาตให้เพิ่มกฎผ้าสำลีที่กำหนดเองนอกเหนือจากกฎ Golangci-Lint เริ่มต้น หากต้องการเพิ่มกฎผ้าสำลีใหม่ให้ทำตามขั้นตอนเหล่านี้:
ต้องอัปเดตการทดสอบที่เกี่ยวข้องหากคุณได้เพิ่มกฎใหม่หรือรูปแบบใหม่
สร้างเอกสาร RFC (ขอความคิดเห็น) สำหรับกฎผ้าสำลีที่คุณเสนอ:
เปิดปัญหาใหม่ในที่เก็บ TLIN และแนบเอกสาร RFC ของคุณ
รอการตอบรับจากชุมชนและการอนุมัติผู้ดูแล เตรียมพร้อมที่จะทำซ้ำ RFC ของคุณตามข้อเสนอแนะ
เมื่อ RFC ได้รับการอนุมัติให้ดำเนินการดำเนินการ:
. ใช้อินเทอร์เฟซ LintRule สำหรับกฎใหม่ของคุณ:
type NewRule struct {}
func ( r * NewRule ) Check ( filename string , node * ast. File ) ([]types. Issue , error ) {
// Implement your lint rule logic here
// return a slice of Issues and any error encountered
} ข. ลงทะเบียนกฎใหม่ของคุณใน registerAllRules และอาจ registerDefaultRules วิธีการของ struct Engine ใน internal/engine.go :
func ( e * Engine ) registerDefaultRules () {
e . rules = append ( e . rules ,
& GolangciLintRule {},
// ...
& NewRule {}, // Add your new rule here
)
} func ( e * Engine ) registerAllRules () {
e . rules = append ( e . rules ,
& GolangciLintRule {},
// ...
& NewRule {}, // Add your new rule here
)
} (ไม่บังคับ) หากกฎของคุณต้องการการจัดรูปแบบพิเศษให้สร้างฟอร์แมตใหม่ในแพ็คเกจ formatter :
. สร้างไฟล์ใหม่ (เช่น formatter/new_rule.go )
ข. ใช้อินเทอร์เฟซ IssueFormatter สำหรับกฎใหม่ของคุณ:
type NewRuleFormatter struct {}
func ( f * NewRuleFormatter ) Format (
issue types. Issue ,
snippet * internal. SourceCode ,
) string {
// Implement formatting logic for new rule here.
} ค. เพิ่ม Formatter ใหม่ลงในฟังก์ชั่น GetFormatter ใน formatter/fmt.go
func GetFormatter ( rule string ) IssueFormatter {
switch rule {
// ...
case "new_rule" : // Add your new rule here
return & NewRuleFormatter {}
default :
return & DefaultFormatter {}
}
}เพิ่มการทดสอบที่ครอบคลุมสำหรับกฎและรูปแบบใหม่ของคุณ
อัปเดตเอกสารเพื่อรวมข้อมูลเกี่ยวกับกฎใหม่
ส่งคำขอดึงด้วยการใช้งานการทดสอบและการอัปเดตเอกสารของคุณ
โดยทำตามขั้นตอนเหล่านี้คุณสามารถเสนอพูดคุยและเพิ่มกฎผ้าสำลีใหม่ในลักษณะที่มีโครงสร้างเพื่อให้แน่ใจว่าพวกเขาจะรวมเข้ากับโครงการ TLIN อย่างเหมาะสม
Tlin สนับสนุนธงหลายตัวเพื่อปรับแต่งพฤติกรรมของมัน:
-timeout <duration> : ตั้งค่าการหมดเวลาสำหรับ linter (ค่าเริ่มต้น: 5m) ตัวอย่าง: -timeout 1m30s-cyclo : เรียกใช้การวิเคราะห์ความซับซ้อนของวงจร-threshold <int> : ตั้งค่าเกณฑ์ความซับซ้อนของวงจร (ค่าเริ่มต้น: 10)-ignore <rules> : รายการกฎผ้าสำลีที่คั่นด้วยเครื่องหมายจุลภาคเพื่อละเว้น-cfg : รันการวิเคราะห์กราฟการควบคุมการไหล-func <name> : ระบุชื่อฟังก์ชันสำหรับการวิเคราะห์ CFG-fix : แก้ไขปัญหาโดยอัตโนมัติ-dry-run : ทำงานในโหมด Dry-Run (แสดงการแก้ไขโดยไม่ต้องใช้งาน)-confidence <float> : กำหนดเกณฑ์ความมั่นใจสำหรับการแก้ไขอัตโนมัติ (0.0 ถึง 1.0, ค่าเริ่มต้น: 0.75)-o <path> : เขียนเอาต์พุตไปยังไฟล์แทน stdout-json-output : ผลลัพธ์ผลลัพธ์ในรูปแบบ JSON-init : เริ่มต้นไฟล์การกำหนดค่า TLIN ใหม่ในไดเรกทอรีปัจจุบัน-c <path> : ระบุไฟล์การกำหนดค่าที่กำหนดเอง เรายินดีต้อนรับการมีส่วนร่วมทุกรูปแบบรวมถึงรายงานข้อผิดพลาดคำขอคุณสมบัติและคำขอดึง โปรดอย่าลังเลที่จะเปิดปัญหาหรือส่งคำขอดึง
tlin ) คำแนะนำ โครงการนี้มีการแจกจ่ายภายใต้ใบอนุญาต MIT ดู LICENSE สำหรับข้อมูลเพิ่มเติม