[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/aggressive-indent 7653dd5 01/43: Improve the logic for
From: |
Stefan Monnier |
Subject: |
[elpa] externals/aggressive-indent 7653dd5 01/43: Improve the logic for deciding how far to indent beyond changed region |
Date: |
Wed, 7 Jul 2021 22:49:38 -0400 (EDT) |
branch: externals/aggressive-indent
commit 7653dd522638013e97f2a4f9d3a479932ae1d482
Author: Artur Malabarba <bruce.connor.am@gmail.com>
Commit: Artur Malabarba <bruce.connor.am@gmail.com>
Improve the logic for deciding how far to indent beyond changed region
This should significantly improve behaviour in non-lisp languages.
---
aggressive-indent.el | 43 +++++++++++++++++++++++++++----------------
1 file changed, 27 insertions(+), 16 deletions(-)
diff --git a/aggressive-indent.el b/aggressive-indent.el
index a354dab..431c87a 100644
--- a/aggressive-indent.el
+++ b/aggressive-indent.el
@@ -305,6 +305,31 @@ messages. L and R passed to
`aggressive-indent-indent-defun'."
(ignore-errors (aggressive-indent-indent-defun l r))))
;;; Indenting region
+(defun aggressive-indent--indent-current-balanced-line (column)
+ "Indent current balanced line, if it starts at COLUMN.
+Balanced line means anything contained in a sexp that starts at
+the current line, or starts at the same line that one of these
+sexps ends.
+
+Return non-nil only if the line's indentation actually changed."
+ (when (= (current-column) column)
+ (unless (= (point)
+ (progn (indent-according-to-mode)
+ (point)))
+ (let ((line-end (line-end-position)))
+ (forward-sexp 1)
+ (comment-forward (point-max))
+ ;; We know previous sexp finished on a previous line when
+ ;; there's only be whitespace behind point.
+ (while (progn
+ (skip-chars-backward "[:blank:]")
+ (not (looking-at "^")))
+ (forward-sexp 1)
+ (comment-forward (point-max)))
+ (when (looking-at "^")
+ (indent-region line-end (1- (point))))
+ (skip-chars-forward "[:blank:]")))))
+
;;;###autoload
(defun aggressive-indent-indent-region-and-on (l r)
"Indent region between L and R, and then some.
@@ -329,23 +354,9 @@ until nothing more happens."
;; And then we indent each following line until nothing happens.
(forward-line 1)
(skip-chars-forward "[:blank:]\n\r\xc")
- (let* ((eod (ignore-errors
- (save-excursion (end-of-defun)
- (point-marker))))
- (point-limit (if (and eod (< (point) eod))
- eod (point-max-marker))))
+ (let ((base-column (current-column)))
(while (and (null (eobp))
- (let ((op (point))
- (np (progn (indent-according-to-mode)
- (point))))
- ;; As long as we're indenting things to the
- ;; left, keep indenting.
- (or (< np op)
- ;; If we're indenting to the right, or
- ;; not at all, stop at the limit.
- (< (point) point-limit))))
- (forward-line 1)
- (skip-chars-forward "[:blank:]\n\r\f"))))
+ (aggressive-indent--indent-current-balanced-line
base-column)))))
(goto-char p))))
(defun aggressive-indent--softly-indent-region-and-on (l r &rest _)
- [elpa] externals/aggressive-indent updated (7e65c9e -> cb416fa), Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 7653dd5 01/43: Improve the logic for deciding how far to indent beyond changed region,
Stefan Monnier <=
- [elpa] externals/aggressive-indent a8c462f 04/43: Add def to the list of ruby-mode exceptions, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 86d5643 05/43: Fix `aggressive-indent-protected-commands', Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 2f54a58 03/43: Use an idle-timer instead of sit-for+redisplay, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 43bce89 02/43: Fix #92 - Define aggressive-indent-stop-here-hook, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent dfdf3b2 06/43: Merge pull request #102 from raxod502/fix-protected-commands, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 893dae0 10/43: Add some modes to excluded modes, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 8324b88 08/43: Merge pull request #103 from peterwvj/master, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent e3c41af 11/43: New variable: aggressive-indent-protected-current-commands, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 5959b48 09/43: Experiment with testing `indent-line-function` instead of excluded-modes, Stefan Monnier, 2021/07/07
- [elpa] externals/aggressive-indent 4b01402 07/43: Fix typo in README, Stefan Monnier, 2021/07/07