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.
+2013-11-03 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * 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 <rgm@gnu.org>
* Makefile.in (abs_srcdir): Remove.
2013-11-02 Bozhidar Batsov <bozhidar@batsov.com>
- * 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 <bozhidar@batsov.com>
2013-11-02 Dmitry Gutov <dgutov@yandex.ru>
- * 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.
(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)
(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
(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)
((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.
(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)))