Emacs Ruby autocomplete hampir berfungsi

132

Saya telah memperbarui konfigurasi emacs saya dengan menggunakan Rsense untuk memungkinkan drop down box autocomplete muncul saat mengetik kode. Ini berfungsi dengan baik di sebagian besar file kecuali saya telah menemukan itu tidak memungkinkan saya untuk memilih jawaban dari tabel ketika saya mengedit beberapa kode di ruby ​​on rails project saya.

Ini adalah pengaturan saya: https://github.com/map7/simple_emacs

Saya menggunakan ini di bawah Ubuntu 10.04.

Untuk file skrip ruby ​​sederhana ini berfungsi dengan baik. Saya dapat membuka file dan tipe baru.

"test".up...

Sama seperti saya mengetik karakter 'p' di atas daftar pilihan muncul dan saya bisa naik dan turun daftar dengan tombol panah dan pilih satu (misalnya: huruf besar) dengan tombol enter.

Apa yang tidak berfungsi adalah ketika saya melakukan tes yang sama persis tetapi dalam direktori dasar proyek rel.

Memperbarui:

Menemukan bahwa masalahnya adalah dengan (membutuhkan 'rel), jadi itu adalah sesuatu di plugin emacs-rails yang tidak disukai autocomplete.

Memperbarui:

Ada dalam emacs-rails -> rails-project.el. Jika saya berkomentar makro ini keluar maka autocomplete berfungsi, jika tidak maka makro tidak akan:

(defmacro* rails-project:with-root ((root) &body body)
  "If you use `rails-project:root' or functions related on it
several times in a block of code, you can optimize your code by
using this macro. Also, blocks of code will be executed only if
rails-root exist.
 (rails-project:with-root (root)
    (foo root)
    (bar (rails-core:file \"some/path\")))
 "
 `(let ((,root (rails-project:root)))
    (when ,root
      (flet ((rails-project:root () ,root))
        ,@body))))

Adakah yang bisa menjelaskan mengapa ini merusak autocomplete?

map7
sumber
1
Fungsi autocomplete digunakan dalam ruby, C ++,
lisp
1
maksud saya, di mana makro di sini digunakan?
milkypostman
1
Saya terutama menggunakan makro rel untuk melompat di antara file yang berbeda di MVC dan memulai DB / server / konsol / dll.
map7
1
Bisakah Anda mengekstrak solusi Anda untuk menjawab, dan memberinya tiket "berhasil"?
przemo_li
2
przemo_li, saya akan jika saya punya jawaban untuk ini tetapi autocomplete masih tidak berfungsi ketika Anda memiliki plugin rails.el diinstal dan Anda mencoba untuk autocomplete dalam file kode sumber mode minor rails.
map7

Jawaban:

7

Berikut ini sebuah pemikiran: Makro mengikat fletfungsi (rails-project:root)satu kali dengan nilai yang (rails-project:root)baru saja bodydijalankan. (Begitulah klaim peningkatan kinerja: Rupanya luar (rails-project:root)itu mahal, jadi menelepon sekali dan caching nilai sepertinya ide yang bagus.)

Sayangnya, jika ada kode di dalamnya bodyyang memiliki efek samping yang dimaksudkan untuk mengubah nilai yang (rails-project:root)dikembalikan, itu tidak akan berpengaruh. Perubahan itu tidak akan terlihat bahkan oleh kode lain yang disebut di dalam bodykarena Emacs lisp memiliki pengikatan fletnama yang dinamis .

Gene
sumber