diff options
| author | Dmitry Gutov | 2023-04-12 02:27:51 +0300 |
|---|---|---|
| committer | Dmitry Gutov | 2023-04-12 02:28:02 +0300 |
| commit | b3a44ff3247dff54659f9f61daf297d3bdc8e2f4 (patch) | |
| tree | cbdcdf4fa01a43e0dd6a69120660d4a193f0b17d | |
| parent | 560950468588117b264a9f916fb578e0eb2a124a (diff) | |
| download | emacs-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.el | 18 |
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) |