From e61845c1db42405938b9dca7dfff73b4ab6aa52a Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 3 Nov 2013 17:56:03 -0500 Subject: [PATCH] * lisp/emacs-lisp/smie.el (smie-rule-parent): Always call smie-indent-virtual rather than only for hanging tokens. (smie--next-indent-change): New helper command. * lisp/progmodes/ruby-mode.el (ruby-smie--rule-parent-skip-assign): Remove. (ruby-smie-rules): Use smie-rule-parent instead. --- lisp/ChangeLog | 17 +++++++++++++---- lisp/emacs-lisp/smie.el | 19 ++++++++++--------- lisp/progmodes/ruby-mode.el | 14 ++------------ 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7930c7d5eda..4f1b2142a69 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2013-11-03 Stefan Monnier + + * progmodes/ruby-mode.el (ruby-smie--rule-parent-skip-assign): Remove. + (ruby-smie-rules): Use smie-rule-parent instead. + + * emacs-lisp/smie.el (smie-rule-parent): Always call + smie-indent-virtual rather than only for hanging tokens. + (smie--next-indent-change): New helper command. + 2013-11-03 Glenn Morris * Makefile.in (abs_srcdir): Remove. @@ -25,8 +34,8 @@ 2013-11-02 Bozhidar Batsov - * emacs-lisp/package.el (package-version-join): Recognize - snapshot versions. + * emacs-lisp/package.el (package-version-join): + Recognize snapshot versions. 2013-11-02 Bozhidar Batsov @@ -34,8 +43,8 @@ 2013-11-02 Dmitry Gutov - * progmodes/ruby-mode.el (ruby-smie--rule-parent-skip-assign): New - function, replacement for `smie-rule-parent' for when we want to + * progmodes/ruby-mode.el (ruby-smie--rule-parent-skip-assign): + New function, replacement for `smie-rule-parent' for when we want to skip over our direct parent if it's an assignment token.. (ruby-smie-rules): Use it. diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el index c4daa7a853f..26a72d7f3a7 100644 --- a/lisp/emacs-lisp/smie.el +++ b/lisp/emacs-lisp/smie.el @@ -1236,15 +1236,7 @@ Only meaningful when called from within `smie-rules-function'." (goto-char (cadr (smie-indent--parent))) (cons 'column (+ (or offset 0) - ;; Use smie-indent-virtual when indenting relative to an opener: - ;; this will also by default use current-column unless - ;; that opener is hanging, but will additionally consult - ;; rules-function, so it gives it a chance to tweak - ;; indentation (e.g. by forcing indentation relative to - ;; its own parent, as in fn a => fn b => fn c =>). - (if (or (not (numberp (car smie--parent))) - (smie-indent--hanging-p)) - (smie-indent-virtual) (current-column)))))) + (smie-indent-virtual))))) (defvar smie-rule-separator-outdent 2) @@ -1837,6 +1829,15 @@ KEYWORDS are additional arguments, which can use the following keywords: (edebug-instrument-function smie-rules-function) (error "Sorry, don't know how to instrument a lambda expression"))) +(defun smie--next-indent-change () + "Go to the next line that needs to be reindented (and reindent it)." + (interactive) + (while + (let ((tick (buffer-modified-tick))) + (indent-according-to-mode) + (eq tick (buffer-modified-tick))) + (forward-line 1))) + ;;; User configuration ;; This is designed to be a completely independent "module", so we can play diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el index 36aa8eeae96..75c59ebe1fd 100644 --- a/lisp/progmodes/ruby-mode.el +++ b/lisp/progmodes/ruby-mode.el @@ -467,16 +467,6 @@ explicitly declared in magic comment." (t ";"))) (t tok))))))) -(defun ruby-smie--rule-parent-skip-assign () - (let* ((parent (smie-indent--parent)) - (tok (caddr parent))) - (if (and (stringp tok) (string-match-p "[+-*&|^]?=\\'" tok)) - (progn - (goto-char (cadr parent)) - (let (smie--parent) - (smie-rule-parent))) - (smie-rule-parent)))) - (defun ruby-smie-rules (kind token) (pcase (cons kind token) (`(:elem . basic) ruby-indent-level) @@ -499,7 +489,7 @@ explicitly declared in magic comment." ((and (equal token "{") (not (smie-rule-prev-p "(" "{" "[" "," "=>" "=" "return" ";"))) ;; Curly block opener. - (ruby-smie--rule-parent-skip-assign)) + (smie-rule-parent)) ((smie-rule-hanging-p) ;; Treat purely syntactic block-constructs as being part of their parent, ;; when the opening statement is hanging. @@ -508,7 +498,7 @@ explicitly declared in magic comment." (cons 'column (smie-indent-virtual))))) (`(:after . ,(or "=" "iuwu-mod")) 2) (`(:after . " @ ") (smie-rule-parent)) - (`(:before . "do") (ruby-smie--rule-parent-skip-assign)) + (`(:before . "do") (smie-rule-parent)) (`(,(or :before :after) . ".") (unless (smie-rule-parent-p ".") (smie-rule-parent ruby-indent-level))) -- 2.39.2