summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2012-11-14 10:34:17 +0400
committerDmitry Gutov <dgutov@yandex.ru>2012-11-14 10:34:17 +0400
commit8619323f695c733f67dad59987ca5adc3cc0a6e8 (patch)
tree1d737c4eb2ae9b4073426fec3f5cfd7202c53b7b
parentf360feb8ec972600bb206447be8ac31cf61b0523 (diff)
downloademacs-8619323f695c733f67dad59987ca5adc3cc0a6e8.tar.gz
* lisp/progmodes/ruby-mode.el (ruby-expr-beg): Make heredoc detection
more strict. Add docstring. * test/automated/ruby-mode-tests.el (ruby-indent-singleton-class): Pass. (ruby-indent-inside-heredoc-after-operator) (ruby-indent-inside-heredoc-after-space): New tests.
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/progmodes/ruby-mode.el12
-rw-r--r--test/ChangeLog6
-rw-r--r--test/automated/ruby-mode-tests.el15
4 files changed, 32 insertions, 6 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 48eced16fe1..19623bd06b7 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2012-11-14 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-expr-beg): Make heredoc detection
+ more strict. Add docstring.
+
2012-11-14 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/gv.el (setf): Fix debug spec for multiple assignments
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 0bc41033367..686bec89a95 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -384,7 +384,9 @@ and `\\' when preceded by `?'."
(looking-at "class\\s *<<"))))
(defun ruby-expr-beg (&optional option)
- "TODO: document."
+ "Check if point is possibly at the beginning of an expression.
+OPTION specifies the type of the expression.
+Can be one of `heredoc', `modifier', `expr-qstr', `expr-re'."
(save-excursion
(store-match-data nil)
(let ((space (skip-chars-backward " \t"))
@@ -397,10 +399,10 @@ and `\\' when preceded by `?'."
(or (eq (char-syntax (char-before (point))) ?w)
(ruby-special-char-p))))
nil)
- ((and (eq option 'heredoc) (< space 0))
- (not (progn (goto-char start) (ruby-singleton-class-p))))
- ((or (looking-at ruby-operator-re)
- (looking-at "[\\[({,;]")
+ ((looking-at ruby-operator-re))
+ ((eq option 'heredoc)
+ (and (< space 0) (not (ruby-singleton-class-p start))))
+ ((or (looking-at "[\\[({,;]")
(and (looking-at "[!?]")
(or (not (eq option 'modifier))
(bolp)
diff --git a/test/ChangeLog b/test/ChangeLog
index 8973a0f1d4f..5a796408a3b 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,9 @@
+2012-11-14 Dmitry Gutov <dgutov@yandex.ru>
+
+ * automated/ruby-mode-tests.el (ruby-indent-singleton-class): Pass.
+ (ruby-indent-inside-heredoc-after-operator)
+ (ruby-indent-inside-heredoc-after-space): New tests.
+
2012-11-13 Dmitry Gutov <dgutov@yandex.ru>
* automated/ruby-mode-tests.el (ruby-heredoc-font-lock)
diff --git a/test/automated/ruby-mode-tests.el b/test/automated/ruby-mode-tests.el
index a8cdd2f3f28..7d633be0f53 100644
--- a/test/automated/ruby-mode-tests.el
+++ b/test/automated/ruby-mode-tests.el
@@ -154,7 +154,6 @@ VALUES-PLIST is a list with alternating index and value elements."
|"))
(ert-deftest ruby-indent-singleton-class ()
- :expected-result :failed ; Doesn't work yet, when no space before "<<".
(ruby-should-indent-buffer
"class<<bar
| foo
@@ -165,6 +164,20 @@ VALUES-PLIST is a list with alternating index and value elements."
| end
|"))
+(ert-deftest ruby-indent-inside-heredoc-after-operator ()
+ (ruby-should-indent-buffer
+ "b=<<eos
+ | 42"
+ "b=<<eos
+ | 42"))
+
+(ert-deftest ruby-indent-inside-heredoc-after-space ()
+ (ruby-should-indent-buffer
+ "foo <<eos.gsub(' ', '*')
+ | 42"
+ "foo <<eos.gsub(' ', '*')
+ | 42"))
+
(ert-deftest ruby-indent-array-literal ()
(let ((ruby-deep-indent-paren nil))
(ruby-should-indent-buffer