Plugin IDE Flowistry yang Membantu Memusatkan Kode Terkait di Rust
(github.com/willcrichton)- Flowistry adalah plugin IDE untuk bahasa Rust yang menyediakan fitur untuk menampilkan hanya bagian yang terkait dengan kode yang ingin difokuskan
- Plugin ini menganalisis aliran informasi dalam kode Rust dan secara visual menyoroti hanya kode yang terhubung langsung dengan variabel atau ekspresi yang sedang Anda lihat
- Dapat dipasang dengan mudah sebagai plugin VSCode, dan hanya menyorot terang kode yang memengaruhi atau dipengaruhi oleh variabel yang dipilih
- Beragam fitur seperti "Focus mode", "pengaturan mark" membantu meningkatkan pemahaman terhadap fungsi berskala besar atau kode yang kompleks
- Meskipun masih memiliki keterbatasan seperti dukungan perubahan interior yang belum matang, pembatasan cakupan analisis, alat ini sedang berkembang, dan merupakan alat terpisah dari Rust Analyzer
Ikhtisar dan Pentingnya Flowistry
Flowistry adalah plugin IDE untuk pengembang Rust yang menonjolkan dan menampilkan hanya kode yang terkait dengan bagian yang ingin difokuskan saat ini. Karena membantu mengidentifikasi bagian yang diperlukan dengan cepat dan jelas di dalam fungsi berskala besar atau alur kode yang kompleks, ini memberikan nilai praktis yang membedakannya dari alat analisis statis lain. Teknologi intinya adalah analisis aliran informasi yang menandai jalur dalam sebuah program di mana satu potongan kode dapat memengaruhi potongan kode lain. Flowistry menyajikan analisis aliran informasi ini berdasarkan karakteristik bahasa Rust, sistem ownership/lifetime, serta dasar Rust MIR (Mid-level Intermediate Representation).
Fitur Utama dan Cara Kerja
- Saat mengklik variabel atau ekspresi tertentu dalam kode Rust, kode yang mempengaruhi atau dipengaruhi bagian tersebut akan diredupkan
- Secara intuitif menyoroti hanya kode terkait, mengurangi kebutuhan membaca kode yang tidak perlu dan membantu memahami alur inti kode dengan lebih cepat
- Di dalam fungsi besar atau kode rumit seperti fungsi nyata pada Rust compiler, peran suatu argumen tertentu dapat diperiksa hanya dengan sekali lihat
- Algoritma dasarnya mengacu pada makalah "Modular Information Flow through Ownership" yang dipublikasikan di PLDI 2022
Instalasi dan Dukungan Lingkungan
Instalasi plugin IDE
- Flowistry dapat dipasang sebagai plugin VSCode melalui Visual Studio Marketplace atau Open VSX Registry
- Setelah membuka Rust workspace, instalasi dan inisialisasi berjalan otomatis
- NixOS belum didukung, dan pada platform ARM (seperti M1 Mac) perlu membangun langsung dari sumber
Plugin Rustc
- Fungsi analisis aliran informasi dipublikasikan sebagai crate terpisah dan dilengkapi dokumentasi serta API yang langsung disediakan
Cara Penggunaan dan Fitur
Menjalankan Awal
- Saat plugin dijalankan di VSCode, pemeriksaan tipe pada seluruh basis kode dilakukan terlebih dahulu
- Hasilnya disimpan dalam cache pada folder
target/flowistry
Masuk Focus Mode
- Gunakan perintah plugin "Toggle focus mode" (Ctrl+R Ctrl+A, dll.) untuk masuk ke mode fokus
- Ketika kursor berada di dalam sebuah fungsi, analisis aliran informasi otomatis dijalankan di dalam fungsi tersebut
- Setelah analisis selesai, hanya kode yang terkait yang disorot (proses analisis dapat memakan waktu hingga sekitar 15 detik)
Pengaturan Mark
- Untuk menahan area fokus tertentu saat meninjau kode lain, gunakan konsep "Mark" agar area saat ini dapat dipertahankan
- Dapat digunakan lewat "Set mark" (Ctrl+R Ctrl+S), "Unset mark" (Ctrl+R Ctrl+D) untuk mengunci dan melepaskan
Pemilihan Area Fokus
- Dengan perintah "Select focused region", Anda dapat memilih seluruh blok kode yang disorot sekaligus untuk salin, komentari, atau mengeditnya
Keterbatasan dan Hal yang Perlu Diperhatikan
- Interior Mutability belum sepenuhnya didukung
- Contoh: pada struktur seperti Arc, Mutex, pelacakan tidak lengkap karena perbedaan lifetime referensi antar referensi
- Area fokus terkadang terasa terlalu luas
- Karena tidak dapat menganalisis isi internal dari fungsi yang dipanggil
- Ada kode yang tidak dapat dipilih
- Karena keterbatasan pemetaan di tingkat MIR ke kode sumber, tidak semua kode dapat dipilih
- Fungsi bersarang, closure, dan async tidak dapat dianalisis bersama-sama
- Analisis selalu dilakukan hanya pada unit fungsi terkecil yang memuat kursor saat ini
FAQ dan Lainnya
- Jika instalasi rustup gagal: instal rustup secara manual lewat perintah, lalu lanjutkan di VSCode
- Alasan tidak terintegrasi dengan Rust Analyzer: Rust Analyzer tidak mendukung analisis MIR dan borrow checker, sehingga berada dalam bentuk plugin terpisah
- Masalah highlight kode: lihat dokumentasi keterbatasan, untuk pertanyaan tambahan silakan gunakan issue di GitHub, Discord, dan Twitter
Lisensi dan Informasi Open Source
- Dirilis dengan lisensi MIT
- Bahasa pemrograman utamanya adalah Rust, TypeScript, serta Python, HTML, JavaScript, dan lainnya
- Saat ini (per September 2025) memegang 2.6k stars, 61 forks dan sedang dikembangkan serta dipelihara secara aktif
Kesimpulan
Flowistry merupakan alat open source yang secara nyata memberikan keuntungan signifikan dalam memahami konteks dan meningkatkan fokus di lingkungan pengembangan Rust. Khususnya karena mengintegrasikan analisis aliran informasi secara real-time ke dalam IDE secara visual, ia memberi pengalaman yang berbeda dari alat analisis statis lain maupun Rust Analyzer. Untuk pembelajaran Rust, refactoring, code review, dan berbagai skenario lainnya, Flowistry dapat diharapkan memiliki tingkat pemanfaatan dan efisiensi yang tinggi.
1 komentar
Komentar Hacker News
Makalah aslinya ada di sini, saya sudah lama memikirkan back-reference yang diperiksa secara statis di Rust; salah satu alasan besar pengguna C/C++ mengeluh tentang Rust adalah ketika A mereferensikan B, sulit bagi B untuk kembali memiliki pointer ke A, sehingga kebanyakan orang memakai jalan memutar yang tidak aman
Di Rust, ini bisa diimplementasikan dengan aman memakai Rc, RefCell, Weak, borrow(), borrow_mut(), upgrade(), downgrade(), dan sebagainya, tetapi kodenya jadi bertele-tele, ada overhead saat runtime, dan kadang panic terjadi pada double borrow; meski begitu, daya ekspresinya tetap memadai, saya merangkum catatan untuk pekerjaan yang sedang berlangsung
Bagian yang sulit diperiksa secara statis adalah memastikan apakah rentang borrowed saling tumpang tindih; jika scope lifetime tidak bertumpang tindih maka tidak ada konflik, tetapi pengecekan scope jadi lebih rumit saat ada pemanggilan fungsi atau pemanggilan fungsi generik, dan pendekatan Flowistry tampaknya bisa membantu
Yang agak mengganggu saya adalah Flowistry tidak sepenuhnya menangani interior mutability (perubahan internal seperti RefCell)
Dalam praktiknya, kuncinya adalah menemukan sekumpulan batasan yang memenuhi syarat seperti 1) sound, 2) bisa diperiksa dengan biaya rendah saat compile time, 3) memungkinkan penggunaan back pointer yang dibutuhkan kebanyakan orang seperti referensi ke parent node pada tree, dan 4) memberikan pesan diagnosis yang berguna saat masalah terjadi
Saya penasaran apakah di bahasa lain ada fitur untuk memeriksa hubungan dependensi yang lebih besar atau lebih informal di dalam body fungsi
Misalnya, jika parameter atau variabel foo di-highlight, apakah kita bisa langsung melihat bukan hanya penggunaan foo itu sendiri tetapi juga penggunaan semua variabel yang dibuat dari foo
Pemakaian borrow di Rust melacak hal seperti ini dengan sempurna, tetapi visualisasi seperti ini tampaknya juga akan sangat berguna untuk kode di bahasa lain
Saya rasa Flowistry sangat dibutuhkan untuk file di codebase modern yang sulit dipelihara seperti kode layout flexbox di servo, dan sebagai catatan, fungsi ini adalah salah satu file kode paling merepotkan dengan panjang lebih dari 400 baris
(Saya bisa saja salah) biasanya ini disebut "flow analysis", dan TypeScript menjalankannya di latar belakang untuk mempersempit tipe
Namun tidak ada fitur visualisasinya
Fitur seperti ini biasanya disebut "program slicing"
Saya rasa ini alat yang sangat berguna untuk menutupi saat orang tidak menulis kode dengan gaya yang dioptimalkan agar mudah dibaca manusia
Karena codebase tidak selalu ditulis agar enak dibaca, saya merasa alat seperti ini sangat membantu
Penulisnya menampilkan video presentasi yang membahas plugin dan riset rutinitas secara mendalam di Rust East Coast
Saya rasa ini fitur yang sangat keren, alasan Rust cocok untuk fitur seperti ini adalah karena sistem ownership-nya membatasi efek samping
Kalau ini ditempelkan ke Python dan sebagainya, pada runtime memori bisa dimanipulasi kapan saja dengan naik ke call stack, jadi tidak bisa dipercaya 100%
Tetap saja, ini benar untuk sebagian besar kasus, jadi saya berharap fitur seperti ini ditambahkan
Saya penasaran apakah ada alat serupa di TypeScript atau JavaScript
Kelihatannya keren, tetapi rasanya tidak perlu menyebutnya 'IDE'; mungkin lebih baik kalau cukup disebut plugin VSCode
Mungkin karena "Visual Studio Code" adalah merek dagang Microsoft, dan plugin ini berjalan di berbagai IDE berbasis open source seperti VSCodium, Cursor, dan lainnya
Di dokumentasinya juga memang tertulis sebagai plugin IDE
Ide untuk memfokuskan perhatian pada bagian penting kode tampaknya benar-benar bagus
Saya penasaran apakah ada yang mirip untuk JS/TS juga
Saya penasaran bagaimana pengalaman berkontribusi ke metode documentHighlight LSP milik rust-analyzer
Fungsinya bekerja cukup mirip dengan yang ditunjukkan di GIF
Rasanya fitur ini terlalu spesifik untuk dibuat sebagai plugin
Link spesifikasi LSP terkait
Dijelaskan di README, detailnya bisa dilihat di sini
Membutuhkan MIR(Mid-level Intermediate Representation)
Saya selalu memimpikan fitur seperti ini, dan berharap ada juga kemampuan untuk menunjukkan jalur aliran data dari luar fungsi (siapa yang memanggil fungsi ini)
Saya berpikir mungkin ini bisa dibantu dengan memanfaatkan ulang data dari compiler