L'extitant Ctags non funziona bene con Ruby, potete vedere che ci sono molti hack nel codice ruby.c e fondamentalmente fallisce nel riconoscere molti casi. Uno dei più importanti è questo bit:Conoscete un generatore di ctags alternativo per Ruby
class SomeModule::SomeClass
end
Ctags genera:
SomeModule someclass.rb /^class SomeModule::SomeClass$/;" c
che è sbagliato. L'entrata corretta e prevista è:
SomeClass someclass.rb /^class SomeModule::SomeClass$/;" c
Questo è molto limitante. Ci sono alcune patch per i ctag disponibili che non funzionano, ad es. https://github.com/xtao/overlay/blob/master/dev-util/ctags/files/ctags-5.5.4-ruby-classes.patch ma guardando il codice rubt ctags, questo ha davvero bisogno di una completa riscrittura.
Quindi ho giocato con un'altra opzione che è https://github.com/rdoc/rdoc-tags che funziona meglio, ma è lenta. Intendo davvero SLOW. La generazione di tag sul mio progetto è di 2 secondi con ctags ma un'ora con con questo strumento. Veramente.
Ho trovato un vecchio progetto che stava analizzando Ruby su se stesso e generando tag, ma era solo per Ruby 1.8. Era più lento di ctags, ma non così male.
Quindi sto cercando alcune alternative. Sei a conoscenza di altri generatori di rubinetti funzionanti che ti danno corretto output e sono veloci?
Grazie!
Edit: ho trovato molto bello progetto che funziona con Ruby 1.9+ ed è precisa e veloce. Lo consiglio:
https://github.com/tmm1/ripper-tags
O forse, se conosci veloce e funzionante il parser di Ruby | lexer che è facile da usare e quindi posso scrivere il mio generatore di tag. Dovrebbe funzionare con Ruby 1.8-2.0. – lzap
Nota a margine sull'uso di 'classe SomeModule :: SomeClass': non crea un ambito lexcical con' SomeModule' come genitore, dovresti evitarlo - vedi http://stackoverflow.com/questions/15119724/ruby-lexical- scope-vs-inheritance – tight