So I tried to just get the regex parser compile and run but it turned out that it requires so many changes in ctags itself that it's just impossible to perform without the complete ctags sync. So the first patch is a huge blob which gets all the upstream changes (no way to get this more granular) on top of which I applied the Geany-related changes. Regex parsers using GNU regex work, at least on linux (not sure about Windows - someone has to get it compile there if it doesn't work).
This was hell a lot of work and something I don't want to do in the future in this form. So in the subsequent patches I tried to minimize Geany-related diffs to the absolute minimum, even if it meant adding and compiling more uctags code (which we'll never actually use). I'd say the result is quite nice, the diffs are really minimalistic and easy to locate in the code. The upstream commit against which this is made is
7dd02539554a81aa39b49ce8df9d4511f92d9f4f
which is already several months old but this is the one against which we have the parsers synced (in fact, it's against https://github.com/techee/ctags/commit/915d69794cd90af9a2e577dd57dd888341eef... to have this fix applied). The best way to review this pull request is to make a diff in meld against this commit in uctags - the diff is really small - and also having a look at the patches excluding the first one which is just unreviewable.
I'd really like if this could get merged soon because I don't want to get again to the state where I have to merge multi-year diffs from uctags. My proposal is that I'd prepare a patch at the beginning of every Geany release cycle which syncs it with uctags (by just taking the current uctags code and applying Geany diffs on top of it) so it gets tested during the development cycle. If we make releases 3 times a year, the diffs shouldn't be so huge and much more easily manageable.
You can view, comment on, or merge this pull request online at:
https://github.com/geany/geany/pull/2132
-- Commit Summary --
* Sync with upstream ctags * Enable Cobol test * Rename Geany ctags diff markers * Store varType inside typeRef[1] * Add all ctags writers to eliminate some geany diffs * Move bufferOpen() to parse.c to eliminate diff in read.c/h * Reduce diff size in fileNameMatched() * Reduce number of diffs in main.c * Use upstream mbcs.h * Reduce number of diffs in parse.c/h * Move diffs together in entry.c/h * Move isIgnoreToken() to lcpp.c/h which we don't sync with uctags * Eliminate diff in options.c by adding interactive_p.h * Reuse createTagsWithFallback1() for Geany * Eliminate bufferOpen() * Make sure all functions/global vars added to ctags have the "geany" prefix * Eliminate diff in runParserInNarrowedInputStream() * Eliminate diff in promise.c by manually enabling Xtag during initialization * Add some comments * Make sure all kinds are enabled in ctags for all languages * Use the builtin ctags writer functionality to pass tags to Geany * Remove some diffs from parse.c * Reuse the functionality of createTagsWithFallback() * Simplify various ctags-api.c implementations using existing ctags functions * Fix ctags warning because of cobol parser f/file kind which is reserved * Add simple ActionScript test
-- File Changes --
M configure.ac (2) M ctags/Makefile.am (34) M ctags/main/args.c (6) R ctags/main/args_p.h (6) A ctags/main/colprint.c (295) A ctags/main/colprint_p.h (37) M ctags/main/ctags-api.c (134) M ctags/main/ctags-api.h (4) M ctags/main/ctags.h (8) M ctags/main/debug.c (102) M ctags/main/debug.h (28) M ctags/main/dependency.c (349) M ctags/main/dependency.h (42) M ctags/main/e_msoft.h (10) M ctags/main/entry.c (682) M ctags/main/entry.h (85) A ctags/main/entry_p.h (68) A ctags/main/entry_private.c (37) M ctags/main/error.c (41) M ctags/main/field.c (952) M ctags/main/field.h (47) M ctags/main/flags.c (107) R ctags/main/flags_p.h (16) M ctags/main/fmt.c (57) R ctags/main/fmt_p.h (0) M ctags/main/general.h (13) A ctags/main/gvars.h (29) A ctags/main/interactive_p.h (29) M ctags/main/keyword.c (18) M ctags/main/keyword.h (9) A ctags/main/keyword_p.h (26) M ctags/main/kind.c (536) M ctags/main/kind.h (78) M ctags/main/lcpp.c (72) M ctags/main/lcpp.h (4) M ctags/main/lregex.c (2230) A ctags/main/lregex.h (47) A ctags/main/lregex_p.h (76) D ctags/main/lxcmd.c (1227) M ctags/main/lxpath.c (12) A ctags/main/lxpath.h (81) M ctags/main/main.c (194) M ctags/main/mbcs.h (23) M ctags/main/nestlevel.c (1) M ctags/main/nestlevel.h (1) M ctags/main/options.c (1985) M ctags/main/options.h (167) A ctags/main/options_p.h (183) D ctags/main/output-ctags.c (59) D ctags/main/output.h (50) A ctags/main/param.c (57) A ctags/main/param.h (38) M ctags/main/parse.c (2988) M ctags/main/parse.h (246) A ctags/main/parse_p.h (154) M ctags/main/parsers.h (3) M ctags/main/promise.c (223) M ctags/main/promise.h (12) A ctags/main/promise_p.h (24) M ctags/main/ptag.c (84) R ctags/main/ptag_p.h (9) M ctags/main/read.c (622) M ctags/main/read.h (42) M ctags/main/repoinfo.h (2) M ctags/main/routines.c (129) M ctags/main/routines.h (75) A ctags/main/routines_p.h (107) M ctags/main/selectors.c (190) M ctags/main/selectors.h (14) M ctags/main/sort.c (94) M ctags/main/strlist.c (106) M ctags/main/strlist.h (2) A ctags/main/subparser.h (81) M ctags/main/trace.h (101) M ctags/main/types.h (30) A ctags/main/writer-ctags.c (292) A ctags/main/writer-etags.c (133) A ctags/main/writer-json.c (248) A ctags/main/writer-xref.c (72) A ctags/main/writer.c (112) A ctags/main/writer_p.h (81) M ctags/main/xtag.c (350) M ctags/main/xtag.h (43) M ctags/parsers/c.c (4) M ctags/parsers/cobol.c (2) M ctags/parsers/erlang.c (1) M ctags/parsers/go.c (3) M ctags/parsers/make.c (1) M ctags/parsers/objc.c (3) M ctags/parsers/pascal.c (2) M ctags/parsers/perl.c (1) M ctags/parsers/python.c (1) M ctags/parsers/r.c (1) M ctags/parsers/ruby.c (2) M ctags/parsers/rust.c (4) M ctags/parsers/sql.c (2) M src/tagmanager/tm_parser.c (2) M tests/ctags/Makefile.am (5) M tests/ctags/Package.pm.tags (3) M tests/ctags/bug1938565.sql.tags (2) M tests/ctags/random.sql.tags (7) M tests/ctags/refcurs.sql.tags (2) A tests/ctags/simple.as (44) A tests/ctags/simple.as.tags (20)
-- Patch Links --
https://github.com/geany/geany/pull/2132.patch https://github.com/geany/geany/pull/2132.diff