Navigating Source Code

Recently I’ve been browsing free software projects on Linux, and wanting to navigate a mixture of C and C++. I’m used to Visual Studio on Windows, more accurately the excellent Visual Assist plug-in, which makes code navigation and completion work for C++. For me this is the best feature of the whole setup: Visual Studio is a way to run Visual Assist. I’ve really missed this on Linux.

Years ago I used a combination tag files generated during the build and some custom Crisp macros for source code navigation. Despite not providing auto-completion this was in some ways better than Visual Assist as tags are generated from pre-processed source:

  • C macros and condition includes do not break the tagging
  • Tag files are per-platform, per build-type and exact

Still, what I wanted was something quick to setup and use with Emacs. A while back Pete Ivey recommended GNU Global, so I thought I’d try that out. Overall it works really well. It’s not without it’s flaws – some variable declarations are hidden in macros in the code I’m reading. Those get missed from the declaration list, but do get caught as symbols. Ideally I’d expand the Emacs macros to automatically search for any symbol if a declaration isn’t found.

The pendant in me want to set up Dehydra and hook it into the build system. The pragmatist says that overall this is working well. For now I’m sticking with it.

What are other people using?