aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog27
-rw-r--r--lisp/progmodes/ruby-mode.el66
-rw-r--r--test/ChangeLog9
-rw-r--r--test/automated/ruby-mode-tests.el26
4 files changed, 114 insertions, 14 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index bcaf4a328f5..6f54b9f7c0e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,14 @@
12012-08-12 Nobuyoshi Nakada <nobu@ruby-lang.org>
2
3 * progmodes/ruby-mode.el (ruby-mode-map): Remove unnecessary
4 binding for `newline'.
5 (ruby-move-to-block): When moving backward, stop at block opening,
6 not indentation.
7 * progmodes/ruby-mode.el (ruby-brace-to-do-end)
8 (ruby-do-end-to-brace, ruby-toggle-block): New functions.
9 * progmodes/ruby-mode.el (ruby-mode-map): Add binding for
10 `ruby-toggle-block'.
11
12012-08-12 Stefan Monnier <monnier@iro.umontreal.ca> 122012-08-12 Stefan Monnier <monnier@iro.umontreal.ca>
2 13
3 * ibuffer.el (ibuffer-do-toggle-read-only): 14 * ibuffer.el (ibuffer-do-toggle-read-only):
@@ -40,16 +51,18 @@
40 51
412012-08-09 Dmitry Gutov <dgutov@yandex.ru> 522012-08-09 Dmitry Gutov <dgutov@yandex.ru>
42 53
43 Merge stuff from upsteam ruby-mode, part 1 (bug#12169). 54 * progmodes/ruby-mode.el (ruby-expr-beg, ruby-parse-partial):
55 ?, _, and : are symbol constituents, ! is not (but kinda should be).
56 (ruby-syntax-propertize-heredoc): Use ruby-singleton-class-p.
57 (ruby-syntax-propertize-function): Adjust for changes in
58 `ruby-syntax-propertize-heredoc'.
59
602012-08-09 Nobuyoshi Nakada <nobu@ruby-lang.org>
61
44 * progmodes/ruby-mode.el (ruby-mode-map): Remove deprecated 62 * progmodes/ruby-mode.el (ruby-mode-map): Remove deprecated
45 binding (use `M-;' instead). 63 binding (use `M-;' instead).
46 (ruby-expr-beg, ruby-parse-partial): ?, _, and : are symbol
47 constituents, ! is not (but kinda should be).
48 (ruby-singleton-class-p): New function. 64 (ruby-singleton-class-p): New function.
49 (ruby-expr-beg, ruby-in-here-doc-p) 65 (ruby-expr-beg, ruby-in-here-doc-p) Use it.
50 (ruby-syntax-propertize-heredoc): Use it.
51 (ruby-syntax-propertize-function): Adjust for changes in
52 `ruby-syntax-propertize-heredoc'.
53 66
542012-08-10 Stefan Monnier <monnier@iro.umontreal.ca> 672012-08-10 Stefan Monnier <monnier@iro.umontreal.ca>
55 68
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 68abaff21d2..744dd430658 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -150,7 +150,7 @@ This should only be called after matching against `ruby-here-doc-beg-re'."
150 (define-key map (kbd "M-C-q") 'ruby-indent-exp) 150 (define-key map (kbd "M-C-q") 'ruby-indent-exp)
151 (define-key map (kbd "C-M-h") 'backward-kill-word) 151 (define-key map (kbd "C-M-h") 'backward-kill-word)
152 (define-key map (kbd "C-j") 'reindent-then-newline-and-indent) 152 (define-key map (kbd "C-j") 'reindent-then-newline-and-indent)
153 (define-key map (kbd "C-m") 'newline) 153 (define-key map (kbd "C-c {") 'ruby-toggle-block)
154 map) 154 map)
155 "Keymap used in Ruby mode.") 155 "Keymap used in Ruby mode.")
156 156
@@ -881,10 +881,11 @@ or blocks containing the current block."
881 ;; TODO: Make this work for n > 1, 881 ;; TODO: Make this work for n > 1,
882 ;; make it not loop for n = 0, 882 ;; make it not loop for n = 0,
883 ;; document body 883 ;; document body
884 (let (start pos done down) 884 (let ((orig (point))
885 (setq start (ruby-calculate-indent)) 885 (start (ruby-calculate-indent))
886 (setq down (looking-at (if (< n 0) ruby-block-end-re 886 (down (looking-at (if (< n 0) ruby-block-end-re
887 (concat "\\<\\(" ruby-block-beg-re "\\)\\>")))) 887 (concat "\\<\\(" ruby-block-beg-re "\\)\\>"))))
888 pos done)
888 (while (and (not done) (not (if (< n 0) (bobp) (eobp)))) 889 (while (and (not done) (not (if (< n 0) (bobp) (eobp))))
889 (forward-line n) 890 (forward-line n)
890 (cond 891 (cond
@@ -907,8 +908,18 @@ or blocks containing the current block."
907 (save-excursion 908 (save-excursion
908 (back-to-indentation) 909 (back-to-indentation)
909 (if (looking-at (concat "\\<\\(" ruby-block-mid-re "\\)\\>")) 910 (if (looking-at (concat "\\<\\(" ruby-block-mid-re "\\)\\>"))
910 (setq done nil)))))) 911 (setq done nil)))))
911 (back-to-indentation)) 912 (back-to-indentation)
913 (when (< n 0)
914 (let ((eol (point-at-eol)) state next)
915 (if (< orig eol) (setq eol orig))
916 (setq orig (point))
917 (while (and (setq next (apply 'ruby-parse-partial eol state))
918 (< (point) eol))
919 (setq state next))
920 (when (cdaadr state)
921 (goto-char (cdaadr state)))
922 (backward-word)))))
912 923
913(defun ruby-beginning-of-block (&optional arg) 924(defun ruby-beginning-of-block (&optional arg)
914 "Move backward to the beginning of the current block. 925 "Move backward to the beginning of the current block.
@@ -1116,6 +1127,47 @@ See `add-log-current-defun-function'."
1116 (if mlist (concat mlist mname) mname) 1127 (if mlist (concat mlist mname) mname)
1117 mlist))))) 1128 mlist)))))
1118 1129
1130(defun ruby-brace-to-do-end ()
1131 (when (looking-at "{")
1132 (let ((orig (point)) (end (progn (ruby-forward-sexp) (point))))
1133 (when (eq (char-before) ?\})
1134 (delete-char -1)
1135 (if (eq (char-syntax (char-before)) ?w)
1136 (insert " "))
1137 (insert "end")
1138 (if (eq (char-syntax (char-after)) ?w)
1139 (insert " "))
1140 (goto-char orig)
1141 (delete-char 1)
1142 (if (eq (char-syntax (char-before)) ?w)
1143 (insert " "))
1144 (insert "do")
1145 (when (looking-at "\\sw\\||")
1146 (insert " ")
1147 (backward-char))
1148 t))))
1149
1150(defun ruby-do-end-to-brace ()
1151 (when (and (or (bolp)
1152 (not (memq (char-syntax (char-before)) '(?w ?_))))
1153 (looking-at "\\<do\\(\\s \\|$\\)"))
1154 (let ((orig (point)) (end (progn (ruby-forward-sexp) (point))))
1155 (backward-char 3)
1156 (when (looking-at ruby-block-end-re)
1157 (delete-char 3)
1158 (insert "}")
1159 (goto-char orig)
1160 (delete-char 2)
1161 (insert "{")
1162 (if (looking-at "\\s +|")
1163 (delete-char (- (match-end 0) (match-beginning 0) 1)))
1164 t))))
1165
1166(defun ruby-toggle-block ()
1167 (interactive)
1168 (or (ruby-brace-to-do-end)
1169 (ruby-do-end-to-brace)))
1170
1119(declare-function ruby-syntax-propertize-heredoc "ruby-mode" (limit)) 1171(declare-function ruby-syntax-propertize-heredoc "ruby-mode" (limit))
1120(declare-function ruby-syntax-general-delimiters-goto-beg "ruby-mode" ()) 1172(declare-function ruby-syntax-general-delimiters-goto-beg "ruby-mode" ())
1121(declare-function ruby-syntax-propertize-general-delimiters "ruby-mode" (limit)) 1173(declare-function ruby-syntax-propertize-general-delimiters "ruby-mode" (limit))
diff --git a/test/ChangeLog b/test/ChangeLog
index 0e016260abe..a0163b56e6d 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
12012-08-12 Dmitry Gutov <dgutov@yandex.ru>
2
3 * automated/ruby-mode-tests.el (ruby-move-to-block-stops-at-opening)
4 (ruby-toggle-block-to-do-end, ruby-toggle-block-to-brace): New test.
5
12012-08-11 Glenn Morris <rgm@gnu.org> 62012-08-11 Glenn Morris <rgm@gnu.org>
2 7
3 * automated/files.el: New file. 8 * automated/files.el: New file.
@@ -12,6 +17,10 @@
12 Add tests for `ruby-deep-indent-paren' behavior. 17 Add tests for `ruby-deep-indent-paren' behavior.
13 Port all tests from test/misc/test_ruby_mode.rb in Ruby repo. 18 Port all tests from test/misc/test_ruby_mode.rb in Ruby repo.
14 19
202012-08-10 Nobuyoshi Nakada <nobu@ruby-lang.org>
21
22 Original tests in test_ruby_mode.rb in upstream (author).
23
152012-08-09 Dmitry Gutov <dgutov@yandex.ru> 242012-08-09 Dmitry Gutov <dgutov@yandex.ru>
16 25
17 * automated/ruby-mode-tests.el (ruby-should-indent) 26 * automated/ruby-mode-tests.el (ruby-should-indent)
diff --git a/test/automated/ruby-mode-tests.el b/test/automated/ruby-mode-tests.el
index f91b6e44b22..df51aa0d15a 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -191,6 +191,32 @@ VALUES-PLIST is a list with alternating index and value elements."
191 | end 191 | end
192 |")) 192 |"))
193 193
194(ert-deftest ruby-move-to-block-stops-at-opening ()
195 (with-temp-buffer
196 (insert "def f\nend")
197 (beginning-of-line)
198 (ruby-mode)
199 (ruby-move-to-block -1)
200 (should (looking-at "f$"))))
201
202(ert-deftest ruby-toggle-block-to-do-end ()
203 (with-temp-buffer
204 (insert "foo {|b|\n}\n")
205 (ruby-mode)
206 (search-backward "{")
207 (ruby-toggle-block)
208 (should (string= "foo do |b|\nend\n" (buffer-substring-no-properties
209 (point-min) (point-max))))))
210
211(ert-deftest ruby-toggle-block-to-brace ()
212 (with-temp-buffer
213 (insert "foo do |b|\nend\n")
214 (ruby-mode)
215 (search-backward "do")
216 (ruby-toggle-block)
217 (should (string= "foo {|b|\n}\n" (buffer-substring-no-properties
218 (point-min) (point-max))))))
219
194(provide 'ruby-mode-tests) 220(provide 'ruby-mode-tests)
195 221
196;;; ruby-mode-tests.el ends here 222;;; ruby-mode-tests.el ends here