فحص Git وتحميل القواعد
يتأكد أن المجلد مستودع Git فيه commits، ثم يقرأ .clean-code-tracker.json أو يستخدم إعداداً جاهزاً للمشروع.
CleanLens يعيد تشغيل تاريخ Git ويقارن كل ملف قبل كل commit وبعده، فتُنسب كل مخالفة Clean Code إلى المطوّر الذي أدخلها فعلاً. ثم يعطي كل مطوّر درجة جودة عادلة لا تتأثر بحجم ما كتبه.
أو داخل VS Code: اضغط Ctrl/⌘ + P والصق الأمر.
مساعدات الذكاء الاصطناعي تولّد مئات الأسطر في دقائق، ونادراً ما يُراجَع كل سطر. فتتسرّب مفاتيح API إلى Git، وتُبتلع الأخطاء في catch فارغ، وتتضخّم الدوال وتتكرر. CleanLens يفحص كل سطر، ويخبرك بالملف والسطر بالضبط، وبنقرة واحدة تصل إليه.
مفاتيح وكلمات مرور مكتوبة في الكود، أخطاء مبتلعة، وعمليات بلا معالجة أخطاء.
دوال طويلة ومعقّدة، تكرار، كود غير مستخدم، وأسماء غامضة.
كل مخالفة مع الملف ورقم السطر ومستوى الخطورة، وبنقرة يُفتح الملف على السطر نفسه.
هذه بعض الأمثلة فقط مما يمكن لـ CleanLens اكتشافه.
انقر على أي مخالفة للانتقال إلى سطرها
1import { S3Client } from "@aws-sdk/client-s3";23export const config = {4 region: "eu-central-1",5 retries: 3,6 timeoutMs: 8000,7};89// generated: connect to storage10export const s3 = new S3Client({11 region: config.region,12 credentials: { accessKeyId: "AKIAIOSFODNN7EXAMPLE",13 secretAccessKey: "wJalrXUtnFEMI/K7MDENG" },14});
أدوات مثل git blame والـ linters العادية تنسب المشاكل لآخر من عدّل السطر أو الملف. النتيجة تقارير ظالمة: من يصلح خطأً إملائياً في ملف قديم يرث كل مشاكله، ومن كتبها يختفي من الصورة.
1import { db } from './lib'2export async function handle(req, a, b, c, d, e, f) {maxParameters3 const data1 = await db.query(req.q)clearNames4 try { save(data1) } catch (err) {}emptyCatch5 console.log('debug', data1)debugStatement6 // ...7 return formatTotal(data1) // was: fromatTotalchanged8}
تُحسب على ليلى، رغم أنها صحّحت خطأً إملائياً في السطر 7 فقط.
المخالفات الأربع كانت موجودة قبل الـ commit، فتُصنّف existing ولا تُحسب على أحد. السطر 7 نظيف.
التعديلات على المسافات فقط تُتجاهل، والكود المنقول بين الملفات يُتتبّع.تابع التمرير. العدسة في الخلفية تمشي على تاريخ الـ commits كما يفعل التحليل.
يتأكد أن المجلد مستودع Git فيه commits، ثم يقرأ .clean-code-tracker.json أو يستخدم إعداداً جاهزاً للمشروع.
14 قاعدة Clean Code على JS/TS/JSX/TSX عبر شجرة الـ AST، وعلى Python بطريقة تقريبية، مع كشف الكود المكرر.
يمشي على آخر 500 commit (قابلة للتغيير). لكل ملف تغيّر يأخذ diff -w -M -C ويحلل النسخة قبل الـ commit وبعده.
بصمة ثابتة لكل مخالفة (rule + path + symbol + context) تتعرف عليها حتى لو تغيّر رقم سطرها. تُحسب على الكاتب فقط إن ظهرت في أسطر غيّرها أو دالة عدّلها.
درجة لكل مطوّر في ثلاث فئات. النتائج تُخزّن لكل commit، فالتشغيل التالي لا يحلل إلا الـ commits الجديدة.
الدرجة تقيس كثافة المخالفات التي أدخلها المطوّر لكل 1000 سطر كتبها. كتابة كود أكثر لا ترفع الدرجة ولا تخفضها، والمساهمة تُعرض بجانبها منفصلة.
شغّلها أو أوقفها، وغيّر شدتها (low / medium / high / critical) وحدودها. ملف مشترك للفريق في المستودع، وملف محلي لتفضيلاتك الشخصية.
دالة أطول من الحد.
40 سطراًملف أطول من الحد.
400 سطردالة تأخذ معاملات كثيرة.
5Cyclomatic complexity فوق الحد.
10شروط وحلقات متداخلة بعمق.
4كتلة متطابقة تتكرر في المشروع.
6 أسطرimport أو متغير أو دالة لا تُستخدم.
أسماء مبهمة مثل data1 أو x.
عملية قد تفشل بلا try.
كتلة catch أو except فارغة.
مفتاح API أو كلمة مرور مكتوبة مباشرة.
console.log وdebugger وprint.
كلاس بدوال كثيرة، أو دالة طويلة ومعقدة معاً.
10 دوالدالة معقدة بلا JSDoc أو docstring.
تعقيد ≥ 15واجهتان فوق محرك تحليل واحد: إضافة VS Code للعمل اليومي، وأداة سطر أوامر للفريق والـ CI.
من Marketplace، ثم افتح مجلداً فيه مستودع Git.
من لوحة الأوامر Ctrl/⌘ + Shift + P. يكتشف نوع المشروع ويقترح إعداداً جاهزاً، ثم يكتب ملف القواعد بعد موافقتك.
يشغّل التحليل كاملاً ويفتح لوحة التحكم تلقائياً.
تفتح الملف على السطر نفسه. وأعد فتح اللوحة متى شئت بـ Open Dashboard.
المخالفات تظهر في المحرر مثل أي linter، دون انتظار تحليل كامل. خط متموّج، وتلميح عند المرور، ومدخل في لوحة Problems.
function handleRequest(req, res) { // 63 lines ... }
CleanLens: Configure Rulesيفتح ملف القواعد، ويعرض إنشاءه إن لم يكن موجوداً.# تقرير نصي للمستودع الحالي $ cleanlens # كل المخالفات، بإعداد Django $ cleanlens ./services/api --preset django --violations # تقرير Markdown للمشاركة مع الفريق $ cleanlens --markdown > report.md # JSON للوحات البيانات والمقارنة بين تشغيلين $ cleanlens --json > clean-code.json # بوابة جودة: افشل عند أي مخالفة high أو أعلى $ cleanlens --fail-on high Developers: 5 · Analyzed commits: 480 ✖ exit 1 violations at or above "high"
# .github/workflows/clean-code.yml
on: [pull_request]
jobs:
analyze:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npx cleanlens --fail-on criticalfetch-depth: 0 ضروري لأن النسب يحتاج تاريخ الـ commits كاملاً. أكواد الخروج: 0 نجاح، 1 بوابة الجودة فشلت، 2 تعذّر التحليل.
صورة عادلة مبنية على بيانات: من يرفع جودة الكود، ومن يضيف مشاكل جديدة، ومن يصلح القديم.
مراجعة جودة الكود باستمرار، دون أن يتحمّل أحد إرثاً لم يكتبه.
بوابة جودة في الـ pipeline أو قبل الـ commit، بمخرجات JSON وأكواد خروج واضحة.
ملاحظات فورية في المحرر أثناء الكتابة، قبل أن تصل المشكلة إلى الـ commit.
لا كود يخرج من الجهاز ولا خدمة سحابية، فيناسب المشاريع الحساسة والمغلقة.
كل التحليل يحدث محلياً. لا يُرسل أي كود أو بيانات عن المطوّرين إلى أي مكان، ولا يحتاج حساباً أو تسجيل دخول.
نذكر حدود الأداة بوضوح، لأن العدالة تبدأ من الشفافية.
الدرجة إشارة لتحسين جودة المشروع. اعرضها دائماً مع تفاصيل المخالفات ومستوى الثقة والقواعد المستخدمة.
الملفات بلغات أخرى تُعدّ غير محلَّلة.
المخالفات الأقدم من النافذة تظهر existing ولا تُحسب. وسّعها بـ --full-history.
يُكشف على آخر نسخة (HEAD) فقط. داخل كل commit يُقاس التكرار داخل الملف.
CleanLens يتطوّر باستمرار. هذه الميزات التي نبنيها للإصدارات القادمة، وتصلك تلقائياً عبر تحديثات VS Code فور صدورها.
شغّل اختبار ضغط على موقعك أو الـ API، واعرف كم مستخدماً متزامناً يتحمّل قبل أن يبطؤ أو يتعطّل، وأين تبدأ نقطة الانهيار.
قواعد وحدود تتكيّف مع نوع مشروعك: واجهة React، أو API على Node، أو خدمة Python، أو مكتبة، مع إمكانية تعديل كل شيء حسب حاجة فريقك.
رصد أنماط خطرة مثل حقن SQL واستخدام eval والمدخلات غير المُتحقَّق منها، إلى جانب كشف المفاتيح الموجود اليوم.
اقتراحات إصلاح تلقائية لأشهر المخالفات مباشرة من المحرّر، كحذف console.log أو معالجة catch فارغ.
تعليقات CleanLens على كل Pull Request في GitHub، تُظهر فقط المخالفات التي أضافها هذا التغيير.
ثبّت CleanLens اليوم، وكل ميزة جديدة تصلك تلقائياً مع التحديثات.
ثبّت مجاناًالمواعيد والتفاصيل قد تتغيّر أثناء التطوير.
ثبّت CleanLens، شغّل التحليل، واعرف من أدخل كل مشكلة فعلاً.