diff options
| author | Dmitry Gutov | 2013-12-14 08:46:13 +0200 |
|---|---|---|
| committer | Dmitry Gutov | 2013-12-14 08:46:13 +0200 |
| commit | 276bc3337b27bcd76aa2735ed96c160c6a1b573a (patch) | |
| tree | 998438a0496b773195c79bd11f9372d06497d96f /lisp/progmodes/ruby-mode.el | |
| parent | dc7909c40a5524af650a7d4233f393a43bf6706c (diff) | |
| download | emacs-276bc3337b27bcd76aa2735ed96c160c6a1b573a.tar.gz emacs-276bc3337b27bcd76aa2735ed96c160c6a1b573a.zip | |
Fix bug#16118
* lisp/progmodes/ruby-mode.el (ruby-smie-rules): Return nil before
open-paren tokens when preceded by a open-paren, too.
(ruby-smie-rules): Handle virtual indentation after open-paren
tokens specially. If there is code between it and eol, return the
column where is starts.
* test/indent/ruby.rb: New examples.
Diffstat (limited to 'lisp/progmodes/ruby-mode.el')
| -rw-r--r-- | lisp/progmodes/ruby-mode.el | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index af7a4d8c321..13f7335d042 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el | |||
| @@ -549,10 +549,21 @@ It is used when `ruby-encoding-magic-comment-style' is set to `custom'." | |||
| 549 | (ruby-smie--indent-to-stmt)) | 549 | (ruby-smie--indent-to-stmt)) |
| 550 | ((smie-rule-hanging-p) | 550 | ((smie-rule-hanging-p) |
| 551 | ;; Treat purely syntactic block-constructs as being part of their parent, | 551 | ;; Treat purely syntactic block-constructs as being part of their parent, |
| 552 | ;; when the opening statement is hanging. | 552 | ;; when the opening token is hanging and the parent is not an open-paren. |
| 553 | (let ((state (smie-backward-sexp 'halfsexp))) | 553 | (let ((state (smie-backward-sexp 'halfsexp))) |
| 554 | (when (eq t (car state)) (goto-char (cadr state)))) | 554 | (unless (and (eq t (car state)) |
| 555 | (cons 'column (smie-indent-virtual))))) | 555 | (not (eq (cadr state) (point-min)))) |
| 556 | (cons 'column (smie-indent-virtual))))))) | ||
| 557 | (`(:after . ,(or `"(" "[" "{")) | ||
| 558 | ;; FIXME: Shouldn't this be the default behavior of | ||
| 559 | ;; `smie-indent-after-keyword'? | ||
| 560 | (save-excursion | ||
| 561 | (forward-char 1) | ||
| 562 | (skip-chars-forward " \t") | ||
| 563 | ;; `smie-rule-hanging-p' is not good enough here, | ||
| 564 | ;; because we want to accept hanging tokens at bol, too. | ||
| 565 | (unless (or (eolp) (forward-comment 1)) | ||
| 566 | (cons 'column (current-column))))) | ||
| 556 | (`(:after . " @ ") (smie-rule-parent)) | 567 | (`(:after . " @ ") (smie-rule-parent)) |
| 557 | (`(:before . "do") (ruby-smie--indent-to-stmt)) | 568 | (`(:before . "do") (ruby-smie--indent-to-stmt)) |
| 558 | (`(,(or :before :after) . ".") | 569 | (`(,(or :before :after) . ".") |