rtags-xref | ac-rtags | company-rtags | flycheck-rtags | helm-rtags | ivy-rtags |
---|---|---|---|---|---|
RTags is a client/server application that indexes C/C++ code and keeps a persistent file-based database of references, declarations, definitions, symbolnames etc. There’s also limited support for ObjC/ObjC++. It allows you to find symbols by name (including nested class and namespace scope). Most importantly we give you proper follow-symbol and find-references support. We also have neat little things like rename-symbol, integration with clang’s “fixits” (https://clang.llvm.org/diagnostics.html). We also integrate with flymake using clang’s vastly superior errors and warnings. Since RTags constantly will reindex “dirty” files you get live updates of compiler errors and warnings. Since we already know how to compile your sources we have a way to quickly bring up the preprocessed output of the current source file in a buffer.
While existing taggers like gnu global, cscope, etags, ctags etc do a decent job for C they often fall a little bit short for C++. With its incredible lexical complexity, parsing C++ is an incredibly hard task and we make no bones about the fact that the only reason we are able to improve on the current tools is because of clang (https://clang.llvm.org/). RTags is named RTags in recognition of Roberto Raggi on whose C++ parser we intended to base this project but he assured us clang was the way to go. The name stuck though.
Tarball releases are available here: https://github.com/Andersbakken/rtags/releases/
We assume you have something to generate a JSON Compilation Database for your project. Your build system probably has a way to generate it, or you can look at something like Bear.
Build RTags
git clone --recursive https://github.com/Andersbakken/rtags.git
cd rtags
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 .
make
Start the RTags daemon (rdm
)
./bin/rdm &
Index the RTags project, and wait until rdm
is silent
./bin/rc -J .
Open source file in emacs
emacs +74:34 src/rdm.cpp
Load rtags.el
M-: (load-file "rtags.el") RET
Ensure rc
can be found
M-x set-variable RET rtags-path RET "../bin" RET
Call rtags-find-symbol-at-point
M-x rtags-find-symbol-at-point RET
Your location is now on the definition of Server::instance()
The documentation can be found in the Wiki.
RTags is still under development and is not the most stable piece of software you’ll ever find. We’re constantly working to improve on it.