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