تقدم Linter للغات القواعد الشبيهة بالذهاب.
Tlin هو Linter مصمم لكل من لغات البرمجة Go و GNO. إنه يعزز من وظائف Golangci-Lint كمحرك رئيسي لبطنيه ، مما يوفر تحليلًا قويًا للشفرة للغات القواعد النحوية الشبيهة.
مستوحاة من Clippy's Rust ، تهدف Tlin إلى تقديم اقتراحات إضافية لتحسين الكود بما يتجاوز قواعد Golangci-Lint الافتراضية.
لتثبيت Tlin CLI ، اتبع هذه الخطوات:
git clone https://github.com/gnolang/tlin cd tlingo install ./cmd/tlin هذا كل شيء! يمكنك الآن استخدام أمر tlin في المحطة الخاصة بك.
tlin < path > استبدل <path> بالملف أو مسار الدليل الذي تريد تحليله.
للتحقق من الدليل الحالي ، قم بتشغيل:
tlin . يدعم Tlin ملف التكوين ( .tlin.yaml ) لتخصيص سلوكه. يمكنك إنشاء ملف تكوين افتراضي عن طريق التشغيل:
tlin -init سيقوم هذا الأمر بإنشاء ملف .tlin.yaml في الدليل الحالي مع المحتوى التالي:
# .tlin.yaml
name : tlin
rules :يمكنك تخصيص ملف التكوين لتمكين أو تعطيل قواعد LINT محددة ، وتعيين عتبات التعقيد السيكلومي ، وأكثر من ذلك.
# .tlin.yaml
name : tlin
rules :
useless-break :
severity : WARNING
deprecated-function :
severity : OFF يسمح Linter الخاص بنا بإضافة قواعد LINT المخصصة إلى ما وراء قواعد 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 لهيكل 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.
} ج. أضف التنسيق الجديد إلى وظيفة GetFormatter في formatter/fmt.go .
func GetFormatter ( rule string ) IssueFormatter {
switch rule {
// ...
case "new_rule" : // Add your new rule here
return & NewRuleFormatter {}
default :
return & DefaultFormatter {}
}
}أضف اختبارات شاملة لقاعدتك الجديدة والمنسق.
قم بتحديث الوثائق لتضمين معلومات حول القاعدة الجديدة.
إرسال طلب سحب مع تنفيذك واختباراتك وتحديثات الوثائق.
من خلال اتباع هذه الخطوات ، يمكنك اقتراح قواعد LINT جديدة ومناقشتها وإضافة جديدة بطريقة منظمة ، مما يضمن دمجها بشكل صحيح في مشروع TLIN.
يدعم Tlin عدة أعلام لتخصيص سلوكها:
-timeout <duration> : تعيين مهلة لـ Linter (افتراضي: 5M). مثال: -timeout 1m30s-cyclo : تشغيل تحليل التعقيد السيكلومي-threshold <int> : تعيين عتبة التعقيد السيكلوم (الافتراضي: 10)-ignore <rules> : قائمة مفصولة بفواصل لقواعد الوبر التي يجب تجاهلها-cfg : تشغيل تحليل الرسم البياني لتدفق التحكم-func <name> : حدد اسم الوظيفة لتحليل CFG-fix : إصلاح المشكلات تلقائيًا-dry-run : تشغيل في وضع الجفاف (إظهار الإصلاحات دون تطبيقها)-confidence <float> : تعيين عتبة الثقة للتثبيت التلقائي (0.0 إلى 1.0 ، الافتراضي: 0.75)-o <path> : اكتب الإخراج إلى ملف بدلاً من stdout-json-output : ينتج عن الإخراج تنسيق JSON-init : تهيئة ملف تكوين TLIN جديد في الدليل الحالي-c <path> : حدد ملف تكوين مخصص نرحب بجميع أشكال المساهمات ، بما في ذلك تقارير الأخطاء وطلبات الميزات وطلبات السحب. لا تتردد في فتح مشكلة أو تقديم طلب سحب.
tlin ) اقتراح يتم توزيع هذا المشروع بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. انظر LICENSE لمزيد من المعلومات.