Are there CScope-style source browsers for other languages besides C/C++ on Windows?

StackOverflow https://stackoverflow.com/questions/65456

  •  09-06-2019
  •  | 
  •  

Question

I'm specifically interested in tools that can be plugged into Vim to allow CScope-style source browsing (1-2 keystroke commands to locate function definitions, callers, global symbols and so on) for languages besides C/C++ such as Java and C# (since Vim and Cscope already integrate very well for browsing C/C++). I'm not interested in IDE-based tools since I know Microsoft and other vendors already address that space -- I prefer to use Vim for editing and browsing, but but don't know of tools for C# and/or Java that give me the same power as CScope.

The original answer to this question included a pointer to the CSWrapper application which apparently fixes a bug that some users experience integrating Vim and CScope. However, my Vim/CScope installation works fine; I'm just trying to expand the functionality to allow using Vim to edit code in other languages.

Was it helpful?

Solution

CScope does work for Java.

From http://cscope.sourceforge.net/cscope_vim_tutorial.html:

Although Cscope was originally intended only for use with C code, it's actually a very flexible tool that works well with languages like C++ and Java. You can think of it as a generic 'grep' database, with the ability to recognize certain additional constructs like function calls and variable definitions. By default Cscope only parses C, lex, and yacc files (.c, .h, .l, .y) in the current directory (and subdirectories, if you pass the -R flag), and there's currently no way to change that list of file extensions (yes, we ought to change that). So instead you have to make a list of the files that you want to parse, and call it 'cscope.files' (you can call it anything you want if you invoke 'cscope -i foofile'). An easy (and very flexible) way to do this is via the trusty Unix 'find' command:

find . -name '*.java' > cscope.files

Now run 'cscope -b' to rebuild the database (the -b just builds the database without launching the Cscope GUI), and you'll be able to browse all the symbols in your Java files. Apparently there are folks out there using Cscope to browse and edit large volumes of documentation files, which shows how flexible Cscope's parser is.

OTHER TIPS

Claiming that Cscope supports Java is an extreme stretch. It seems to treat a method like a function, so it has no idea that A.foo(), A.foo(Object) and B.foo() are all different. This is a big problem with a large code base (including third-party libraries) with many same-named methods. (I haven't looked at the Cscope source, but this is what I found trying the latest Cscope, version 15.7a-3.3 from Debian unstable.)

I tried Cscope on a large Java project, and it was not at all useful to me due to this limitation. It's sad that we cannot get a quick answer to a basic question like "who calls this method", using free software outside of the big IDEs, but we may as well accept it. (I would love it if I'm wrong. I resort to hacks like commenting out the method and recompiling.)

A bit late to the party here, but my https://github.com/eapache/starscope/ project provides a nice framework for generating cscope databases for more languages. Currently it supports Ruby and Go, and Javascript is in progress. Adding Java/C# shouldn't be that difficult.

Edit: Javascript is now fully supported.

I agree with Andrew - trying to get a call hierarchy for a method returns all calls of the same name, even if they are from a different class.

You can use Eclim to plug Eclipse into VIM

http://eclim.org/

which supportrs call hierarchy

http://eclim.org/vim/java/inspection.html#call-hierarchy

This may be what you're looking for:

http://www.vim.org/scripts/script.php?script_id=1783

You can also mimic some CScope functionality in your own .vimrc file by using the various flavors of map.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top