java_src_link.vim : effective searching of src files for children, impls, tests, return values, args
script karma |
Rating 4/1,
Downloaded by 1718 |
Comments, bugs, improvements
|
Vim wiki
|
created by |
Eric Van Dewoestine |
|
script type |
ftplugin |
|
description |
" Filetype plugin for java that allows you to jump to
" another java src file by searching your configured
" src path for the class name under the cursor.
"
" For a given class name, supports finding children of it, implementations
" of it, methods that return it, methods that take it as an argument, test
" cases for it, or all references of it.
"
" Platform:
" This plugin uses the system find and grep commands extensively,
" so if you are having issues, it's probably due to incompatibility
" with one of those. You can take a look at s:find_cmd, s:content_grep,
" and s:*_regex variables to see if they can be modified to suit your
" system.
"
" If you find that you do have to modify any of these, feel free to
" send me your changes, and I will see if they are compatable or make
" alternate configurations available for users to choose from.
"
" All my testing was done with
" GNU find version 4.1.20
" GNU grep version 2.5.1
"
" Linux:
" All testing has been done on linux so various flavors of linux
" should be supported (as well as other *nix systems).
"
" Windows:
" Works in conjunction with cygwin_utils.vim plugin.
" Make sure to read the Description comments in cygwin_utils.vim for
" configuration instructions and other notes.
"
" Note: I've found that the 'find' command runs considerably
" slower on Windows enviroments. So if you have serveral
" paths in you g:JavaSrcPaths variable, then searching may
" be a bit slow.
"
" Usage:
" When editing a java file the following commands are created
" :FindSrc
" :FindImpl
" :FindChildren
" :ContextualFindSrc
" :FindTest
" :FindArgument
" :FindReturned
" :FindReferenced
"
" FindSrc: will search for the src file for the class name under the
" cursor and execute the configured g:JavaSrcCmd on it (unless
" g:JavaSrcUseGrep is set to 1), which could do any number of
" things such as edit, argadd, split, etc.
"
" FindImpl: behaves just like FindSrc, except instead of searching for
" the class name under the cursor, it searches for classes that
" implement that class.
"
" FindChildren: behaves just like FindSrc, except instead of searching
" for the class name under the cursor, it searches for classes that
" extend that class.
"
" ContextualFindSrc: is a convenience command that decides which of the
" above commands to execute (FindSrc, FindImpl, or FindChildren) based
" on your position in the file.
" - If you are on the class declaration line (public class Foo), then
" it will execute FindChildren.
" - If you are on the interface declaration line (public interface Foo),
" then it will execute FindImpl.
" - Any where else in the file, FindSrc will be executed.
"
" FindTest: behaves like FindSrc, except instead of searching
" for the class name under the cursor, it searches for the test
" case src file for the class.
" This command assumes that test case src files follow the junit
" naming conventions of "<classname>Test.java" where the <classname>
" is the name of the class under the cursor.
"
" FindArgument: behaves like FindSrc, except instead of searching
" for the class name under the cursor, it searches for all src files
" that have a method that takes as an argument, that class.
"
" FindReturned: behaves like FindSrc, except instead of searching
" for the class name under the cursor, it searches for all src files
" that have a method that returns that class.
"
" FindReferenced: behaves like FindSrc, except instead of searching
" for the class name under the cursor, it searches for all src files
" that reference that class.
"
" Note: All of the above commands (with the exception of ContextualFindSrc)
" can also be invoked with an argument.
" Ex.
" FindSrc org.bar.Foo
" This will invoke the command so it searches for the class name provided
" rather than the one under the cursor. You may use fully qualified
" (org.bar.Foo) or un-qualified (Foo) class names.
"
" Note: All of these find commands will attempt to filter out
" results that reference a different class that has the same
" class name as the one to search for. It does this by attempting
" to locate the package name of the class to search for.
"
" For example: If you have two classes with the name Foo
" one in com.bar.Foo and the other in com.bar.baz.Foo, and you
" start a search for the class Foo, then this plugin will attempt
" to determine which Foo you are searching for.
"
" If you are editing one of the Foo classes, and you initiated the
" search with the cursor on the class declaration (public class Foo),
" then the package (package com.bar;) declaration of the file will
" be used to narrow the results to the correct Foo class.
"
" If you are in another file (say Bar.java) and you start a search
" for Foo, then the plugin will look to see if you used the fully
" qualified class name (com.bar.Foo) or if you imported the class
" (import com.bar.Foo;). If you did either then the package name
" will be grabbed from there. If you have done neither, then the
" plugin will return results for all Foo occurances regardless
" of package name.
"
" So the moral of the story is, that if you want accurate results
" you should get in the habit of importing each class seperately
" and avoiding the * imports (import com.bar.*;). This is a good
" habit anyways, that makes your code easier to read, navigate, and
" understand by others.
"
" Configuration:
" The following describes the global variables you can set in
" your vimrc to change the behavior of this plugin.
"
" g:JavaSrcPaths
" No default. Use this variable to set a comma seperated list
" of the paths you wish to have searched. Each path should be
" the parent directory of where your package structure begins.
" So for /a/path/src/java/org/acme/, assumming packages begin
" as org, you would use /a/path/src/java as the path to search.
"
" Ex. let g:JavaSrcPaths=
" \ "/a/path/src/java," .
" \ "/another/path/src/java"
"
" g:JavaSrcTestPaths
" No default. Same as g:JavaSrcPaths but used by FindTest to
" locate unit testing src files.
"
" g:JavaSrcShowResults
" Defaults to 0. When set to 1, the Find commands will open
" a small preview window when multiple results have been found.
" In that window you can hit <enter> on the file you wish
" to open or use 'A' to load all results into the arg list.
"
" Ex. let g:JavaSrcShowResults=1
"
" g:JavaSrcUseGrep
" Defaults to 1. When set to 1, the Find commands will use vim's
" :grep command to grep the results so that results can be
" navigated through using the quickfix command :cnext :cprev
" :copen, etc.
" Note: When g:JavaSrcShowResults is set, then grep is not used
" regardless of whether g:JavaSrcUseGrep is set or not.
"
" Ex. let g:JavaSrcUseGrep=1
"
" Use
" :help quickfix.txt
" to get more info on how grep and the quickfix paradigm works.
"
" Note: When both g:JavaSrcShowResults and g:JavaSrcUseGrep are set
" to 0, then the g:JavaSrcCmd is executed on all files found
" with no preview or quickfix window.
"
" g:JavaSrcCwindow
" Defaults to 1. Used to determine whether or not to execute
" :cwindow to open the grep results after searching. If set
" to 1, the window will be opened after every Find command.
" If set to 0, the window will remain closed and you can open
" it manually.
" Note: Only used when g:JavaSrcUseGrep is set to 1 and
" g:JavaSrcShowResults is set to 0.
"
" Ex. let g:JavaSrcCwindow=1
"
" g:JavaSrcCmd
" Defaults to "split <file>". Use this variable to set the
" command you wish to be invoked when using :Find* commands.
" The "<file>" will be replace with the file to open.
" Note: When g:JavaSrcShowResults is set to 0 and
" g:JavaSrcUseGrep is set to 1, this variable is not
" used. Instead the quickfix commands are used.
"
" Ex. let g:JavaSrcCmd="topleft split <file>"
" Ex. let g:JavaSrcCmd="argedit <file>"
" Ex. let g:JavaSrcCmd="call g:MyOpenFile(<file>)"
"
" Command Mapping:
" You may find it easier to map a command to something more convenient.
" For example, here is my mapping that allows me to simply hit
" <enter> on a class name to have it search for results based on the
" context (as described above).
"
" autocmd FileType java map <silent> <buffer> <cr> :ContextualFindSrc<cr>
"
" Limitations:
" - FindChildren and FindImpl are limited to examining class names
" that follow "extends" | "implements" on the same line. So src files
" that put each class on it's own line or wrap long extends / implements
" statements may not be found.
" This is a limitation of grep, which is used to find the files.
" This could be solved by further examining the contents of src files
" but would have a big impact on performance.
" - FindReturned only searches for methods with "public" | "private" |
" "protected" so as not to grab too many files. Also the scope identifier
" must appear on the same line as the class name.
" As with the limitation on FindChildren and FileImpl, this is due to
" grep examining the files one line at a time, which prevents examining
" other lines to determine any sort of context.
"
" Todo:
" - Extend beyond class based searching and add method and field based
" searches (fields should be easy, methods could be hard to get reliable
" results).
|
|
install details |
Put java_src_link.vim into your ftplugin directory.
Windows users will need cygwin_utils.vim (vimscript #1150) |
|
script versions (upload new version)
Click on the package to download.
ip used for rating: 142.132.191.50
|