2012-04-12 11 views
16

ja generującego plik Tagi dla emacs dla mojego Ruby on Rails projektu za pomocą następującego polecenia:Emacs znaczniki dla Ruby on Rails projektu

ctags -f TAGS --extra=-f --languages=-javascript --exclude=.git --exclude=log -e -R . $(rvm gemdir)/gems/ 

Kiedy próbuję znaleźć tagów (przy użyciu M-.) niektóre znaczniki są w porządku pracy, ale z dużą ilością innych znaczników pojawiają się błędy takie jak:

tag-find-file-of-tag-noselect: File /Users/simao/Documents/sp/ofe/° ¡ not found 

etags-goto-tag-location: Rerun etags: `^class Tools::FilteringSteps' not found in /Users/simao/Documents/sp/ofe/lib/geo_db.rb 

Jak ty generowania tagów dla swoich projektów RoR z emacs? Czy kiedykolwiek widziałeś ten problem?

To wyjście ctags --version

Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert 
Compiled: Mar 9 2012, 15:47:35 
Addresses: <[email protected]>, http://ctags.sourceforge.net 
Optional compiled features: +wildcards, +regex 

moja wersja emacs:

GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-04-02 
+0

Dla jasności, * jest * '^ class Narzędzia :: FilteringSteps' w'/Users/simao/Documents/sp/ofe/lib/geo_db.rb'? – phils

+0

Nie, to nie jest ... – simao

+0

Mówisz, że etagi źle indeksowały Twój projekt, a plik TAGS uważa, że ​​klasa/metoda znajduje się w innym pliku niż miejsce, w którym faktycznie mieszka? (Gdzie * czy * rzeczywiście żyje?) – phils

Odpowiedz

0

Wydaje się, że może to być istotne:

Szczególnie należy zwrócić uwagę na komentarz w drugim linku, co sugeruje ten błąd istnieje od Emacs 22.

Zakładając, że nie używasz Emacs 24, to brzmi jak należy zastosować tę poprawkę etags.el (i ponowna kompilacja bajtów).

(Jeśli używasz wersji Emacsa 24, który zawierał ten błąd, należy oczywiście aktualizację do najnowszej wersji przed badaniem).

+0

używam 'GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) z 2012-04-02' i nadal mam ten problem. – simao

+0

Ah, nie mam pomysłów. Powinieneś dodać swoją wersję Emacsa do pytania. Zostawię tę odpowiedź na wypadek, gdyby była pomocna dla kogokolwiek innego. Powodzenia. – phils

+0

ok, dziękuję za pomoc – simao

0

Jeśli używasz Git, polecam śledzić tę konfigurację z Effortless Ctags na auto zbudować plików znaczników podczas wykonywania operacji git:

http://tbaggery.com/2011/08/08/effortless-ctags-with-git.html

Nawet jeśli nie używasz Git, możesz mogli spróbować komendy do budowania ctags:

ctags --tag-relative -Rf.git/tags.$$ --exclude=.git --languages=-javascript,sql 

również polecam Ci konfigurację aliasem zainstalować pakiet aby określić ścieżkę dzięki czemu kamienie dostać dołączone do podkatalogu swojego projektu, takie jak:

alias bi='bundle install --path vendor' 

(Uwaga: pamiętaj o .gitignore tego katalogu). Pozwoli ci to również przeskoczyć bezpośrednio do źródła każdego z twoich klejnotów, a także zapobiec nadpisaniu pliku znacznika wszystkimi klejnotami w twoim systemie.

7

Tak, tak, tak. ;-)

Dlaczego dbasz o nie używając Ctags w pierwszej kolejności? Ctags to świetny projekt i obsługuje wiele (na przykład 50) języków. Ale wsparcie dla Ruby jest bardzo słabe, parser nie jest w dobrym stanie i nie został zmieniony od 4 lat.

  • Ctags nie dotyczy: moduł A :: B
  • Ctags nie oznacz (przynajmniej niektóre) metody, takie jak operator ==
  • Ctags nie obsługuje wykwalifikowanych tagów - type = +
  • Ctags nie wyprowadza znaczników dla stałych lub atrybutów.

Niestety wszystkie pozostałe (znalazłem 2) generatory Ruby są albo nieaktualne (bez wsparcia w postaci Ruby 1.9+), albo bardzo wolne. Ale jest rozwiązanie! Nazywa się ripper-tags. https://github.com/tmm1/ripper-tags

gem install ripper-tags 
cd your_project/ 
ripper-tags -R # for vim 
ripper-tags -R -f TAGS # for emacs 

Ten projekt to wykorzystuje wbudowany w Ruby parsera API zwanego Ripper. Jest szybki i działa zgodnie z oczekiwaniami. Jest prawie tak szybki jak ctags, ale daje najdokładniejsze wyniki. Ostrzeżenie: NIE obsługuje języka Ruby 1.8.

Jeśli podoba Ci się ripper-tags i chcesz, aby wszystkie tagi były generowane automatycznie po instalacji gem, możesz sprawdzić mój gem-ripper-tags, który to robi. Niestety nie obsługuje obecnie Emacs (łatka zaakceptowana - dość łatwa do zrobienia). Więcej informacji pod adresem: https://github.com/lzap/gem-ripper-tags

6

tutaj 2016, a etaty wydają się dobrze współpracować z rubinem w tym momencie. Ctags prawdopodobnie również.

Oto zadanie rake, które napisałem do zarządzania tagami. Zapisz go jako lib/tasks/etags.rake, a następnie okresowo uruchamiaj rake etags create. Zamień etagi na ctags, jeśli używasz vi.

def project_root 
    gemfile_path = ENV['BUNDLE_GEMFILE'] 
    if !gemfile_path || gemfile_path.empty? 
    then fail "can't find the root of your project from $BUNDLE_GEMFILE" 
    else File.dirname gemfile_path 
    end 
end 

namespace :etags do 
    desc "generate tags for emacs code hypertext linking aka metadot" 
    task create: :environment do 
    system "find #{project_root}/app/ -iname \\*.rb -print0 | xargs -0 etags" 
    end 

    desc "remove tags for emacs code hypertext linking aka metadot" 
    task clean: :environment do 
    system "rm #{project_root}/TAGS" 
    end 
end