difftastic: diff بيفهم الكود مش السطور
difftastic أداة diff مفتوحة المصدر بتقارن الملفات حسب الـ syntax، فبتوريك التغيير الحقيقي بعد الـ reformat. إزاي تستخدمها مع git، والجديد في 0.72.0، وحدودها.
عملت format للملف، وفتحت الـ git diff لقيته صفحة كاملة أحمر وأخضر، مع إن التغيير الحقيقي كلمة واحدة. الموقف ده بيضيّع وقت في الـ code review أكتر ما نتخيل. difftastic أداة diff مفتوحة المصدر (رخصة MIT) بتحل المشكلة دي بطريقة مختلفة: بتقارن الملفات حسب الـ syntax بتاعها، مش سطر بسطر.
يعني إيه diff حسب الـ syntax؟
الـ diff العادي بيشوف الملف كسطور نص. difftastic بيفهم الكود نفسه، والأمر اللي بتشغّله اسمه difft. حسب الـ README بتاع المشروع:
- بيعرف بالظبط أنهي جزء من الكود اتغير، ويعلّمه في مكانه جوه السطر
- لو قسمت سطر على كذا سطر بعد reformat، بيوريك اللي اتغير فعلًا بس
- بيفرّق بين whitespace ليه معنى وتغيير indentation عادي
- بيدعم أكتر من 30 لغة، ولو امتداد الملف مش معروف بيرجع لـ diff عادي بيعلّم الكلمات اللي اتغيرت
التسطيب
- macOS:
brew install difftastic - Windows:
winget install difftastic - أو binary جاهز من صفحة الـ releases على GitHub
تستخدمه مع git إزاي؟
أسهل حاجة إنك تجرّبه من غير ما تغيّر أي config، بالأمر ده:
git -c diff.external=difft diff
ولو عايز تشوف آخر commit:
git -c diff.external=difft show --ext-diff
لو عجبك، تقدر تعمله alias في الـ .gitconfig وتستخدمه وقت ما تحب، وتفضل الـ diff العادي شغال زي ما هو. صفحة Git في الـ manual الرسمي فيها الطرق المختلفة.
الجديد في 0.72.0
آخر إصدار هو 0.72.0، نزل يوم 29 أكتوبر 2026. حسب الـ release notes:
- الـ preprocessing بقى أسرع، والأداة بقت بترجع للـ text diff مرات أقل
- الـ parsers بتاعة Haskell و Kotlin اتحدّثت
- Verilog و F# اتشالوا عشان حجم الـ binary، و Smali اتشالت لأن الـ parser بتاعها مبقاش متصان
خلي بالك من الحدود
- مخرجات difftastic معمولة للقراءة بس، مش بتطلّع patch تقدر تطبّقه بعدين
- ممكن ياكل memory كتير على ملفات فيها تغييرات كتير
- نسخ git من 2.43.1 وأقدم ممكن تقع مع الـ external diff لو صلاحيات الملفات اتغيرت
رأيي
الـ code review بيبقى أسهل بكتير لما الـ diff يوريك المعنى مش الشكل، خصوصًا بعد formatter أو refactor كبير. مش هيحل محل الـ diff العادي في كل حاجة، بس كأداة جنبه للقراءة بيوفّر وقت حقيقي. جرّبه على آخر PR عندك وقارن.
إنت بتراجع الـ diffs في الترمنال ولا في الـ IDE؟
المصادر
- Git
- DevTools
- CLI
- Code Review
- Open Source