Subject: bug#59498: 29.0.50; c++-ts-mode get wrong-type-argument error when enabled

From: Randy Taylor <[email-masked]>
Date: Thu, 24 Nov 2022 14:39:19 +0000

On Wednesday, November 23rd, 2022 at 05:53, Eason Huang <[email-masked]> wrote:

> 
> 
> But when I try to indent code,
> it will raise the error (Wrong type argument: stringp, nil) again.
> It should be a different bug.
> 
> Steps to reproduce:
> 
> After the step 4, try to type the code as below:
> 
> int main(){
> <-- put you cursor at the first colum 1, and then hit TAB(indent-for-tab-command)
> 
> }
> 
> after you hit TAB at the above code, you will get the backtrace error as
> below:
> 
> Debugger entered--Lisp error: (wrong-type-argument stringp nil)
> looking-at(nil t)
> #f(compiled-function (&rest _) #<bytecode 0x18b0dfc57c56ebd8>)(nil #<treesit-node (compound_statement) in 11-15> 13)
> 
> #f(compiled-function (fn) #<bytecode 0x188c898311f019af>)(#f(compiled-function (&rest _) #<bytecode 0x18b0dfc57c56ebd8>))
> 
> mapcar(#f(compiled-function (fn) #<bytecode 0x188c898311f019af>) (#f(compiled-function (n parent &rest _) #<bytecode 0x149caa867664fee9>) #f(compiled-function (&rest _) #<bytecode 0x18b0dfc57c56ebd8>)))
> 
> #f(compiled-function (node parent bol &rest _) #<bytecode -0xb869f433d8fc770>)(nil #<treesit-node (compound_statement) in 11-15> 13)
> 
> treesit--simple-indent-eval(((and (parent-is "comment") comment-end) nil #<treesit-node (compound_statement) in 11-15> 13))
> 
> treesit-simple-indent(nil #<treesit-node (compound_statement) in 11-15> 13)
> 
> treesit--indent-1()
> treesit-indent()
> indent-according-to-mode()
> electric-indent-post-self-insert-function()
> newline(nil 1)
> funcall-interactively(newline nil 1)
> command-execute(newline)
> 
> 
> --
> Eason Huang
> 

The attached patch fixes it for me.

From 94d7bd76b8ec48378b044ff691fb5ef2f9698c08 Mon Sep 17 00:00:00 2001
From: Randy Taylor <[email-masked]>
Date: Thu, 24 Nov 2022 09:31:53 -0500
Subject: [PATCH] Fix c++-ts-mode indentation (Bug#59498)

* lisp/progmodes/c-ts-mode.el (c++-ts-mode): Set treesit-comment-start
and treesit-comment-end.
---
 lisp/progmodes/c-ts-mode.el | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index fc35d9aedda..48f504214e2 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -570,6 +570,8 @@ c++-ts-mode
   (setq-local comment-start "// ")
   (setq-local comment-start-skip "\\(?://+\\|/\\*+\\)\\s *")
   (setq-local comment-end "")
+  (setq-local treesit-comment-start (rx "/" (or (+ "/") (+ "*"))))
+  (setq-local treesit-comment-end (rx (+ (or "*")) "/"))
 
   (treesit-parser-create 'cpp)
 
-- 
2.38.1