deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Excalidraw'da Oxlint: lint süresi 60 saniyeden 2 saniyeye düştü, ama 435 yeni uyarı incelenmeyi bekliyor

dev.to'da yayımlanan bir denemede Oxlint ve Oxfmt, Excalidraw'ın React kod tabanı üzerinde test edildi: bir dakika süren lint ve format kontrolü yaklaşık iki saniyeye indi, ancak Oxlint ayrıca ESLint'in hiç raporlamadığı 435 uyarıyı gün yüzüne çıkardı.

Excalidraw'da Oxlint: lint süresi 60 saniyeden 2 saniyeye düştü, ama 435 yeni uyarı incelenmeyi bekliyor

Rust araçları beş yıllık bir kod tabanıyla karşılaşıyor

dev.to'da yayımlanan uygulamalı bir deneme, Oxc projesinin Rust tabanlı lint ve format aracı olan Oxlint ve Oxfmt'ı sentetik bir benchmark yerine gerçek bir kod tabanına yöneltti. Hedef olan Excalidraw'da lint ve format kontrolünün toplam süresi yaklaşık bir dakikadan kabaca iki saniyeye düştü. Daha çarpıcı sonuç ise daha hızlı linter işini bitirdiğinde ne raporladığıydı. Yazıya göre bu iki araç haftada yaklaşık 26 milyon kez indiriliyor; dokümantasyon ise Oxlint'ın ESLint'ten 50 ila 100 kat, Oxfmt'ın Prettier'den yaklaşık 30 kat hızlı olduğunu iddia ediyor.

Kurulum

Açık kaynak beyaz tahta uygulaması Excalidraw, 710 JS/TS dosyasından oluşan React ve TypeScript bir kod tabanı ve hâlâ pek çok projede olduğu gibi yapılandırılmış: ESLint 7, Create React App kural setiyle birlikte ve Prettier 2.6, ESLint içinde bir plugin olarak çalışıyor. Süre ölçümleri sıradan bir dizüstü bilgisayardan alındı (Ryzen 5 5600H, 12 thread, 15 GB RAM); her komut için bir ısınma turu ve üç zamanlanmış tur koşulup medyan değer raporlandı.

Kronometre ne dedi

  • Excalidraw'ın ships ettiği haliyle Prettier plugin'iyle ESLint: 60,2 saniye
  • Prettier kuralı kapatılmış ESLint: 50,7 saniye
  • Tek başına Prettier 2.6: 15,3 saniye
  • Excalidraw'ın kuralları aktarılmış Oxlint: 1,5 saniye
  • Oxfmt: 0,41 saniye

Bu, tam kontrolü kabaca 30 kat hızlandırıyor — gerçek bir kazanım ama 50–100 katlık iddianın gerisinde. Aradaki fark plugin'lerle açıklanıyor: sıfır yapılandırmayla Oxlint 0,46 saniyede bitirdi; React, import ve erişilebilirlik kurallarının etkinleştirilmesi bunu 1,3–1,5 saniyeye çıkardı.

Deneme ayrıca Oxlint ile ilgisiz bir bulgu da ortaya çıkardı: Prettier'ı ESLint içinde plugin olarak çalıştırmak tur başına yaklaşık 10 saniyeye mal oluyordu. Aynısını yapan ekipler bu iki aracı bugün, yeni bir şey benimsemeden ayrıştırabilir.

435 uyarı

ESLint kod tabanında sıfır uyarı raporladı. Aynı kurallar aktarılmış Oxlint ise 435 uyarı ve 1 hata raporladı — ve bunların çoğu bug değildi. Yapılan incelemede 145 kullanılmayan değişken ve parametre bulundu; burada Oxlint'ın varsayılanları salt daha katı. Sayısal hassasiyet kaybına dair 50 uyarının 48'i, bilinçli olarak uzun matematiksel sabitler içeren tek bir dosyadan geliyordu; tek hata ise zaten rel="noopener" taşıyan ama template string'den oluşturulmuş bir target="_blank" bağlantısıydı ve Excalidrow'ın ESLint'e atlamasını söylediği bir satırdaydı.

Bazı bulgular gerçekten yararlıydı. Oxlint'ın React kuralları, effect içinde doğrudan setState çağıran 22 noktayı — yeni React rehberi değerin render sırasında hesaplanmasını tercih ediyor — ayrıca 10 async Promise executor'ı işaretledi. ESLint 7'nin kural seti bu kalıpları hiç tanımıyor. Yazının sonucu şu: hız kazancı anında elde ediliyor, ancak mühendislik çabası, yeni uyarılardan hangilerinin gerçekten önemli olduğuna kural kural karar vermeye kayıyor.

Göç etmeyenler

Excalidraw'ın üç kuralının yerleşik bir Oxlint karşılığı yok. En önemlisi no-restricted-syntax: proje bunu JSX içinde düz metin yerine t(...) çağrılarını zorunlu kılmak ve uygulamayı çevrilebilir tutmak için kullanıyor — kaybedilecek gerçek bir koruma bu. Diğerleri import/order (Oxfmt import'ları sıralayabiliyor ama bu bir lint hatası değil, biçimlendirme değişikliği) ve yazının önemsiz olarak nitelediği dot-notation.

Oxlint'ın eksik kurallar için yanıtı, özgün ESLint plugin'lerini Oxlint içinde yükleyen JS plugin'leri; ancak bu özellik hâlâ alpha olarak işaretli. Desteklenen alternatif, iki linter'ı birlikte çalıştırmak ve eslint-plugin-oxlint ile Oxlint'ın zaten kapsadığı kuralları devre dışı bırakmak. Bir de göç tuzağı var: @oxlint/migrate yalnızca ESLint v9/v10 flat config'lerini okuyabiliyor, dolayısıyla Excalidraw'ın eski .eslintrc.json dosyası elle taşınmak zorunda kaldı. ESLint 8 veya daha eski sürümlerdeki projeler aynı şeyi beklemeli.

Formatter sorunsuz göç ediyor

Oxfmt'ın göç komutu olan npx oxfmt --migrate=prettier ilk denemede çalıştı ve bir varsayılan uyuşmazlığını halletti: Excalidraw'ı Oxfmt'ın 100 karakteri yerine Prettier'ın 80 karakterlik satır genişliğinde tuttu. 102 dosyayı yeniden biçimlendirmek istedi (+1.163/−1.092 satır); bu ürkütücü görünse de aynı depoda Prettier 3'ün 126 dosyayı değiştirmek istediği düşünülünce öyle değil. Oxfmt'ın listesindeki her dosya Prettier 3'ün listesinde de vardı; yani bu hareketlilik Oxfmt'ın alışılmadık olmasından değil, Prettier 2'nin eski tarzından ayrılmaktan kaynaklanıyor. Ayrıca Prettier 2.6, Excalidraw'ın daha yeni generic sözdizimi kullanan bir TypeScript dosyasını ayrıştıramıyor — ekip bir skip yorumu eklemişti — buna karşılık Oxfmt dosyayı sessizce okudu.

Neden önemli

Deneme, kademeli ve düşük riskli önerilerle bitiyor: anında bir kazanç için Prettier'ı ESLint'ten çıkarın; Oxfmt'ı bir branch'te deneyin, yeniden biçimlendirmeyi ayrı bir commit olarak işleyin ve git blame'un kullanışlı kalması için o commit'i .git-blame-ignore-revs dosyasına ekleyin; Oxlint'ı ESLint ile birlikte çalıştırın ve eski aracı ancak ekibin bel bağladığı hiçbir şey geride kalmadığında emekliye ayırın. Benimseme zaten yolunda — Bluesky'ın uygulaması lint script'i olarak Oxlint çalıştırıyor ve Oxc dokümantasyonu Sentry, Kibana, Electron ve PostHog'ı kullanıcı olarak listeliyor. Rust tabanlı araçları tartan ekipler için daha geniş ders şu: benchmark'lar hızı satıyor ve hız gerçek; ancak göç maliyeti bekleme süresinde değil, kural eşliğinde ve uyarı incelemesinde yaşıyor.

  • #linting
  • #rust
  • #javascript
  • #react
  • #developer-tools

İlgili yazılar