]> git.eshelyaron.com Git - emacs.git/commitdiff
ruby-toggle-block-space-before-parameters: New user option
authorDmitry Gutov <dgutov@yandex.ru>
Fri, 21 Jan 2022 02:59:39 +0000 (04:59 +0200)
committerDmitry Gutov <dgutov@yandex.ru>
Fri, 21 Jan 2022 02:59:39 +0000 (04:59 +0200)
* lisp/progmodes/ruby-mode.el (ruby-toggle-block-space-before-parameters):
New user option (bug#53321).
(ruby-do-end-to-brace): Handle it.

* test/lisp/progmodes/ruby-mode-tests.el
(ruby-toggle-block-to-brace-no-space): New test.

etc/NEWS
lisp/progmodes/ruby-mode.el
test/lisp/progmodes/ruby-mode-tests.el

index ae4bf7e4d3fa194a2af9c0e6c247f2ab05440516..c73e34c67251581d1bb2bcebdeb07d4bb6645730 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -842,6 +842,10 @@ the Netscape web browser was released in February, 2008.
 This support has been obsolete since Emacs 25.1.  The final version of
 the Galeon web browser was released in September, 2008.
 
+** Ruby Mode
+
+*** New user option 'ruby-toggle-block-space-before-parameters'.
+
 ** Miscellaneous
 
 ---
index 72631a6557fc50ba1367066d423f5aa3e0265432..eb54ffe05a89c7b1286041deb244730e0f7191e2 100644 (file)
@@ -325,6 +325,13 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'."
   "Use `ruby-encoding-map' to set encoding magic comment if this is non-nil."
   :type 'boolean :group 'ruby)
 
+(defcustom ruby-toggle-block-space-before-parameters t
+  "When non-nil, ensure space between the \"toggled\" curly and parameters.
+This only affects the output of the command `ruby-toggle-block'."
+  :type 'boolean
+  :safe 'booleanp
+  :version "29.1")
+
 ;;; SMIE support
 
 (require 'smie)
@@ -1722,13 +1729,14 @@ See `add-log-current-defun-function'."
       (insert "}")
       (goto-char orig)
       (delete-char 2)
-      ;; Maybe this should be customizable, let's see if anyone asks.
-      (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))
+      (insert "{")
+      (if (looking-at "\\s +|")
+          (progn
+            (just-one-space (if ruby-toggle-block-space-before-parameters 1 0))
+            (setq beg-marker (point-marker))
+            (forward-char)
+            (re-search-forward "|" (line-end-position) t))
+        (setq beg-marker (point-marker)))
       (save-excursion
         (skip-chars-forward " \t\n\r")
         (setq beg-pos (point))
index 23e13b94e6b1b0c304b90fe80b724a2a342a3116..33fded5a59b2f2c523b2ea5f441c62ebb618ca64 100644 (file)
@@ -407,6 +407,13 @@ VALUES-PLIST is a list with alternating index and value elements."
     (ruby-toggle-block)
     (should (string= "foo { \"#{bar}\" }" (buffer-string)))))
 
+(ert-deftest ruby-toggle-block-to-brace-no-space ()
+  (ruby-with-temp-buffer "foo do |b|\n  b + 2\nend"
+    (beginning-of-line)
+    (let (ruby-toggle-block-space-before-parameters)
+      (ruby-toggle-block))
+    (should (string= "foo {|b| b + 2 }" (buffer-string)))))
+
 (ert-deftest ruby-recognize-symbols-starting-with-at-character ()
   (ruby-assert-face ":@abc" 3 font-lock-constant-face))