better generation of vi ctags in ghci
Peter Hercek
phercek at gmail.com
Wed Jun 17 05:14:39 EDT 2009
Hi GHC and VI users,
I got frustrated with vi tags not working after some unrelated code is
edited in a source file. Moreover non-exported top level declarations
were not available in vi tags file. Here is an attempt to fix it:
http://www.hck.sk/users/peter/pub/ghc/betterCTags.patch
Why would you want the new implementation of :ctags ghci command?
* Tags are searched based on the line content. This is what Exuberant
Ctags do for other languages and it is the other posix way to do it.
This makes the positioning to work well even when the source code was
edited (on places unrelated to the tag location). More complicated Ex
statements can be used to improve it even more but then it does not work
well with :tselect (it screws up tag kinds, at least with my version of
vim 7.2.65).
* All top level symbols defined in a module are added to the tags file.
Even the non-exported ones. These are marked as static (file:) so the
default tag selection (Ctrl-]) works fine based on the file you started
the search from.
* Tags get kinds added so you can select whether you want to get to a
type constructor or a data constructor (that is if you share names
between the two).
* In general it is a nice addition to vim haskellmode. If you search for
help on symbols in libraries then opening haddock is cool. If you search
for help on a symbol in your project then opening the tag in a preview
window (Ctrl-W} or ptselect) is cool.
Problems:
* It needs somebody to check that emacs tags were not broken. I'm not an
emacs user but some tag generation code is shared for vim and emacs. I
tried to keep emacs tags exactly the way they were (only the exported
symbols, original file format).
* If your code happens to have definitions on lines which happen to
exist more times in one source file then it may put you at an incorrect
location. I doubt it will ever happen but if anybody thinks it is really
bad we can keep the original format of vim tags too. Then e.g. :ctags
would generate tags with line numbers and :ctags! would generate tags
with search expressions.
If there is any support for this and ghc team decides to merge it I can
provide darcs patch. I can do changes needed to get it merged.
Peter.
More information about the Glasgow-haskell-users
mailing list