diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-08-21 14:13:05 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-08-21 14:13:05 -0400 |
commit | 74881b6e068e209725527b3776aaaa7955d4fb4a (patch) | |
tree | 51825c5c48709fdb5187be19c9f2585186059ef9 /lisp/emacs-lisp | |
parent | e967f17e5d7f3a0b12ad5526a0025037fd69d876 (diff) | |
download | emacs-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.el | 25 |
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 |