Eli Zaretskii writes: >> Date: Tue, 07 Feb 2023 23:20:09 +0100 >> From: Daniel Martín via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" >> >> >> Steps to reproduce the problem: >> >> emacs -Q >> C-x C-f emacs/src/xdisp.c RET >> M-x c-ts-mode RET >> C-x h >> TAB >> >> Expected result: >> >> The buffer is reindented. >> >> Actual results: >> >> The operation fails with this error: >> >> Debugger entered--Lisp error: (wrong-type-argument integer-or-marker-p nil) >> treesit-indent-region(1 1214226) >> indent-region(1 1214226) >> indent-for-tab-command(nil) >> funcall-interactively(indent-for-tab-command nil) >> call-interactively(indent-for-tab-command nil nil) >> command-execute(indent-for-tab-command) > > Thank you for your report. > > Yuan and Theo, could you please look into this? I briefly stepped > through the code involved in the problem, and it sounds like it makes > some assumptions regarding the nodes which are not necessarily true in > Real Life. c-ts-mode from the tip of the emacs-29 branch can indent xdisp.c without failures if I apply the patch from bug#61691 and the patch attached to this email message. It is very slow, though, compared to c-mode. I have a very fast machine and it took around 10 minutes to indent the whole file, while c-mode indented the file in 30-40 seconds. I guess the algorithm in treesit-indent-region doesn't scale very well for very big files like xdisp.c.