]> code.delx.au - gnu-emacs/commitdiff
* lisp/emacs-lisp/smie.el (smie-indent-current-column): New fun
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 21 Aug 2015 18:13:05 +0000 (14:13 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 21 Aug 2015 18:13:05 +0000 (14:13 -0400)
(smie-indent-exps, smie-indent-keyword): Use it.

* test/indent/css-mode.css: Test alignment with leading comment.

lisp/emacs-lisp/smie.el
test/indent/css-mode.css

index 1bc5eb287202a96db43624869df0d971b7905b68..0c24f796d19461208fe73ae06f4254202f4ab31f 100644 (file)
@@ -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
index faf91539d8436fa4255ee4aebddef07200f66024..67a6b1e30b5c5023184520f46ee4dfc80eb2f78a 100644 (file)
@@ -29,7 +29,7 @@ a.b:c,d.e:f,g[h]:i,j[k]:l,.m.n:o,.p.q:r,.s[t]:u,.v[w]:x { /* bug:20282 */
 }
 .x2
 {
-    foo: bar;
+    /* foo: bar; */ foo2: bar2;
     bar: baz;
 }