aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Gutov2023-04-12 02:27:51 +0300
committerDmitry Gutov2023-04-12 02:28:02 +0300
commitb3a44ff3247dff54659f9f61daf297d3bdc8e2f4 (patch)
treecbdcdf4fa01a43e0dd6a69120660d4a193f0b17d
parent560950468588117b264a9f916fb578e0eb2a124a (diff)
downloademacs-b3a44ff3247dff54659f9f61daf297d3bdc8e2f4.tar.gz
emacs-b3a44ff3247dff54659f9f61daf297d3bdc8e2f4.zip
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).
-rw-r--r--lisp/progmodes/ruby-ts-mode.el18
1 files 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."
1086 (put-text-property pos (1+ pos) 'syntax-table 1086 (put-text-property pos (1+ pos) 'syntax-table
1087 (string-to-syntax "!")))))))) 1087 (string-to-syntax "!"))))))))
1088 1088
1089(defun ruby-ts--sexp-p (node)
1090 ;; Skip parenless calls (implicit parens are both non-obvious to the
1091 ;; user, and might take over when we want to just over some physical
1092 ;; parens/braces).
1093 (or (not (equal (treesit-node-type node)
1094 "argument_list"))
1095 (equal (treesit-node-type (treesit-node-child node 0))
1096 "(")))
1097
1089(defvar-keymap ruby-ts-mode-map 1098(defvar-keymap ruby-ts-mode-map
1090 :doc "Keymap used in Ruby mode" 1099 :doc "Keymap used in Ruby mode"
1091 :parent prog-mode-map 1100 :parent prog-mode-map
@@ -1114,8 +1123,10 @@ leading double colon is not added."
1114 (setq-local treesit-defun-type-regexp ruby-ts--method-regex) 1123 (setq-local treesit-defun-type-regexp ruby-ts--method-regex)
1115 1124
1116 (setq-local treesit-sexp-type-regexp 1125 (setq-local treesit-sexp-type-regexp
1117 (rx bol 1126 (cons (rx
1118 (or "class" 1127 bol
1128 (or
1129 "class"
1119 "module" 1130 "module"
1120 "method" 1131 "method"
1121 "array" 1132 "array"
@@ -1147,7 +1158,8 @@ leading double colon is not added."
1147 "instance_variable" 1158 "instance_variable"
1148 "global_variable" 1159 "global_variable"
1149 ) 1160 )
1150 eol)) 1161 eol)
1162 #'ruby-ts--sexp-p))
1151 1163
1152 ;; AFAIK, Ruby can not nest methods 1164 ;; AFAIK, Ruby can not nest methods
1153 (setq-local treesit-defun-prefer-top-level nil) 1165 (setq-local treesit-defun-prefer-top-level nil)