Saya telah menghabiskan banyak waktu sekarang mencoba untuk mendapatkan aturan indentasi / tata bahasa SMIE apa pun bekerja.
Apakah ada contoh mode kecil, mainan atau kerangka berbasis SMIE dengan dokumentasi tentang cara kerjanya, atau diskusi di mana saja tentang cara menggunakannya? Sesuatu yang, katakanlah, mendefinisikan ekspresi sebagai string token yang diakhiri dengan titik koma dan blok sebagai beberapa ekspresi antara tanda kurung dan tidak ada yang lain. Sangat, sangat sederhana?
Pertanyaan spesifik: ketika menggunakan smie-config-show-indent 90% dari waktu saya mendapatkan respons ': list-intro "" -> nil'. Apa daftar-intro mendasarkan definisi suatu ekspresi atau daftar ekspresi? Mengapa katanya nihil dan masih indentasi baris berikut? Bagaimana saya mengubahnya?
Kedua: apakah ada hubungan antara tata bahasa saya dan aturan smie saya? Saya berasumsi ada karena keduanya masuk ke smie-setup, tetapi saya tidak dapat menemukan cara untuk mengatakan, "ketika Anda melihat 'blok', inden isinya", misalnya, berdasarkan tata bahasa yang mengidentifikasi blok .
Ketiga, SMIE tampaknya memiliki banyak aturan "dipanggang". Sebagai contoh, menendang saja memberikan penanganan umum tanda kurung, kawat gigi, dan tanda kurung. Apakah ada cara untuk melihat aturan-aturan ini atau mengubahnya? Atau apakah tabel sintaks melakukan semua ini dan SMIE benar-benar tidak melakukan apa-apa sama sekali (yang saya mulai curigai).
Akhirnya, ketika mencoba men-debug SMIE saya mencoba melakukan "edit, eval mode buffer, buka contoh kode dalam buffer lain, MX <my mode>, test" cycle tetapi tampaknya setiap perjalanan tidak menghapus aturan dari siklus sebelumnya. Bagaimana saya bisa yakin bahwa mode define-turunan dimulai dari clean sheet? Saya punya (kill-all-local-variable) di sana tetapi sepertinya tidak cukup dan akhirnya saya harus menutup emacs.
Saya tidak memposting contoh apa pun yang saya miliki karena saya tidak memiliki apa pun yang bekerja secara samar-samar, selain menyoroti (menggunakan font-lock-default, jadi itu bahkan bukan SMIE, saya kira). Saya perlu beberapa langkah bayi nyata.
sumber
lisp/progmodes/sh-script.el
tampaknya menggunakansmie.el
agak luas. Mereka juga sepertinya mendokumentasikan penggunaannya, jadi mungkin itu contoh yang lebih baik?Jawaban:
Mode yang banyak menggunakan SMIE adalah https://github.com/elixir-lang/emacs-elixir Tidak yakin apakah itu benar-benar berfungsi - lihat daftar bug terkait indent.
sumber
Anda bisa mulai dengan sesuatu seperti
sumber