Bester C ++ Indexer?


10

Ich habe kürzlich von Eclipse CDT auf Spacemacs mit der C ++ - Schicht als Entwicklungsumgebung umgestellt .

Bisher ... großartig! Eines der Dinge, die ich an Eclipse vermisse, ist der Indexer .

Im Moment verwende ich GNU Global mit der Ebene gtags . Das Problem mit gtags ist, dass es sich um ein Tagging- System handelt, nicht um einen Indexer.

Beispiel:

Wenn Sie nach Referenzen für eine setin der Klasse aufgerufene Funktion Fieldsuchen, werden 165 Referenzen in meiner Codebasis zurückgegeben, von denen nur eine tatsächlich eine Referenz istField::set

Die Suche nach Verweisen auf setin CDT liefert 1 Ergebnis.

Gibt es eine bessere Indizierungslösung, die ich in Emacs verwenden kann?

Online-Suche Ich habe diese Seite gefunden, auf der 3 klirrbasierte Indexer aufgelistet sind.

Fragen:

  • Bietet eine dieser Funktionen eine bessere Indizierung?
  • Irgendwelche Vorschläge, welche man verwenden soll?
  • Gibt es eine bessere Alternative, die nicht aufgeführt ist?

Hinweis:

Ich habe auch clang-completefür die Code-Vervollständigung verwendet, aber festgestellt, dass es sehr langsam ist. Ungewöhnlich langsam. ( Ich bin nicht der einzige, der dies erlebt. ) Wenn eine Indizierungslösung unter demselben Problem leiden würde, würde dies nicht funktionieren.


Nicht, dass ich mit C ++ - Projekten arbeite, aber vielleicht finden Sie hilfreiche Inhalte auf emacs.zeef.com im Abschnitt C ++?
ReneFroger

Ich habe bemerkt, dass es in clang-indexerletzter Zeit keine Entwicklung gegeben hat, und der Autor selbst sagt, es sei "rau" - also werde ich das bei den anderen beiden nicht versuchen
Steve Lorimer

rtagsscheint der beliebteste der 3 aufgelisteten zu sein
Steve Lorimer

1
Hat diese Frage genau genommen etwas mit Emacs zu tun?
PythonNut

1
Wie derzeit formuliert, ist diese Frage sehr subjektiv und liefert wahrscheinlich Antworten, die hauptsächlich auf Meinungen beruhen. Bitte bearbeiten Sie Ihren Beitrag, um die Frage konkreter zu gestalten.
Dan

Antworten:


4

Ich kann nur für rtags sagen, dass ich in den letzten 1-2 Jahren aktiv verwendet habe.

rtags funktioniert wie erwartet. Es basiert auf dem Compiler und bietet eine korrekte Code-Navigation. Etwas, nach dem ich in den letzten 10 Jahren als Emacs-Benutzer gesucht habe.

Das Setup kann etwas schwierig sein. Ich empfehle einen Blick auf cmake-ide, das einen Teil des Setups automatisch ausführt. https://github.com/atilaneves/cmake-ide

Dieser Blog-Beitrag kann auch https://vxlabs.com/2016/04/11/step-by-step-guide-to-c-navigation-and-completion-with-emacs-and-the-clang-based- helfen rtags /

Sie können auch meine eigene Konfiguration überprüfen (oder verwenden): https://github.com/jardon-u/dotfiles/blob/master/emacs.d/development/c/_init.el Ich verwende eine Kombination von cmake- ide (Projekterkennung), Ironie (zur Code-Vervollständigung) und rtags (zur Code-Navigation). Ich bin mir ziemlich sicher, dass dies vereinfacht werden könnte, da sich einige Funktionen zwischen den einzelnen Modi überschneiden, aber das Ergebnis liegt auf dem Niveau, das ich von einer modernen IDE erwarte.

rtags bietet auch Code-Refactoring-Funktionen, die jedoch recht begrenzt sind (meistens Umbenennen).


1
Es ist zwei Jahre her, seit diese Antwort akzeptiert wurde. Verwenden Sie immer noch rtags? Ich bin gespannt, ob die Dokumentation zum Setup geändert oder das Setup einfacher gestaltet wurde. Irgendwelche Infos dazu? Könnten Sie Ihre Setup- / Konfigurationsdatei freigeben?
A_P

@A_P Aus irgendeinem Grund sehe ich jetzt nur Ihren Kommentar. Ich benutze immer noch RTags. Sie sollten die cmake-ide-Seite + meine Konfiguration erneut überprüfen (Link in meiner Antwort). Ich habe auch den größten Teil der Installation automatisiert. Überprüfen Sie: github.com/jardon-u/dotfiles/blob/master/install.sh (obwohl die Emacs-Version möglicherweise nicht die neueste ist. Ich werde versuchen, dies zu aktualisieren)
log0
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.