summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaylor R Campbell <campbell+paredit@mumble.net>2017-04-05 18:47:53 +0000
committerTaylor R Campbell <campbell+paredit@mumble.net>2017-04-05 18:48:14 +0000
commit38899558cf242187966d8bf1771a3c8e48eb5090 (patch)
treeef76ff6c4137b318c551b4a6f5fc7637e14b813f
parent7c27746a8eb259ae24b5dce9380801c4846258f0 (diff)
Don't reindent single-line edits in paredit-raise-sexp.
Add a couple trivial tests for paredit-raise-sexp. Bug reported by Alex Plotnick.
-rw-r--r--paredit.el10
-rw-r--r--test.el8
2 files changed, 17 insertions, 1 deletions
diff --git a/paredit.el b/paredit.el
index 3b69058..c54997d 100644
--- a/paredit.el
+++ b/paredit.el
@@ -2156,7 +2156,15 @@ If the point is on an S-expression, such as a string or a symbol, not
(delete-region (point) (scan-sexps (point) 1))
(let* ((indent-start (point))
(indent-end (save-excursion (insert sexps) (point))))
- (indent-region indent-start indent-end nil)))))
+ ;; If the expression spans multiple lines, its indentation is
+ ;; probably broken, so reindent it -- but don't reindent
+ ;; anything that we didn't touch outside the expression.
+ ;;
+ ;; XXX What if the *column* of the starting point was preserved
+ ;; too? Should we avoid reindenting in that case?
+ (if (not (eq (save-excursion (goto-char indent-start) (point-at-eol))
+ (save-excursion (goto-char indent-end) (point-at-eol))))
+ (indent-region indent-start indent-end nil))))))
;;; The effects of convolution on the surrounding whitespace are pretty
;;; random. If you have better suggestions, please let me know.
diff --git a/test.el b/test.el
index f3444af..307747b 100644
--- a/test.el
+++ b/test.el
@@ -1409,3 +1409,11 @@ Four arguments: the paredit command, the text of the buffer
("(let ((x 0)) a (progn|) b)" "(progn |(let ((x 0)) a b))")
("(let ((x 0)) a (progn| ) b)" "(progn |(let ((x 0)) a b))")
("(let ((x 0)) a (progn |) b)" "(progn |(let ((x 0)) a b))")))
+
+(paredit-test 'paredit-raise-sexp
+ `((,(concat
+ "(let ((x 5))\n (let ((y 3))\n |(foo bar\n baz)\n"
+ " (quux))\n (wrong indent))")
+ "(let ((x 5))\n |(foo bar\n baz)\n (wrong indent))")
+ ("(define (f x #!optional\n (|wrong indent))\n (+ 1 2))"
+ "(define (f x #!optional\n |wrong)\n (+ 1 2))")))