]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/progmodes/ruby-mode.el (ruby-smie--rule-parent-skip-assign): New
authorDmitry Gutov <dgutov@yandex.ru>
Sat, 2 Nov 2013 05:18:11 +0000 (09:18 +0400)
committerDmitry Gutov <dgutov@yandex.ru>
Sat, 2 Nov 2013 05:18:11 +0000 (09:18 +0400)
function, replacement for `smie-rule-parent' for when we want to
skip over our direct parent if it's an assignment token..
(ruby-smie-rules): Use it.

lisp/ChangeLog
lisp/progmodes/ruby-mode.el
test/indent/ruby.rb

index 3de7afba477eb879a078cce2c96fb15b911a6456..c334d2e8c3cae2a2a558091c375fd74c4ab3293b 100644 (file)
@@ -1,3 +1,10 @@
+2013-11-02  Dmitry Gutov  <dgutov@yandex.ru>
+
+       * progmodes/ruby-mode.el (ruby-smie--rule-parent-skip-assign): New
+       function, replacement for `smie-rule-parent' for when we want to
+       skip over our direct parent if it's an assignment token..
+       (ruby-smie-rules): Use it.
+
 2013-11-02  Dmitry Gutov  <dgutov@yandex.ru>
 
        * progmodes/ruby-mode.el Use `syntax-propertize-function'
index 75c59ebe1fd86e3aefa2a508720d024f2c5af866..36aa8eeae963ae301f0f517379da5d9313f5d784 100644 (file)
@@ -467,6 +467,16 @@ explicitly declared in magic comment."
            (t ";")))
          (t tok)))))))
 
+(defun ruby-smie--rule-parent-skip-assign ()
+  (let* ((parent (smie-indent--parent))
+         (tok (caddr parent)))
+    (if (and (stringp tok) (string-match-p "[+-*&|^]?=\\'" tok))
+        (progn
+          (goto-char (cadr parent))
+          (let (smie--parent)
+            (smie-rule-parent)))
+      (smie-rule-parent))))
+
 (defun ruby-smie-rules (kind token)
   (pcase (cons kind token)
     (`(:elem . basic) ruby-indent-level)
@@ -489,7 +499,7 @@ explicitly declared in magic comment."
       ((and (equal token "{")
             (not (smie-rule-prev-p "(" "{" "[" "," "=>" "=" "return" ";")))
        ;; Curly block opener.
-       (smie-rule-parent))
+       (ruby-smie--rule-parent-skip-assign))
       ((smie-rule-hanging-p)
        ;; Treat purely syntactic block-constructs as being part of their parent,
        ;; when the opening statement is hanging.
@@ -498,7 +508,7 @@ explicitly declared in magic comment."
        (cons 'column  (smie-indent-virtual)))))
     (`(:after . ,(or "=" "iuwu-mod")) 2)
     (`(:after . " @ ") (smie-rule-parent))
-    (`(:before . "do") (smie-rule-parent))
+    (`(:before . "do") (ruby-smie--rule-parent-skip-assign))
     (`(,(or :before :after) . ".")
      (unless (smie-rule-parent-p ".")
        (smie-rule-parent ruby-indent-level)))
index 633b2991d5e37454f1555b7add543de19f2bb13a..65c33bb3ecf43a5dcb064654c2f23e1cfca5adba 100644 (file)
@@ -225,6 +225,14 @@ tee = if foo
         bar
       end
 
+a = b {
+  c
+}
+
+aa = bb do
+  cc
+end
+
 # Examples below still fail with `ruby-use-smie' on:
 
 foo = [1, 2, 3].map do |i|