emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r114901: * lisp/progmodes/ruby-mode.el (ruby-smie--r


From: Dmitry Gutov
Subject: [Emacs-diffs] trunk r114901: * lisp/progmodes/ruby-mode.el (ruby-smie--rule-parent-skip-assign): New
Date: Sat, 02 Nov 2013 05:18:16 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 114901
revision-id: address@hidden
parent: address@hidden
committer: Dmitry Gutov <address@hidden>
branch nick: trunk
timestamp: Sat 2013-11-02 09:18:11 +0400
message:
  * lisp/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.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/progmodes/ruby-mode.el    
rubymode.el-20091113204419-o5vbwnq5f7feedwu-8804
  test/indent/ruby.rb            ruby.rb-20120424165921-h044139hbrd7snvw-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-11-02 01:10:10 +0000
+++ b/lisp/ChangeLog    2013-11-02 05:18:11 +0000
@@ -1,5 +1,12 @@
 2013-11-02  Dmitry Gutov  <address@hidden>
 
+       * 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  <address@hidden>
+
        * progmodes/ruby-mode.el Use `syntax-propertize-function'
        unconditionally.  Remove now unnecessary forward declarations.
        Remove XEmacs-specific setup.

=== modified file 'lisp/progmodes/ruby-mode.el'
--- a/lisp/progmodes/ruby-mode.el       2013-11-02 01:10:10 +0000
+++ b/lisp/progmodes/ruby-mode.el       2013-11-02 05:18:11 +0000
@@ -467,6 +467,16 @@
            (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 @@
       ((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 @@
        (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)))

=== modified file 'test/indent/ruby.rb'
--- a/test/indent/ruby.rb       2013-10-27 03:25:03 +0000
+++ b/test/indent/ruby.rb       2013-11-02 05:18:11 +0000
@@ -225,6 +225,14 @@
         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|


reply via email to

[Prev in Thread] Current Thread [Next in Thread]