emacs-diffs
[Top][All Lists]
Advanced

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

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


From: Dmitry Gutov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r110090: * lisp/progmodes/ruby-mode.el (ruby-brace-to-do-end): Don't add extra
Date: Wed, 19 Sep 2012 02:10:19 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 110090
committer: Dmitry Gutov <address@hidden>
branch nick: trunk
timestamp: Wed 2012-09-19 02:10:19 +0400
message:
  * lisp/progmodes/ruby-mode.el (ruby-brace-to-do-end): Don't add extra
  whitespace after "end".
  (ruby-do-end-to-brace): Collapse block to one line if it fits
  within fill-column.
modified:
  lisp/ChangeLog
  lisp/progmodes/ruby-mode.el
  test/automated/ruby-mode-tests.el
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2012-09-18 07:07:13 +0000
+++ b/lisp/ChangeLog    2012-09-18 22:10:19 +0000
@@ -1,3 +1,10 @@
+2012-09-18  Dmitry Gutov  <address@hidden>
+
+       * progmodes/ruby-mode.el (ruby-brace-to-do-end): Don't add extra
+       whitespace after "end".
+       (ruby-do-end-to-brace): Collapse block to one line if it fits
+       within fill-column.
+
 2012-09-18  Martin Rudalics  <address@hidden>
 
        * emacs-lisp/debug.el (debugger-bury-or-kill): Fix customization

=== modified file 'lisp/progmodes/ruby-mode.el'
--- a/lisp/progmodes/ruby-mode.el       2012-09-08 23:32:25 +0000
+++ b/lisp/progmodes/ruby-mode.el       2012-09-18 22:10:19 +0000
@@ -1112,8 +1112,9 @@
     (goto-char end)
     (when (eq (char-before) ?\})
       (delete-char -1)
-      (skip-chars-backward " \t")
-      (when (not (bolp))
+      (when (save-excursion
+              (skip-chars-backward " \t")
+              (not (bolp)))
         (insert "\n"))
       (insert "end")
       (setq end-marker (point-marker))
@@ -1137,16 +1138,35 @@
       t)))
 
 (defun ruby-do-end-to-brace (orig end)
-  (goto-char (- end 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))
+  (let (beg-marker end-marker beg-pos end-pos)
+    (goto-char (- end 3))
+    (when (looking-at ruby-block-end-re)
+      (delete-char 3)
+      (setq end-marker (point-marker))
+      (insert "}")
+      (goto-char orig)
+      (delete-char 2)
+      (insert "{")
+      (setq beg-marker (point-marker))
+      (when (looking-at "\\s +|")
+        (delete-char (- (match-end 0) (match-beginning 0) 1))
+        (forward-char)
+        (re-search-forward "|" (line-end-position) t))
+      (save-excursion
+        (skip-chars-forward " \t\n\r")
+        (setq beg-pos (point))
+        (goto-char end-marker)
+        (skip-chars-backward " \t\n\r")
+        (setq end-pos (point)))
+      (when (or
+             (< end-pos beg-pos)
+             (and (= (line-number-at-pos beg-pos) (line-number-at-pos end-pos))
+                  (< (+ (current-column) (- end-pos beg-pos) 2) fill-column)))
+        (just-one-space -1)
+        (goto-char end-marker)
+        (just-one-space -1))
+      (goto-char beg-marker)
+      t)))
 
 (defun ruby-toggle-block ()
   "Toggle block type from do-end to braces or back.

=== modified file 'test/automated/ruby-mode-tests.el'
--- a/test/automated/ruby-mode-tests.el 2012-09-08 23:32:25 +0000
+++ b/test/automated/ruby-mode-tests.el 2012-09-18 22:10:19 +0000
@@ -219,12 +219,16 @@
     (should (string= "foo do |b|\nend" (buffer-string)))))
 
 (ert-deftest ruby-toggle-block-to-brace ()
-  (with-temp-buffer
-    (insert "foo do |b|\nend")
-    (ruby-mode)
-    (beginning-of-line)
-    (ruby-toggle-block)
-    (should (string= "foo {|b|\n}" (buffer-string)))))
+  (let ((pairs '((16 . "foo {|b| b + 2 }")
+                 (15 . "foo {|b|\n  b + 2\n}"))))
+    (dolist (pair pairs)
+      (with-temp-buffer
+        (let ((fill-column (car pair)))
+          (insert "foo do |b|\n  b + 2\nend")
+          (ruby-mode)
+          (beginning-of-line)
+          (ruby-toggle-block)
+          (should (string= (cdr pair) (buffer-string))))))))
 
 (ert-deftest ruby-toggle-block-to-multiline ()
   (with-temp-buffer


reply via email to

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