emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r109576: Merge from upstream ruby-mod


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109576: Merge from upstream ruby-mode.el
Date: Sun, 12 Aug 2012 18:06:56 -0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109576
author: Nobuyoshi Nakada <address@hidden>, Dmitry Gutov <address@hidden>
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Sun 2012-08-12 18:06:56 -0400
message:
  Merge from upstream ruby-mode.el
  * lisp/progmodes/ruby-mode.el (ruby-mode-map): Remove unnecessary
  binding for `newline'.
  (ruby-move-to-block): When moving backward, stop at block opening,
  not indentation.
  * progmodes/ruby-mode.el (ruby-brace-to-do-end)
  (ruby-do-end-to-brace, ruby-toggle-block): New functions.
  * progmodes/ruby-mode.el (ruby-mode-map): Add binding for
  `ruby-toggle-block'.
  * test/automated/ruby-mode-tests.el (ruby-move-to-block-stops-at-opening)
  (ruby-toggle-block-to-do-end, ruby-toggle-block-to-brace): 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    2012-08-12 17:29:53 +0000
+++ b/lisp/ChangeLog    2012-08-12 22:06:56 +0000
@@ -1,3 +1,14 @@
+2012-08-12  Nobuyoshi Nakada  <address@hidden>
+
+       * progmodes/ruby-mode.el (ruby-mode-map): Remove unnecessary
+       binding for `newline'.
+       (ruby-move-to-block): When moving backward, stop at block opening,
+       not indentation.
+       * progmodes/ruby-mode.el (ruby-brace-to-do-end)
+       (ruby-do-end-to-brace, ruby-toggle-block): New functions.
+       * progmodes/ruby-mode.el (ruby-mode-map): Add binding for
+       `ruby-toggle-block'.
+
 2012-08-12  Stefan Monnier  <address@hidden>
 
        * ibuffer.el (ibuffer-do-toggle-read-only):
@@ -40,16 +51,18 @@
 
 2012-08-09  Dmitry Gutov  <address@hidden>
 
-       Merge stuff from upsteam ruby-mode, part 1 (bug#12169).
+       * progmodes/ruby-mode.el (ruby-expr-beg, ruby-parse-partial):
+       ?, _, and : are symbol constituents, ! is not (but kinda should be).
+       (ruby-syntax-propertize-heredoc): Use ruby-singleton-class-p.
+       (ruby-syntax-propertize-function): Adjust for changes in
+       `ruby-syntax-propertize-heredoc'.
+
+2012-08-09 Nobuyoshi Nakada  <address@hidden>
+
        * progmodes/ruby-mode.el (ruby-mode-map): Remove deprecated
        binding (use `M-;' instead).
-       (ruby-expr-beg, ruby-parse-partial): ?, _, and : are symbol
-       constituents, ! is not (but kinda should be).
        (ruby-singleton-class-p): New function.
-       (ruby-expr-beg, ruby-in-here-doc-p)
-       (ruby-syntax-propertize-heredoc): Use it.
-       (ruby-syntax-propertize-function): Adjust for changes in
-       `ruby-syntax-propertize-heredoc'.
+       (ruby-expr-beg, ruby-in-here-doc-p) Use it.
 
 2012-08-10  Stefan Monnier  <address@hidden>
 

=== modified file 'lisp/progmodes/ruby-mode.el'
--- a/lisp/progmodes/ruby-mode.el       2012-08-10 20:19:09 +0000
+++ b/lisp/progmodes/ruby-mode.el       2012-08-12 22:06:56 +0000
@@ -150,7 +150,7 @@
     (define-key map (kbd "M-C-q") 'ruby-indent-exp)
     (define-key map (kbd "C-M-h") 'backward-kill-word)
     (define-key map (kbd "C-j")   'reindent-then-newline-and-indent)
-    (define-key map (kbd "C-m")   'newline)
+    (define-key map (kbd "C-c {") 'ruby-toggle-block)
     map)
   "Keymap used in Ruby mode.")
 
@@ -881,10 +881,11 @@
   ;; TODO: Make this work for n > 1,
   ;; make it not loop for n = 0,
   ;; document body
-  (let (start pos done down)
-    (setq start (ruby-calculate-indent))
-    (setq down (looking-at (if (< n 0) ruby-block-end-re
-                             (concat "\\<\\(" ruby-block-beg-re "\\)\\>"))))
+  (let ((orig (point))
+        (start (ruby-calculate-indent))
+        (down (looking-at (if (< n 0) ruby-block-end-re
+                            (concat "\\<\\(" ruby-block-beg-re "\\)\\>"))))
+        pos done)
     (while (and (not done) (not (if (< n 0) (bobp) (eobp))))
       (forward-line n)
       (cond
@@ -907,8 +908,18 @@
           (save-excursion
             (back-to-indentation)
             (if (looking-at (concat "\\<\\(" ruby-block-mid-re "\\)\\>"))
-                (setq done nil))))))
-  (back-to-indentation))
+                (setq done nil)))))
+    (back-to-indentation)
+    (when (< n 0)
+      (let ((eol (point-at-eol)) state next)
+        (if (< orig eol) (setq eol orig))
+        (setq orig (point))
+        (while (and (setq next (apply 'ruby-parse-partial eol state))
+                    (< (point) eol))
+          (setq state next))
+        (when (cdaadr state)
+          (goto-char (cdaadr state)))
+        (backward-word)))))
 
 (defun ruby-beginning-of-block (&optional arg)
   "Move backward to the beginning of the current block.
@@ -1116,6 +1127,47 @@
               (if mlist (concat mlist mname) mname)
             mlist)))))
 
+(defun ruby-brace-to-do-end ()
+  (when (looking-at "{")
+    (let ((orig (point)) (end (progn (ruby-forward-sexp) (point))))
+      (when (eq (char-before) ?\})
+        (delete-char -1)
+        (if (eq (char-syntax (char-before)) ?w)
+            (insert " "))
+        (insert "end")
+        (if (eq (char-syntax (char-after)) ?w)
+            (insert " "))
+        (goto-char orig)
+        (delete-char 1)
+        (if (eq (char-syntax (char-before)) ?w)
+            (insert " "))
+        (insert "do")
+        (when (looking-at "\\sw\\||")
+          (insert " ")
+          (backward-char))
+        t))))
+
+(defun ruby-do-end-to-brace ()
+  (when (and (or (bolp)
+                 (not (memq (char-syntax (char-before)) '(?w ?_))))
+             (looking-at "\\<do\\(\\s \\|$\\)"))
+    (let ((orig (point)) (end (progn (ruby-forward-sexp) (point))))
+      (backward-char 3)
+      (when (looking-at ruby-block-end-re)
+        (delete-char 3)
+        (insert "}")
+        (goto-char orig)
+        (delete-char 2)
+        (insert "{")
+        (if (looking-at "\\s +|")
+            (delete-char (- (match-end 0) (match-beginning 0) 1)))
+        t))))
+
+(defun ruby-toggle-block ()
+  (interactive)
+  (or (ruby-brace-to-do-end)
+      (ruby-do-end-to-brace)))
+
 (declare-function ruby-syntax-propertize-heredoc "ruby-mode" (limit))
 (declare-function ruby-syntax-general-delimiters-goto-beg "ruby-mode" ())
 (declare-function ruby-syntax-propertize-general-delimiters "ruby-mode" 
(limit))

=== modified file 'test/ChangeLog'
--- a/test/ChangeLog    2012-08-11 04:46:38 +0000
+++ b/test/ChangeLog    2012-08-12 22:06:56 +0000
@@ -1,3 +1,8 @@
+2012-08-12  Dmitry Gutov  <address@hidden>
+
+       * automated/ruby-mode-tests.el (ruby-move-to-block-stops-at-opening)
+       (ruby-toggle-block-to-do-end, ruby-toggle-block-to-brace): New test.
+
 2012-08-11  Glenn Morris  <address@hidden>
 
        * automated/files.el: New file.
@@ -12,6 +17,10 @@
        Add tests for `ruby-deep-indent-paren' behavior.
        Port all tests from test/misc/test_ruby_mode.rb in Ruby repo.
 
+2012-08-10  Nobuyoshi Nakada  <address@hidden>
+
+       Original tests in test_ruby_mode.rb in upstream (author).
+
 2012-08-09  Dmitry Gutov  <address@hidden>
 
        * automated/ruby-mode-tests.el (ruby-should-indent)

=== modified file 'test/automated/ruby-mode-tests.el'
--- a/test/automated/ruby-mode-tests.el 2012-08-10 20:25:43 +0000
+++ b/test/automated/ruby-mode-tests.el 2012-08-12 22:06:56 +0000
@@ -191,6 +191,32 @@
    |  end
    |"))
 
+(ert-deftest ruby-move-to-block-stops-at-opening ()
+  (with-temp-buffer
+    (insert "def f\nend")
+    (beginning-of-line)
+    (ruby-mode)
+    (ruby-move-to-block -1)
+    (should (looking-at "f$"))))
+
+(ert-deftest ruby-toggle-block-to-do-end ()
+  (with-temp-buffer
+    (insert "foo {|b|\n}\n")
+    (ruby-mode)
+    (search-backward "{")
+    (ruby-toggle-block)
+    (should (string= "foo do |b|\nend\n" (buffer-substring-no-properties
+                                          (point-min) (point-max))))))
+
+(ert-deftest ruby-toggle-block-to-brace ()
+  (with-temp-buffer
+    (insert "foo do |b|\nend\n")
+    (ruby-mode)
+    (search-backward "do")
+    (ruby-toggle-block)
+    (should (string= "foo {|b|\n}\n" (buffer-substring-no-properties
+                                      (point-min) (point-max))))))
+
 (provide 'ruby-mode-tests)
 
 ;;; ruby-mode-tests.el ends here


reply via email to

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