I'm using Exuberant ctags to index Erlang files.
The "tags" file contains functions, but they do not have module qualifiers; so I can't search for "module:function", only "function", which may give several results.
Do you know a way to get ctags to include module qualifiers in the tags file?
Thanks.
Like lht wrote, Exuberant Ctags 5.8 already stores the module of the function in the tags file. At least with recent versions of Vim (7.4) this information can be accessed. It is then possible to look up "module:function" using a custom "tag" function, e.g.:
function! ErlangTag()
let isk_orig = &isk
set isk+=:
let keyword = expand('<cword>')
let &isk = isk_orig
let parts = split(keyword, ':')
if len(parts) == 1
execute 'tag' parts[0]
elseif len(parts) == 2
let [mod, fun] = parts
let i = 1
let fun_taglist = taglist('^' . fun . '$')
for item in fun_taglist
if item.kind == 'f' && item.module == mod
silent execute i . 'tag' fnameescape(item.name)
break
endif
let i += 1
endfor
endif
endfunction
nnoremap <buffer> <c-]> :call ErlangTag()<cr>
Exuberant ctags already supports tag field "module" for Erlang.
$ /usr/bin/ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Aug 17 2010, 17:33:33
Addresses: <[email protected]>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex
$ /usr/bin/ctags xref_parser.erl
A typical tag line with a tag field named "module" looks like:
yeccgoto_const xref_parser.erl /^yeccgoto_const(24=_S, Cat, Ss, Stack, T, Ts, Tzr) ->$/;" f module:xref_parser
Actually, it is VIM which doesn't support this tag field as for now. From VIM doc:
{field} .. A list of optional fields. Each field has the form:
<Tab>{fieldname}:{value}
The {fieldname} identifies the field, and can only contain
alphabetical characters [a-zA-Z].
The {value} is any string, but cannot contain a <Tab>.
There is one field that doesn't have a ':'. This is the kind
of the tag. It is handled like it was preceded with "kind:".
See the documentation of ctags for the kinds it produces.
The only other field currently recognized by Vim is "file:"
(with an empty value). It is used for a static tag.
That's it. Only "kind" and "file" are supported tag field names.
It sounds like you are not using the Erlang etags module: Generate Emacs TAGS file from Erlang source files.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With