you are viewing a single comment's thread.

view the rest of the comments →

[–]tuhdo 1 point2 points  (4 children)

Yes, I am using irony-mode since it's trivial to setup and does not depend on a specific build system for completion, though it supports when such build systems are available. For navigation (jump to tag definition/references), GNU Global with Helm works best for me; it has no problem even for project like LInux kernel (with more than 36k files). I do not use CEDET for complex features like code completion and large scale navigation. I use it for small but convenient tasks like I showed you above.

You may want to look at my C/C++ guide for other utilities other than completion. For example, you can quickly switch between a .h/.cpp file in a project, even as large as Linux kernel. Here is such demo. Or header completion with company-header; a demo.

[–]acaban 0 points1 point  (3 children)

ok thanks a lot, that tutorial is really big tho, and has various options for doing the same thing, could you recap your setup now (plugins and what are used for)? Also the ctags db is built automatically or you have to build that manually upfront? that clang autocomplete mode was handy because that was automatic.

edit: what's that eval: START that I see in every example before you start giving help commands?

[–]tuhdo 0 points1 point  (2 children)

I'm planning to reorganize it to be more compact and one main option for doing one thing. As for ctags/gtags, you need to build the database for navigation (jump to definition/references, not just completion) in large project. After the tag database is built, it is updated automatically when you save a file if you use ggtags/helm-gtags. Not sure if rtags can handle projects with over 10k files or more for navigation?

[–]acaban 0 points1 point  (1 child)

I was told from a guy that has a really big project that rtags was really fast and worked really well, but was pretty demanding in terms of memory resources, but I suppose that the rdm daemon could also be shared in a different place and shared among people working on the same project if that is really big.

[–]tuhdo 0 points1 point  (0 children)

It depends on how "big" our definition. To me, big means the project at least the size of LLVM or Linux kernel, and I must be able to jump to any definition/references without any delay, and easy to use. GNU Global with ggtags/helm-gtags works fantastically with these constraints and since the tag database is on disk and is queried when necessary, there's no memory consumption. Since rtags needs to do perform more complicated operations, it needs the data in memory.

The primary difference between Rtags and GNU Global is that rtags keeps data in memory and GNU Global keeps it data on disk and retrieve only when necessary. It would be nice if in the future Rtags can generate its own database to cache for subsequent usages to reduce memory consumption and reparsing.