summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2015-08-21 14:13:05 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2015-08-21 14:13:05 -0400
commit74881b6e068e209725527b3776aaaa7955d4fb4a (patch)
tree51825c5c48709fdb5187be19c9f2585186059ef9 /lisp/emacs-lisp
parente967f17e5d7f3a0b12ad5526a0025037fd69d876 (diff)
downloademacs-74881b6e068e209725527b3776aaaa7955d4fb4a.tar.gz
emacs-74881b6e068e209725527b3776aaaa7955d4fb4a.tar.bz2
emacs-74881b6e068e209725527b3776aaaa7955d4fb4a.zip
* lisp/emacs-lisp/smie.el (smie-indent-current-column): New fun
(smie-indent-exps, smie-indent-keyword): Use it. * test/indent/css-mode.css: Test alignment with leading comment.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/smie.el25
1 files changed, 21 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index 1bc5eb28720..0c24f796d19 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -1198,6 +1198,21 @@ Comments are treated as spaces."
(forward-comment (- (point)))
(<= (point) bol))))
+(defun smie-indent--current-column ()
+ "Like `current-column', but if there's a comment before us, use that."
+ ;; This is used, so that when we align elements, we don't get
+ ;; toto = { /* foo, */ a,
+ ;; b }
+ ;; but
+ ;; toto = { /* foo, */ a,
+ ;; b }
+ (let ((pos (point))
+ (lbp (line-beginning-position)))
+ (save-excursion
+ (unless (and (forward-comment -1) (>= (point) lbp))
+ (goto-char pos))
+ (current-column))))
+
;; Dynamically scoped.
(defvar smie--parent) (defvar smie--after) (defvar smie--token)
@@ -1577,7 +1592,9 @@ should not be computed on the basis of the following token."
;; So we use a heuristic here, which is that we only use virtual
;; if the parent is tightly linked to the child token (they're
;; part of the same BNF rule).
- (if (car parent) (current-column) (smie-indent-virtual)))))))))))
+ (if (car parent)
+ (smie-indent--current-column)
+ (smie-indent-virtual)))))))))))
(defun smie-indent-comment ()
"Compute indentation of a comment."
@@ -1707,12 +1724,12 @@ should not be computed on the basis of the following token."
;; There's a previous element, and it's not special (it's not
;; the function), so let's just align with that one.
(goto-char (car positions))
- (current-column))
+ (smie-indent--current-column))
((cdr positions)
;; We skipped some args plus the function and bumped into something.
;; Align with the first arg.
(goto-char (cadr positions))
- (current-column))
+ (smie-indent--current-column))
(positions
;; We're the first arg.
(goto-char (car positions))
@@ -1720,7 +1737,7 @@ should not be computed on the basis of the following token."
;; We used to use (smie-indent-virtual), but that
;; doesn't seem right since it might then indent args less than
;; the function itself.
- (current-column)))))))
+ (smie-indent--current-column)))))))
(defvar smie-indent-functions
'(smie-indent-fixindent smie-indent-bob smie-indent-close