emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r111776: * lisp/progmodes/ruby-mode.e


From: Dmitry Gutov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r111776: * lisp/progmodes/ruby-mode.el (ruby-parse-partial): Don't increase
Date: Thu, 14 Feb 2013 07:33:55 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 111776
committer: Dmitry Gutov <address@hidden>
branch nick: trunk
timestamp: Thu 2013-02-14 07:33:55 +0400
message:
  * lisp/progmodes/ruby-mode.el (ruby-parse-partial): Don't increase
  depth for unfinished percent literal.  Not using it in the caller.
  (ruby-move-to-block): Jump over multiline literals of all types,
  ignoring code-looking contents inside them.
  
  * test/automated/ruby-mode-tests.el
  (ruby-move-to-block-skips-percent-literal): Add depth-affecting
  bits inside the examples.
  (ruby-move-to-block-skips-heredoc): New test.
modified:
  lisp/ChangeLog
  lisp/progmodes/ruby-mode.el
  test/ChangeLog
  test/automated/ruby-mode-tests.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-02-13 16:23:15 +0000
+++ b/lisp/ChangeLog    2013-02-14 03:33:55 +0000
@@ -1,3 +1,10 @@
+2013-02-14  Dmitry Gutov  <address@hidden>
+
+       * progmodes/ruby-mode.el (ruby-parse-partial): Don't increase
+       depth for unfinished percent literal.  Not using it in the caller.
+       (ruby-move-to-block): Jump over multiline literals of all types,
+       ignoring code-looking contents inside them.
+
 2013-02-13  Michael Albinus  <address@hidden>
 
        Use ControlMaster where applicable.  (Bug#13677)

=== modified file 'lisp/progmodes/ruby-mode.el'
--- a/lisp/progmodes/ruby-mode.el       2013-02-13 08:15:05 +0000
+++ b/lisp/progmodes/ruby-mode.el       2013-02-14 03:33:55 +0000
@@ -519,12 +519,6 @@
                               (concat "[^\\]\\(\\\\\\\\\\)*" w))
                             end t)))
             (setq in-string (point))
-            (when (eq (char-syntax (string-to-char w)) ?\()
-              ;; The rest of the literal, when parsed separately, will
-              ;; have the depth of -1. So in the rare case when this
-              ;; number is used despite the in-string status, the
-              ;; depths will balance.
-              (setq depth (1+ depth)))
             (goto-char end)))
          (t
           (goto-char pnt))))
@@ -913,10 +907,16 @@
           (re-search-forward "^=end\\>"))
          ((and backward (looking-at "^=end\\>"))
           (re-search-backward "^=begin\\>"))
+         ;; Jump over a multiline literal.
+         ((ruby-in-ppss-context-p 'string)
+          (goto-char (nth 8 (syntax-ppss)))
+          (unless backward
+            (forward-sexp)
+            (when (bolp) (forward-char -1)))) ; After a heredoc.
          (t
-          (incf depth (or (nth 2 (ruby-parse-region (point)
-                                                    (line-end-position)))
-                          0))
+          (let ((state (ruby-parse-region (point) (line-end-position))))
+            (unless (car state) ; Line ends with unfinished string.
+              (setq depth (+ (nth 2 state) depth))))
           (cond
            ;; Deeper indentation, we found a block.
            ;; FIXME: We can't recognize empty blocks this way.

=== modified file 'test/ChangeLog'
--- a/test/ChangeLog    2013-02-13 08:15:05 +0000
+++ b/test/ChangeLog    2013-02-14 03:33:55 +0000
@@ -1,3 +1,10 @@
+2013-02-14  Dmitry Gutov  <address@hidden>
+
+       * automated/ruby-mode-tests.el
+       (ruby-move-to-block-skips-percent-literal): Add depth-affecting
+       bits inside the examples.
+       (ruby-move-to-block-skips-heredoc): New test.
+
 2013-02-13  Dmitry Gutov  <address@hidden>
 
        * automated/ruby-mode-tests.el

=== modified file 'test/automated/ruby-mode-tests.el'
--- a/test/automated/ruby-mode-tests.el 2013-02-13 08:15:05 +0000
+++ b/test/automated/ruby-mode-tests.el 2013-02-14 03:33:55 +0000
@@ -449,20 +449,37 @@
   (dolist (s (list (ruby-test-string
                     "foo do
                     |  a = %%w(
+                    |    def yaa
                     |  )
                     |end")
                    (ruby-test-string
                     "foo do
                     |  a = %%w|
+                    |    end
                     |  |
                     |end")))
     (ruby-with-temp-buffer s
       (goto-line 1)
       (ruby-end-of-block)
-      (should (= 4 (line-number-at-pos)))
+      (should (= 5 (line-number-at-pos)))
       (ruby-beginning-of-block)
       (should (= 1 (line-number-at-pos))))))
 
+(ert-deftest ruby-move-to-block-skips-heredoc ()
+  (ruby-with-temp-buffer
+      (ruby-test-string
+       "if something_wrong?
+       |  ActiveSupport::Deprecation.warn(<<-eowarn)
+       |  boo hoo
+       |  end
+       |  eowarn
+       |end")
+    (goto-line 1)
+    (ruby-end-of-block)
+    (should (= 6 (line-number-at-pos)))
+    (ruby-beginning-of-block)
+    (should (= 1 (line-number-at-pos)))))
+
 (provide 'ruby-mode-tests)
 
 ;;; ruby-mode-tests.el ends here


reply via email to

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