Haskell: ctags (and Kate editor)

507 Views Asked by At

I tried CTags plugin for Kate editor. It kinda works, index builds silently (no error messages), database file along with the necessary menu entries appears. Then Go to definition - No hits found.

I am not surprised too much. Apparently, Kate builds the index this way:

ctags -R --c++-types=+px --extra=+q --excmd=pattern --exclude=Makefile --exclude=.

It is suggestive of C++; I cannot tell more. What is the correct command line for Haskell ctags?

UPD:

hasktags has been suggested. I managed to install and run it tentatively:

$ stack exec hasktags
Usage: hasktags [OPTION...] [files or directories...]
directories will be replaced by DIR/**/*.hs DIR/**/*.lhs
Thus hasktags . tags all important files in the current
directory.

    If directories are symlinks they will not be followed
unless you pass -L.

A special file "STDIN" will make hasktags read the line separated file
list to be tagged from STDIN.

  -c            --ctags                        generate CTAGS file (ctags)
  -e            --etags                        generate ETAGS file (etags)
  -b            --both                         generate both CTAGS and ETAGS
  -a            --append                       append to existing CTAGS and/or ETAGS file(s). Afterward this file will no longer be sorted!
                --ignore-close-implementation  ignores found implementation if it is closer than 7 lines - so you can jump to definition in one shot
  -o            --output=                      output to given file, instead of 'tags', '-' file is stdout
  -f            --file=                        same as -o, but used as compatibility with ctags
  -x            --extendedctag                 Generate additional information in ctag file.
                --cache                        Cache file data.
  -L            --follow-symlinks              follow symlinks when recursing directories
  -S[.hs,.lhs]  --suffixes[=.hs,.lhs]          list of hs suffixes including "."
  -R            --tags-absolute                make tags paths absolute. Useful when setting tags files in other directories
  -h            --help                         This help

There is also some path in Kate CTags database file:

/home/alexey/.local/share/kate/katectags/session_db_20171216_180641

I can't make much out of hasktags readme.

1

There are 1 best solutions below

4
On

I use hasktags and a shell function in my .zshrc to simplify things:

hasktags --ignore-close-implementation --ctags .