summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2013-04-16 03:07:14 +0400
committerDmitry Gutov <dgutov@yandex.ru>2013-04-16 03:07:14 +0400
commitfb549d640a32fb02bb8329727891de395e691c45 (patch)
tree5078c224de071e5df52bd773f7a538d919b19b1d
parent21e8fe2f857c0d7bb50809bc34d22586dc7da893 (diff)
downloademacs-fb549d640a32fb02bb8329727891de395e691c45.tar.gz
* lisp/progmodes/ruby-mode.el (ruby-beginning-of-defun)
(ruby-end-of-defun, ruby-move-to-block): Bind `case-fold-search' to nil. (ruby-end-of-defun): Remove the unused arg, change the docstring to reflect that this function is only used as the value of `end-of-defun-function'. (ruby-beginning-of-defun): Remove "top-level" from the docstring, to reflect an earlier change that beginning/end-of-defun functions jump between methods in a class definition, as well as top-level functions.
-rw-r--r--lisp/ChangeLog13
-rw-r--r--lisp/progmodes/ruby-mode.el25
-rw-r--r--test/automated/ruby-mode-tests.el36
3 files changed, 63 insertions, 11 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index f11d332ab0c..87cde39808d 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,16 @@
+2013-04-15 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-beginning-of-defun)
+ (ruby-end-of-defun, ruby-move-to-block): Bind `case-fold-search'
+ to nil.
+ (ruby-end-of-defun): Remove the unused arg, change the docstring
+ to reflect that this function is only used as the value of
+ `end-of-defun-function'.
+ (ruby-beginning-of-defun): Remove "top-level" from the docstring,
+ to reflect an earlier change that beginning/end-of-defun functions
+ jump between methods in a class definition, as well as top-level
+ functions.
+
2013-04-15 Stefan Monnier <monnier@iro.umontreal.ca>
* minibuffer.el (minibuffer-complete): Don't just scroll
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 6e471d1aa2a..631badac34c 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -847,22 +847,24 @@ Can be one of `heredoc', `modifier', `expr-qstr', `expr-re'."
indent))))
(defun ruby-beginning-of-defun (&optional arg)
- "Move backward to the beginning of the current top-level defun.
+ "Move backward to the beginning of the current defun.
With ARG, move backward multiple defuns. Negative ARG means
move forward."
(interactive "p")
- (and (re-search-backward (concat "^\\s *" ruby-defun-beg-re "\\_>")
- nil t (or arg 1))
- (beginning-of-line)))
-
-(defun ruby-end-of-defun (&optional arg)
- "Move forward to the end of the current top-level defun.
-With ARG, move forward multiple defuns. Negative ARG means
-move backward."
+ (let (case-fold-search)
+ (and (re-search-backward (concat "^\\s *" ruby-defun-beg-re "\\_>")
+ nil t (or arg 1))
+ (beginning-of-line))))
+
+(defun ruby-end-of-defun ()
+ "Move point to the end of the current defun.
+The defun begins at or after the point. This function is called
+by `end-of-defun'."
(interactive "p")
(ruby-forward-sexp)
- (when (looking-back (concat "^\\s *" ruby-block-end-re))
- (forward-line 1)))
+ (let (case-fold-search)
+ (when (looking-back (concat "^\\s *" ruby-block-end-re))
+ (forward-line 1))))
(defun ruby-beginning-of-indent ()
"Backtrack to a line which can be used as a reference for
@@ -881,6 +883,7 @@ current block, a sibling block, or an outer block. Do that (abs N) times."
(depth (or (nth 2 (ruby-parse-region (line-beginning-position)
(line-end-position)))
0))
+ case-fold-search
down done)
(when (< (* depth signum) 0)
;; Moving end -> end or beginning -> beginning.
diff --git a/test/automated/ruby-mode-tests.el b/test/automated/ruby-mode-tests.el
index 0ebe6d44e34..23dc45ad509 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -487,6 +487,42 @@ VALUES-PLIST is a list with alternating index and value elements."
(ruby-beginning-of-block)
(should (= 1 (line-number-at-pos)))))
+(ert-deftest ruby-move-to-block-does-not-fold-case ()
+ (ruby-with-temp-buffer
+ (ruby-test-string
+ "foo do
+ | Module.to_s
+ |end")
+ (end-of-buffer)
+ (let ((case-fold-search t))
+ (ruby-beginning-of-block))
+ (should (= 1 (line-number-at-pos)))))
+
+(ert-deftest ruby-beginning-of-defun-does-not-fold-case ()
+ (ruby-with-temp-buffer
+ (ruby-test-string
+ "class C
+ | def bar
+ | Class.to_s
+ | end
+ |end")
+ (goto-line 4)
+ (let ((case-fold-search t))
+ (beginning-of-defun))
+ (should (= 2 (line-number-at-pos)))))
+
+(ert-deftest ruby-end-of-defun-skips-to-next-line-after-the-method ()
+ (ruby-with-temp-buffer
+ (ruby-test-string
+ "class D
+ | def tee
+ | 'ho hum'
+ | end
+ |end")
+ (goto-line 2)
+ (end-of-defun)
+ (should (= 5 (line-number-at-pos)))))
+
(provide 'ruby-mode-tests)
;;; ruby-mode-tests.el ends here