3 poin oleh GN⁺ 2025-10-20 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-10-20
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 penulisnya) itu sebabnya saya memilih Rust untuk membuatnya, dan itulah alasan hal seperti ini sulit diimplementasikan di bahasa lain
  • 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

    • Dari yang saya dengar di presentasi terkait, sepertinya mereka memang sudah menggunakan data compiler