- Editor struktural berbasis multi-kursor yang memungkinkan manipulasi langsung struktur kode, dengan beroperasi berpusat pada pohon sintaks (AST)
- Mendukung interaksi pada tingkat node sintaks, sehingga mengurangi kesenjangan antara niat penulisan kode dan tindakan pengeditan yang sebenarnya
- Dengan fitur multi-kursor, beberapa node sintaks dapat diubah atau direfaktor sekaligus untuk meningkatkan efisiensi pengeditan dalam skala besar
- Mendefinisikan ulang metode pengeditan berbasis mode, sehingga perpindahan pada berbagai unit seperti kata, baris, dan node sintaks dapat dilakukan secara konsisten
- Memperkuat akurasi dan konsistensi dalam pengeditan kode, serta menghadirkan paradigma pengeditan baru yang meningkatkan produktivitas pengembang
Gambaran Umum Ki Editor
- Ki Editor adalah editor struktural multi-kursor (Multi-cursor structural editor) yang menyediakan lingkungan pengeditan untuk menangani struktur sintaks kode secara langsung
- Berbeda dari pengeditan berbasis teks tradisional, editor ini memanipulasi elemen kode berdasarkan pohon sintaks (AST)
- Memungkinkan pengeditan langsung pada tingkat node sintaks tanpa kombinasi mouse atau keyboard yang rumit
Interaksi Node Sintaks
- Melalui fitur First-class syntax node interaction, struktur sintaks kode dapat ditangani secara langsung
- Berfokus pada pengurangan kesenjangan antara niat penulisan kode dan tindakan pengeditan yang sebenarnya
- Melakukan manipulasi pada unit sintaks tanpa perpindahan mouse atau input tombol yang rumit
Fitur Multi-kursor
- Memanfaatkan Multiple cursors untuk mengedit beberapa node sintaks secara bersamaan
- Manipulasi node sintaks secara paralel meningkatkan efisiensi pengeditan massal dan refaktorisasi
- Memproses tugas modifikasi kode yang berulang dengan cepat
Pendefinisian Ulang Pengeditan Berbasis Mode
- Fitur Redefine modal editing menstandarkan mode pemilihan
- Mendukung perpindahan pada berbagai unit seperti kata, baris, dan node sintaks dengan cara yang konsisten
- Meningkatkan fleksibilitas dan konsistensi dibanding pengeditan berbasis mode yang ada
Signifikansi
- Ki Editor menghadirkan pengalaman pengeditan yang berpusat pada struktur sintaks, sehingga meningkatkan akurasi dalam penulisan dan modifikasi kode
- Dengan menggabungkan multi-kursor dan manipulasi node sintaks, editor ini menawarkan pendekatan baru dalam pengeditan kode yang membantu meningkatkan produktivitas pengembang
1 komentar
Komentar Hacker News
Melihat fitur "First-class syntactic selection", saya langsung teringat shortcut Expand / Shrink Selection yang sering saya pakai di IDE JetBrains
Dengan kombinasi
Ctrl + WdanCtrl + Shift + W, area seleksi bisa diperluas atau diperkecil berdasarkan unit sintaksFitur ini benar-benar mengubah cara pandang saya terhadap interaksi dengan "teks" di dalam file
VS Code dan Zed juga punya fitur serupa, tetapi terasa terlalu kasar saat memperluas/mengecilkan seleksi
Tautan dokumentasi JetBrains
Dengan Cmd+Shift+V saya bisa membuka clipboard stack untuk mencari atau memilih riwayat salinan sebelumnya
Cmd+Shift+E menampilkan daftar lokasi terakhir, dan Cmd+Shift+A membuka action palette untuk fuzzy search semua perintah
Selain itu, fitur Local History memungkinkan pelacakan riwayat perubahan file jauh lebih rinci daripada Git
Fitur-fitur seperti ini mengarah pada konsep bisa "langsung mengedit dari buffer hasil pencarian"
incremental selectionberbasis tree-sitterDouble-click memilih kata, triple-click memilih seluruh argumen fungsi, dan klik ke-4 memilih seluruh
f(a,r,g,s), jadi unit sintaks membesar sesuai jumlah klikMemori otot itu masih tersisa sampai sekarang
Saya bereksperimen dengan ide agar commit, diff, dan cherry-pick juga bekerja pada unit sintaks seperti Ctrl+W
Detail terkait dirangkum di proyek librdx
Editing yang sadar AST mengingatkan saya pada kenyamanan bahasa keluarga Lisp
Di Lisp, hal-hal yang cukup dilakukan lewat manipulasi list sederhana di JS memerlukan LSP atau parser terpisah
Setelah menghabiskan akhir pekan dengan Clojure lalu kembali ke TypeScript, perintah paredit benar-benar terasa dirindukan
Dulu saya pernah membuat sendiri editor berbasis pohon sintaks
Karena yang dimanipulasi hanya pohon, bukan input teks, maka program yang salah secara sintaks tidak bisa ada
Namun, tantangan besarnya adalah membuat metode input yang benar-benar layak dipakai
Sekarang saya tidak bisa menjalankannya lagi karena perangkat display waktu itu sudah tidak ada, tetapi penjelasan proyeknya masih tersimpan
Akibatnya, kadang harus melewati jalur yang tidak intuitif, atau bahkan menulis ulang dari awal
Bahkan bisa ada struktur yang valid tetapi tidak punya jalur pembentukan
Secara teori menarik, tetapi rasanya seperti jalan buntu yang tidak praktis
Sulit mengalahkan universalitas dan kesederhanaan antarmuka berbasis teks
Batasan nyata seperti editor khusus, version control baru, dan ekosistem yang terputus terlalu besar
Karena manusia tidak berpikir dalam unit pohon, menulis kode hanya dalam keadaan yang selalu valid secara sintaks terasa sangat menyesakkan
Pada akhirnya, alat yang mengizinkan ketegasan yang fleksibel lah yang benar-benar bertahan (misalnya gradual typing di TypeScript)
Lihat simh, mame, kode VT11, dan dokumentasi
Ini belum menjadi editor umum, tetapi arah pengembangan pemilihan rentang pohon tampak menjanjikan
Tautan Pantograph
Dibangun di atas sistem parser yang menangani pohon yang belum lengkap tetapi tetap valid
Melalui representasi gap seperti
<//>, sintaks yang belum lengkap bisa ditangani dengan amanContoh:
2 + ·bisa di-parse menjadi pohon<BinaryExpression>Jika tertarik, diskusi berlangsung di komunitas Discord
Saya belum terbiasa dengan editing AST
Saya hanya memakai text object untuk hal-hal seperti argumen fungsi atau arglist
Fitur LSP yang saya gunakan pun sebatas go-to-definition dan rename
Pada akhirnya saya jadi merasa perlu meningkatkan kemampuan editor saya
Anda bisa menulis pola dengan sintaks yang hampir sama seperti kode, lalu melihat transformasinya langsung
Misalnya,
ast-grep -pattern '$A && $A.$B' --rewrite '$A?.$B' -lang tsmemungkinkan transformasi optional chainingMetavariabel seperti
$X,$A, dan lainnya memaksa pencocokan node yang samaAgen coding AI saat ini masih belum pandai menggunakan pola seperti ini, tetapi alatnya sendiri sangat solid
Kebanyakan kasus cukup dengan memilih per node sintaks lalu hapus/salin/ganti
Saya sendiri jarang melakukan refactor skala besar, jadi tidak merasa perlu mempelajarinya
Tetapi untuk pengembang layanan berskala besar, pendapatnya bisa sangat berbeda
Saya mendapat banyak wawasan saat belajar menulis macro di Elixir, dan Lisp juga berada di jalur yang sama
Pendekatannya berbeda di tiap bahasa, tetapi pada akhirnya menuju tujuan yang sama
Klasifikasi editor menurut saya seperti ini:
Ki termasuk kategori ketiga, dan saya terus mengamati proyek-proyek semacam ini
Node UI terlihat seperti teks biasa, tetapi sebenarnya berupa struktur pohon
Jika ingin memberi masukan awal, silakan hubungi lewat email di profil saya
Kesulitan editing AST terletak pada discoverability
Nodenya memang terlihat di layar, tetapi sering kali kita tidak tahu nama node tersebut
Karena itu saya sedang memikirkan plugin yang membungkus area di sekitar kursor dengan warna untuk memvisualisasikan tiap scope
Jadi alih-alih berpikir "pindah ke fungsi berikutnya", kita berpikir "pindah ke warna biru berikutnya"
d muntuk menampilkan label semua node sintaks yang sedang terlihat, lalu langsung melompat ke sanaOperasi seperti memilih bagian dalam atau luar dari node saat ini sangat berguna
Saya membuat integrasi Ki untuk VSCode
Setelah itu saya tidak banyak sempat berkontribusi lagi, tetapi saya tetap menganggap inovasi pada alat dasar seperti ini sangat penting
Tautan ekstensi Ki VSCode
Sebelum melihat contohnya saya belum terlalu paham,
tetapi pada bagian "First-class syntactic modification" saya terpukau melihat koma bisa otomatis ditambah/hapus
Logika implementasinya malah terasa cukup sederhana
Sekarang saya jadi ingin mencoba integrasi Ki atau rewrite berbasis AST di Zed juga
Cukup lihat kode di repositori Ki
Saya berencana mencobanya sendiri sebentar lagi
Saya suka bahwa editor ini independen dari layout keyboard
Menarik juga bahwa ini terinspirasi dari filosofi Emacs tentang "semuanya adalah buffer yang bisa diedit"
Tentu saja setiap editor punya trade-off besar, jadi sepertinya harus dicoba langsung baru terasa
Neovim memang hebat, tetapi model editing-nya punya batas
Kalau strukturnya benar-benar bisa diganti total, mungkin Helix atau Ki tidak akan diperlukan
Saat dijalankan dengan keyboard Dvorak, pemetaannya jadi kacau total
Ketika perangkat lunak merasa dirinya lebih pintar daripada pengguna, pengguna malah bisa merasa tidak berdaya
Tentu saja Emacs sudah punya ini
Paket combobulate adalah contohnya
Anda bisa menghapus node dengan M-k atau langsung mencari/mengedit lewat query tree-sitter
Integrasinya sudah sangat bagus, tetapi editor khusus AST masih punya ruang untuk mendorong UX lebih jauh
Fitur ini sangat cocok dengan workflow Helix
Rasanya seperti kepingan terakhir dalam pola move → action yang akhirnya pas