OmniDiff: دیفی که میفهمه چی عوض شده
خلاصهٔ کاملتر
OmniDiff یه ابزار diff هست که بهجای مقایسهٔ سادهٔ خطبهخط مثل diff یونیکس، اول میفهمه فایل چیه و بعد با الگوریتم مخصوص همون نوع مقایسهش میکنه. برای ۲۵ زبان برنامهنویسی از tree-sitter استفاده میکنه (یعنی کد رو به درخت ساختاری تبدیل میکنه و تغییرات رو روی این درخت پیدا میکنه). زبان از روی پسوند فایل تشخیص داده میشه و اگه پسوند ناشناخته باشه، فایل مثل متن ساده مقایسه میشه.
فایلهای غیرمتنی از روی بایتهاشون شناخته میشن، نه اسمشون. عکسها پیکسلبهپیکسل مقایسه میشن (انیمیشنها فریمبهفریم)، فونتها گلیفبهگلیف، آرشیوهایی مثل zip و tar فایلبهفایل و PDF صفحهبهصفحه. هر تغییر هم یه برچسب میگیره که نشون میده چقدر به چشم میاد، از «invisible» تا «redrawn» و «replaced». تو ترمینال هم عکسها رو با پروتکلهایی مثل kitty یا sixel واقعاً نشون میده.
نویسنده سه هدف براش گذاشته: سریع، مقاوم و دقیق. روی ۲۳۰۲ نمونهٔ تست، میانهٔ زمان diff حدود ۴.۲ میلیثانیهست و p99 حدود ۱۷۷ میلیثانیه. از بین ۴۴۲,۵۳۰ جفت فایل کد واقعی از حدود ۷۵۰۰ مخزن، ۹۹.۹۵ درصد بدون خطا تموم شدن. ولی خود نویسنده میگه هدف دقت هنوز کامل نشده: با preset --minimal حدود ۶۹.۶ درصد تستها دقیقاً با برداشت انسان یکیان، در حالی که هدف ۹۰ درصده.
برای استفاده هم یه TUI تعاملی داره، هم حالت headless برای اسکریپت و CI، هم خروجی JSON. با git بهعنوان difftool کار میکنه و با GIT_EXTERNAL_DIFF تو git diff هم استفاده میشه:
git config difftool.omnidiff.cmd 'omnidiff "$LOCAL" "$REMOTE"'
git difftool --tool=omnidiffبرای jj هم تنظیمات مخصوص خودش رو داره و حتماً باید diff-invocation-mode روی file-by-file باشه، چون OmniDiff فقط دو تا فایل رو مقایسه میکنه نه دو تا پوشه. لایسنس پروژه AGPL v3 هست و برای شرکتهایی که نمیتونن ازش استفاده کنن، لایسنس تجاری ماهانه هم هست. تو مقاله اومده که بخش زیادی از کد با کمک Claude Code نوشته شده و این موضوع پنهان نشده.
نکات کلیدی:
- برای ۲۵ زبان diff ساختاری با tree-sitter انجام میده.
- عکس، فونت، آرشیو، کرسر، PDF و کاتالوگ ترجمه رو هم بر اساس محتوا مقایسه میکنه.
- میانهٔ زمان diff کد ۴.۲ میلیثانیه و p99 حدود ۱۷۷ میلیثانیهست.
- ۹۹.۹۵ درصد از ۴۴۲,۵۳۰ تغییر کد واقعی رو بدون خطا پردازش کرده.
- دقت هنوز به هدف ۹۰ درصد نرسیده و با --minimal حدود ۶۹.۶ درصده.
- لایسنس AGPL v3 هست و نسخهٔ تجاری هم داره.




