Oxlint حالا React Compiler رو نیتیو لینت میکنه
خلاصهٔ کاملتر
نویسنده تو مقالهش میگه پروژهش خیلی وقته با اکوسیستم Vite v8 و oxc کار میکنه؛ یعنی Rolldown به جای Rollup، Oxlint به جای ESLint، oxfmt به جای Prettier و Vitest به جای Jest. با این تعویضها فرمت و تست تقریباً آنی شده، ولی React Compiler همچنان گلوگاه لینت مونده بود. علتش هم اینه که لینتپلاگین قبلی توی Oxlint مجبور بود Babel و هستهٔ خود کامپایلر رو صدا بزنه تا AST بسازه و تحلیل کنه، همین باعث میشد تسک لینت بیش از سه برابر کندتر بشه.
Oxlint از نسخهٔ 1.70 که ژوئن ۲۰۲۶ منتشر شد، یه rule نیتیو با اسم react/react-compiler آورده. این rule با یه crate اختصاصی به اسم oxc_react_compiler کار میکنه و کاملاً بینیاز از Babel و escape hatch پلاگین JS ـه. نویسنده میگه تمام قوانین قبلی رو تست کرده و همه پشتیبانی میشن؛ فقط یه باگ کوچیک روی generic تایپها بود که تو v1.73 حل شد. نتیجهٔ سوییچ به گفتهٔ خودش: تسک لینتشون از حدود ۲۹.۲ ثانیه به ۹.۱ ثانیه رسیده، یعنی حدود ۳.۲ برابر تندتر. اگه پلاگین perfectionist رو هم که معادل نیتیو نداره حذف کنه، همون کار تو ۲.۶ ثانیه اجرا میشه، حدود ۱۱ برابر.
یه آپشن مخصوص Oxlint هم به اسم reportAllBailouts روی همین rule هست. با فعال کردنش، هر جا React Compiler مجبور بشه از یه کامپوننت یا هوک bail out کنه (یعنی از memoization خودکار صرفنظر کنه)، بهعنوان ارور گزارش میشه. اینجوری میشه توی سطح لینت اجبار کرد که همهجای کدبیس با React Compiler سازگار بمونه. نویسنده هشدار میده که یه trade-off هم داره: این یه rule جمعکنندهست، پس اگه رو یه خط disable ـش کنی، همهٔ diagnostic های کامپایلر رو با هم خفه میکنی.
قسمت build ولی هنوز فرق داره. نویسنده توضیح میده که oxc ژوئن ۲۰۲۶ یه transform نیتیو build-time هم مرج کرد اما مِینتینرهای Rolldown/Vite بعد از رلیز برش داشتن چون سایز باینری Rolldown حدود ۱۷٪ میرفت بالا. ۴ اوت ۲۰۲۶ پکیج oxc-transform-react نسخهٔ ۰.۰.۱ منتشر شده که Node bindings سطحپایین برای همون پورت Rust ـه. خودش داره یه Vite plugin آزمایشی میسازه که جای @rolldown/plugin-babel بشینه ولی هنوز آمادهٔ پروداکشن نیست.
یکی از رایجترین منابع bailout که نویسنده نشون میده، بازنویسی مقدار یه prop داخل کامپوننته. راهحلش هم سادهست، اسم prop رو موقع destructure عوض کن و یه const جدید بساز:
function MyComponent({ value: valueFromProps }) {
const value = valueFromProps ?? someStateValue;
// ...
}همین یه bailout ساده میتونه کل کامپوننت رو از memoization خودکار محروم کنه؛ با reportAllBailouts این جور اشتباهات خاموش قبل از پروداکشن دیده میشن.
نکات کلیدی:
- Oxlint نسخهٔ 1.70 (ژوئن ۲۰۲۶) rule react/react-compiler رو نیتیو اضافه کرد، بینیاز از Babel و پلاگین JS.
- تو تجربهٔ نویسنده، لینت از ۲۹.۲s به ۹.۱s رسید (۳.۲×)؛ بدون perfectionist میرسه به ۲.۶s (۱۱×).
- آپشن reportAllBailouts هر bailout از React Compiler رو با ارور نشون میده، ابزار انحصاری Oxlint.
- trade-off: rule جمعکنندهست، پس disable کردنش رو یه خط همهٔ diagnostic های کامپایلر رو خفه میکنه.
- سمت build هنوز آماده نیست، پکیج oxc-transform-react نسخهٔ ۰.۰.۱ (۴ اوت ۲۰۲۶) هنوز experimental ـه.




