From: Dmitry Gutov Date: Tue, 26 Apr 2022 02:36:35 +0000 (+0300) Subject: Fix Ruby indentation with double splat as first block param X-Git-Tag: emacs-29.0.90~1931^2~303 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=39646c822bf9a3fb1ccdca0a7a5d192e607c03c3;p=emacs.git Fix Ruby indentation with double splat as first block param * lisp/progmodes/ruby-mode.el (ruby-smie--forward-token) (ruby-smie--backward-token): Tokenize "**" separately from "|". Problem reported at https://github.com/dgutov/robe/issues/136. --- diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index fdc8164dc0b..a1977246341 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -508,7 +508,7 @@ This only affects the output of the command `ruby-toggle-block'." ((member tok '("unless" "if" "while" "until")) (if (save-excursion (forward-word-strictly -1) (ruby-smie--bosp)) tok "iuwu-mod")) - ((string-match-p "\\`|[*&]?\\'" tok) + ((string-match-p "\\`|[*&]*\\'" tok) (forward-char (- 1 (length tok))) (setq tok "|") (cond @@ -561,7 +561,7 @@ This only affects the output of the command `ruby-toggle-block'." ((ruby-smie--closing-pipe-p) "closing-|") (t tok))) ((string-match-p "\\`[^|]+|\\'" tok) "closing-|") - ((string-match-p "\\`|[*&]\\'" tok) + ((string-match-p "\\`|[*&]*\\'" tok) (forward-char 1) (substring tok 1)) ((and (equal tok "") (eq ?\\ (char-before)) (looking-at "\n")) diff --git a/test/lisp/progmodes/ruby-mode-resources/ruby.rb b/test/lisp/progmodes/ruby-mode-resources/ruby.rb index f31cea86a54..0c206b1e0c2 100644 --- a/test/lisp/progmodes/ruby-mode-resources/ruby.rb +++ b/test/lisp/progmodes/ruby-mode-resources/ruby.rb @@ -491,3 +491,12 @@ in ['th', orig_text, 'en', trans_text] in {'th' => orig_text, 'ja' => trans_text} puts "Japanese translation: #{orig_text} => #{trans_text}" end + +# Tokenizing "**" and "|" separately. +def resolve(**args) + members = proc do |**args| + p(**args) + end + + member.call(**args) +end