diff options
| author | Nobuyoshi Nakada | 2012-08-12 18:06:56 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2012-08-12 18:06:56 -0400 |
| commit | 0d9e2599ec037fe0582c36ea5e965cd6fa65d9dc (patch) | |
| tree | 72bedb63adb998b382171b37bc3ae5c0aa8122dc | |
| parent | 577d5eea9a7b6f0cfdf7fafb6d2fdc82e4d702a7 (diff) | |
| download | emacs-0d9e2599ec037fe0582c36ea5e965cd6fa65d9dc.tar.gz emacs-0d9e2599ec037fe0582c36ea5e965cd6fa65d9dc.zip | |
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.
| -rw-r--r-- | lisp/ChangeLog | 27 | ||||
| -rw-r--r-- | lisp/progmodes/ruby-mode.el | 66 | ||||
| -rw-r--r-- | test/ChangeLog | 9 | ||||
| -rw-r--r-- | test/automated/ruby-mode-tests.el | 26 |
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 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-08-12 Stefan Monnier <monnier@iro.umontreal.ca> | 12 | 2012-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 | ||
| 41 | 2012-08-09 Dmitry Gutov <dgutov@yandex.ru> | 52 | 2012-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 | |||
| 60 | 2012-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 | ||
| 54 | 2012-08-10 Stefan Monnier <monnier@iro.umontreal.ca> | 67 | 2012-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 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-08-11 Glenn Morris <rgm@gnu.org> | 6 | 2012-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 | ||
| 20 | 2012-08-10 Nobuyoshi Nakada <nobu@ruby-lang.org> | ||
| 21 | |||
| 22 | Original tests in test_ruby_mode.rb in upstream (author). | ||
| 23 | |||
| 15 | 2012-08-09 Dmitry Gutov <dgutov@yandex.ru> | 24 | 2012-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 |