From: Yuan Fu Date: Mon, 9 Sep 2024 00:30:21 +0000 (-0700) Subject: Add debugging function for treesit.c X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4faed7788972bb44ebad02b0a1ccbf2a48e583c3;p=emacs.git Add debugging function for treesit.c * src/treesit.c (treesit_debug_print_parser_list): New function. (cherry picked from commit 3fcec09f754af9822339eff3ea15d43eb7d19014) --- diff --git a/src/treesit.c b/src/treesit.c index 5aedca44489..cac1d4b4d11 100644 --- a/src/treesit.c +++ b/src/treesit.c @@ -488,6 +488,53 @@ treesit_initialize (void) } } + +/*** Debugging */ + +void treesit_debug_print_parser_list (char *msg, Lisp_Object parser) +{ + struct buffer *buf = XBUFFER (XTS_PARSER (parser)->buffer); + char *buf_name = SSDATA (BVAR (buf, name)); + printf ("%s (%s) [%s] <%s>: %ld(%ld)-(%ld)%ld {\n", + msg == NULL ? "" : msg, + SSDATA (SYMBOL_NAME (Vthis_command)), + SSDATA (SYMBOL_NAME (XTS_PARSER (parser)->language_symbol)), + buf_name, BUF_BEG (buf), + BUF_BEGV (buf), BUF_Z (buf), BUF_ZV (buf)); + Lisp_Object tail = BVAR (buf, ts_parser_list); + + FOR_EACH_TAIL (tail) + { + struct Lisp_TS_Parser *parser = XTS_PARSER (XCAR (tail)); + printf ("[%s %s %s %ld-%ld T:%ld]\n", SSDATA (SYMBOL_NAME (parser->language_symbol)), + SSDATA (SYMBOL_NAME (parser->tag)), + parser->need_reparse ? "NEED-R" : "NONEED", + parser->visible_beg, parser->visible_end, + parser->timestamp); + /* Print ranges. */ + uint32_t len; + const TSRange *ranges + = ts_parser_included_ranges (parser->parser, &len); + + if (!(len == 1 && ranges[0].start_byte == 0 && ranges[0].end_byte == -1)) + { + for (int idx = 0; idx < len; idx++) + { + TSRange range = ranges[idx]; + printf (" [%d, %d)", range.start_byte, range.end_byte); + + /* if (!parser->need_reparse) */ + /* { */ + /* eassert (BUF_BEGV_BYTE (buf) <= range.start_byte + parser->visible_beg); */ + /* eassert (range.end_byte + parser->visible_beg <= BUF_ZV_BYTE (buf)); */ + /* } */ + } + printf ("\n"); + } + } + printf ("}\n\n"); +} + /*** Loading language library */