So for my new project I'm starting in openresty+lua, I needed some kind of support for tags. Lua is a very simple language syntaxwise (it's whole grammar fits in a screen of code).
Etags support is quite poor, in fact, if you read the emacs-devel message when it got added, you'll see how basic is it.
+ * Lua tag functions + * look for function, local function. + */ + +static void +Lua_functions (inf) + FILE *inf; +{ + register char *bp; + + LOOP_ON_INPUT_LINES (inf, lb, bp) + { + if (bp[0] != 'f' && bp[0] != 'l') + continue; + + LOOKING_AT (bp, "local"); + + if (LOOKING_AT (bp, "function")) + get_tag (bp, NULL); } }
The regex version of this would be: /^(local)?\s+function\s+(\w)/ .
So I wanted to add support for lines not in the beginning, and also to add support for things like
local foo = function (p1, p2) .... end
So it turned out to not be very difficult to augment etags to do that.
tags: etags --language=lua --regex='/.*\([^. \t]\)*[ \t]*=[ \t]*function/\1/' \ --regex='/.*\(local\|\)[ \t][ \t]*function[ \t]\([^ \t(]*\)[ \t]*(/\2/' **/*lua
Just adding this to the Makefile allows me to catch the other forms of lua functions. Again, regex to the rescue! :)
No hay comentarios:
Publicar un comentario