EDIT: Now that I look at your two requirements, that's not at all hard for a language like C or java. I recall having this in 1993 on the OS/2 version of SlickEdit. vim or emacs will handle this no problem. If you want a GUI, Visual SlickEdit will do it, and for a whole bunch of languages on every OS.
Take a look: https://github.com/Kronuz/SublimeCodeIntel
Supports all the languages Komodo Editor supports for
Code Intelligence (CIX, CodeIntel2):
PHP, Python, RHTML, JavaScript, Smarty, Mason, Node.js,
XBL, Tcl, HTML, HTML5, TemplateToolkit, XUL, Django,
Perl, Ruby, Python3.
Where's C? Where's C++? Where's Java? That's disappointing.I also use cscope: https://github.com/ameyp/CscopeSublime
for scripting languages, define a function as concatenated string in eval(), how could you find the function definition, without actually run the script for once?
Even if you run the script once, what if there is a delete_file() function you accidently called?
So do we need to implement a sandboxed VM in order to find definition, theoretical perfectly speaking?
Use case involves a class wrapping python's xml-rpc stuff to talk to Drupal.
Drupal's xml-rpc interface is not the most pleasant thing to work with, as you have to pass in a session id and auth token on every request, and then all the "actual" parameters go in as an array.
My wrapper class would query the remote interface for available methods, and then dynamically generate, via eval, a function object that used a closure to store the sess/auth tokens, and that took a variable number of arguments to pass as the 3rd array argument to the function. The eval'd function object was then bound as a method to the connection object.
It also did a bit more magic, such as on error logging the arguments to a file. ALl in all it made writing web-service clients a lot more pleasant.
Try getting your editor to find that definition of method "accept_language" or "cache_control". :-)
None of the normal (you come to expect) keybindings work. It was slow/sluggish.
At the time when I checked out (I have no reason to believe why it would be much different today) Wing seemed infinitely more awesome. - The ability to split screens, the amount of time the UI actions take. The F1 and F2 that provide more screen real estate felt far more interesting than Komodo, which almost felt the opposite. Komodo didn't have the deep Python integration like wing does. The goto definition etc are far more better in Wing.
Moreover, at least in Python (perhaps others?), you can jump to definitions in any included lib that aren't even part of your project's source code--e.g., import something from django & it'll jump you right to Django's source for any imported method, class, etc.
1) Jump the the function/method definition (even if it's in a different file) when I press Ctrl and click on the function name. Eclipse does this.
2) Quick find of the function/method definition across the whole project. Eclipse does this as well (Ctrl + R).
I don't use Eclipse that much, because it's ridiculously slow, but it has cool features.