Rust'taki İlgili Koda Odaklanmayı Kolaylaştıran Flowistry IDE Eklentisi
(github.com/willcrichton)- Flowistry, Rust dili için bir IDE eklentisidir ve odaklanmak istediğiniz ilgili kod parçalarıyla bağlantılı kısımları yalnızca göstermeyi sağlar
- Bu eklenti, Rust kodundaki bilgi akışını analiz ederek, şu anda baktığınız değişken veya ifadeyle doğrudan ilişkili kodu görsel olarak vurgular
- VSCode eklentisi olarak kolayca kurulabilir ve seçilen değişkene etki eden veya ondan etki gören kodu yalnızca parlak biçimde gösterir
- "Focus mode", "mark ayarı" gibi çeşitli özelliklerle büyük fonksiyonların veya karmaşık kodların anlaşılmasını artırır
- İç değiştirilebilirliğin (Interior Mutability) tam desteklenmemesi, analiz kapsamının sınırlı olması gibi kısıtlar olsa da gelişmeye devam ediyor ve Rust Analyzer'dan bağımsız bir araçtır
Flowistry Genel Bakış ve Önemi
Flowistry, Rust geliştiricileri için bir IDE eklentisidir; kod içinde odaklanmak istediğiniz kısım ve ona ilişkin parçaları ön plana çıkarır. Büyük fonksiyonlarda ve karmaşık kod akışlarında ihtiyaç duyulan bölümü hızlı ve net bir biçimde görmenizi sağlayarak, diğer statik analiz araçlarından farklı bir pratik değer sunar. Temel teknolojisi bilgi akışı analizidir; bu yaklaşım, bir programda bir kod parçasının diğerine nasıl etki edebileceğini takip eden bir veri akışı analizidir. Flowistry bu analizini Rust'ın sahiplik ve ömür sistemine ve Rust MIR (Mid-level Intermediate Representation) temeline dayalı olarak sağlar.
Ana Özellikler ve Çalışma Şekli
- Rust kodunda belirli bir değişkeni veya ifadeyi tıkladığınızda, o noktaya etki eden veya ondan etki gören kod dışındaki kısımlar flu hale gelir
- İlgili kodlar sezgisel olarak yalnızca ilgili kod olarak öne çıkarılır; gereksiz kod okumaya ihtiyaç azalır ve kodun temel akışı hızlıca anlaşılır
- Büyük fonksiyonlarda veya Rust derleyicisinin gerçek fonksiyonlarına benzer karmaşık kodlarda, belirli bir argümanın oynadığı rol tek bakışta görülebilir
- Analizin temelini oluşturan algoritma, PLDI 2022'de yayımlanan "Modular Information Flow through Ownership" makalesine dayanır
Kurulum ve Ortam Desteği
IDE Eklenti Kurulumu
- Flowistry, Visual Studio Marketplace veya Open VSX Registry'den bir VSCode eklentisi olarak kurulabilir
- Rust çalışma alanı açıldıktan sonra otomatik kurulum ve başlatma gerçekleşir
- NixOS desteklenmez; ARM (M1 Mac vb.) platformlarda doğrudan kaynak koddaki koddan derlenmelidir
Rustc Eklentisi
- Bilgi akışı analiz fonksiyonu bağımsız bir crate olarak yayımlanır; ayrıntılı belge ve API burada doğrudan sunulur
Kullanım ve Özellik Ayrıntıları
İlk Çalıştırma
- VSCode'da eklenti çalıştırıldığında kod tabanı genelinde tip denetimi önceden yapılır
- Bu sonuç
target/flowistryklasörüne önbelleğe alınır
Focus Mode'e Girme
- Eklentinin "Toggle focus mode" komutu (Ctrl+R Ctrl+A vb.) kullanılarak odak moduna geçilir
- İmleç bir fonksiyonun içine yerleştirildiğinde, o fonksiyon içinde otomatik olarak bilgi akışı analizi başlatılır
- Eklenti analizi tamamladığında yalnızca ilgili kodlar vurgulanır (analiz bazen yaklaşık 15 saniye sürebilir)
Mark Ayarı
- Belirli bir odak bölgesini sabitleyip başka kodları incelerken, "Mark" kavramını kullanarak mevcut bölge korunur
- "Set mark"(Ctrl+R Ctrl+S), "Unset mark"(Ctrl+R Ctrl+D) ile sabitleme ve geri alma yapılabilir
Odak Bölgesi Seçimi
- "Select focused region" komutu kullanılarak, vurgulanan kod bloğu bir seferde seçilip kopyalanabilir, yorumlanabilir veya düzenlenebilir
Sınırlamalar ve Dikkat Edilmesi Gerekenler
- İç değiştirilebilirlik (Interior Mutability) tam olarak desteklenmez
- Örneğin Arc, Mutex gibi yapılarda referanslar arasındaki ömür farkı nedeniyle tam izleme mümkün olmayabilir
- Odak alanı bazen beklendiğinden genişleyebilir
- Çağrılan fonksiyonun içine kadar gerçek analiz yapılamadığı için
- Seçilemeyen kod olabilir
- MIR seviyesinde kaynak kod ile eşleme sınırlamaları nedeniyle tüm kod seçilemez
- Fonksiyon iç içe geçme, closure'lar ve async birlikte analiz edilemez
- Her zaman yalnızca imlecin içinde bulunduğu en küçük fonksiyon birimiyle analiz yapılır
SSS ve Diğer
- rustup kurulumu başarısız olursa: rustup'ı komut satırından manuel olarak kurup VSCode'da devam etmeniz gerekir
- Rust Analyzer ile entegre edilmediği durumun nedeni: Rust Analyzer, MIR analizi ve borrow checker desteği sunmadığı için ayrı bir eklenti şeklindedir
- Kod vurgulama ile ilgili sorunlarda: Sınırlamalar dokümanına bakın, ek sorular için GitHub issue, Discord ve Twitter kullanılabilir
Lisans ve Açık Kaynak Bilgisi
- MIT lisansı ile açık kaynak olarak yayınlanmıştır
- Başlıca programlama dilleri Rust, TypeScript; ayrıca Python, HTML, JavaScript
- Eylül 2025 itibarıyla 2.6k yıldız, 61 fork ile aktif şekilde geliştirilip korunuyor
Sonuç
Flowistry, Rust geliştirme ortamında karmaşık kodun bağlamını anlamayı ve odaklanmayı pratik şekilde artıran bir açık kaynak aracıdır. Özellikle bilgi akışı analizini gerçek zamanlı olarak IDE'ye entegre edip görsel biçimde sunmasıyla, mevcut statik analiz araçlarından ve Rust Analyzer'dan farklı bir deneyim sunar. Rust dili öğrenimi, yeniden düzenleme, kod inceleme gibi farklı senaryolarda yüksek kullanılabilirlik ve verimlilik sağlar.
1 yorum
Hacker News görüşü
Asıl makale burada, Rust'ta statik olarak denetlenen back-reference konusu üzerinde uzun zamandır düşünüyorum; C/C++ kullanıcılarının Rust'tan şikayet etmesinin büyük nedenlerinden biri, A B'ye referans verirken B'den tekrar A'ya bir pointer tutmanın zor olması; bu yüzden çoğu zaman güvensiz dolaylı çözümler kullanılıyor
Rust'ta Rc, RefCell, Weak, borrow(), borrow_mut(), upgrade(), downgrade() vb. kullanılarak bu güvenli şekilde yapılabiliyor ama kod uzuyor, çalışma zamanında ek yük oluşuyor ve çift borrow durumlarında panic de görülebiliyor; yine de ifade gücü yeterli. Hâlen sürmekte olan çalışmamla ilgili notları derledim
Statik denetimin zor kısmı, borrowed kapsamların çakışmadığını doğrulamak; lifetime scope'ları çakışmıyorsa sorun yok. Fonksiyon çağrıları veya generic fonksiyon çağrılarında scope denetimi daha zorlaşıyor, burada Flowistry'nin yaklaşımı yardımcı olabilir
Flowistry'nin interior mutability'yi (RefCell vb. ile iç değiştirilebilirlik) tamamen ele almaması aklıma takılıyor
Pratikte asıl mesele, 1) sound olması, 2) compile time'da düşük maliyetle denetlenebilmesi, 3) ağaçta üst düğüme referans gibi insanların çoğunun ihtiyaç duyduğu back pointer kullanımını mümkün kılması, 4) sorun çıktığında faydalı tanı mesajları vermesi gibi koşulları sağlayan kısıtları bulmak
Diğer dillerde, fonksiyon gövdesi içindeki daha büyük ya da daha gayriresmî bağımlılık ilişkilerini denetleyen bir özellik olup olmadığını merak ediyorum
Örneğin parametre ya da değişken
foovurgulandığında, yalnızcafookullanımını değilfoo'dan türetilen tüm değişkenlerin kullanımını da tek seferde görebiliyor muyuz, bunu merak ediyorumRust'taki borrow kullanımı bu tür takibi kusursuz yapıyor ama böyle bir görselleştirme diğer dillerin kodlarında da çok faydalı olurdu
Flowistry'nin, servo'nun flexbox layout kodu gibi bakımı zor modern kod tabanı dosyalarında çok gerekli olduğunu düşünüyorum; bu fonksiyon 400 satırı aşan, gördüğüm en sıkıntılı kod dosyalarından biri
(Yanılıyor olabilirim ama) buna genel olarak "flow analysis" deniyor ve TypeScript bunu arka planda çalıştırarak tipleri daraltıyor
Ama görselleştirme özelliği yok
Bu tür özellikler genellikle "program slicing" diye adlandırılır
İnsanların kolay okuması için optimize edilmiş bir tarzda kod yazılmadığında, bunu telafi eden çok faydalı bir araç gibi görünüyor
Temel kod her zaman okunabilir yazılmadığı için, bu tür araçların çok yardımcı olduğunu düşünüyorum
Yazar, Rust East Coast'ta eklenti ve rutin araştırmasını derinlemesine ele aldığı bir sunum videosu paylaştı
Bence gerçekten harika bir özellik; Rust'ın buna uygun olmasının sebebi, ownership sistemi sayesinde yan etkilerin sınırlı olması
Bunu Python gibi dillere ekleseniz bile, çalışma zamanında her an call stack boyunca yukarı çıkıp belleği manipüle etmek mümkün olduğu için %100 güvenilir olmaz
Yine de çoğu durumda doğru olur, bu yüzden böyle bir özelliğin eklenmesini umuyorum
TypeScript veya JavaScript'te buna benzer bir araç olup olmadığını merak ediyorum
Güzel görünüyor ama buna özellikle "IDE" demek yerine sadece bir VSCode eklentisi dense daha iyi olurmuş gibi geliyor
Muhtemelen "Visual Studio Code" Microsoft'un ticari markası olduğu için; eklenti VSCodium, Cursor ve benzeri açık kaynak tabanlı IDE'lerin genelinde çalışıyor
Belgelerde de bunun bir IDE eklentisi olduğu açıkça yazıyor
Kodun önemli kısımlarına odaklanma fikri gerçekten çok iyi görünüyor
JS/TS için de buna benzer bir şey olup olmadığını merak ediyorum
rust-analyzer'ın
documentHighlightLSP metoduna katkı sunma sürecinin nasıl olduğunu merak ediyorumGIF'te gösterilen şeyle oldukça benzer çalışıyor
Eklenti olarak yapmak için fazla spesifik bir özellik gibi duruyor
İlgili LSP spesifikasyonu bağlantısı
README'de açıklanıyor; ayrıntılar burada görülebilir
MIR (Mid-level Intermediate Representation) gerekiyor
Hep böyle bir özelliğin hayalini kurdum; verinin fonksiyon dışından nasıl aktığını, yani bu fonksiyonu kimin çağırdığı tarafı da gösterebilmesini isterdim
Compiler verilerini yeniden kullanarak buna yardımcı olunamaz mı diye düşünüyorum