From b3a44ff3247dff54659f9f61daf297d3bdc8e2f4 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Wed, 12 Apr 2023 02:27:51 +0300 Subject: [PATCH] ruby-ts-mode: Do not treat parenless calls' args as separate sexp * lisp/progmodes/ruby-ts-mode.el (ruby-ts--sexp-p): New function. (ruby-ts-mode): Use it in treesit-sexp-type-regexp (bug#62086). --- lisp/progmodes/ruby-ts-mode.el | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el index ddf2ee98c3b..7a00977f14a 100644 --- a/lisp/progmodes/ruby-ts-mode.el +++ b/lisp/progmodes/ruby-ts-mode.el @@ -1086,6 +1086,15 @@ leading double colon is not added." (put-text-property pos (1+ pos) 'syntax-table (string-to-syntax "!")))))))) +(defun ruby-ts--sexp-p (node) + ;; Skip parenless calls (implicit parens are both non-obvious to the + ;; user, and might take over when we want to just over some physical + ;; parens/braces). + (or (not (equal (treesit-node-type node) + "argument_list")) + (equal (treesit-node-type (treesit-node-child node 0)) + "("))) + (defvar-keymap ruby-ts-mode-map :doc "Keymap used in Ruby mode" :parent prog-mode-map @@ -1114,8 +1123,10 @@ leading double colon is not added." (setq-local treesit-defun-type-regexp ruby-ts--method-regex) (setq-local treesit-sexp-type-regexp - (rx bol - (or "class" + (cons (rx + bol + (or + "class" "module" "method" "array" @@ -1147,7 +1158,8 @@ leading double colon is not added." "instance_variable" "global_variable" ) - eol)) + eol) + #'ruby-ts--sexp-p)) ;; AFAIK, Ruby can not nest methods (setq-local treesit-defun-prefer-top-level nil) -- 2.39.5