]> Cypherpunks repositories - gostls13.git/commitdiff
Correct indentation for go-mode where a close brace following a semi-
authorJames Aguilar <jaguilar@google.com>
Fri, 13 Nov 2009 23:52:30 +0000 (15:52 -0800)
committerRuss Cox <rsc@golang.org>
Fri, 13 Nov 2009 23:52:30 +0000 (15:52 -0800)
colon-less statement would be indented one stop too many.

R=rsc, aclements
CC=aclements
https://golang.org/cl/154096

misc/emacs/go-mode.el

index 42336a0fe7d958b564ccec0dbe5ad462fa561efc..50a1c5c154e3523ab454527fe0f41d5c618fa1f8 100644 (file)
@@ -352,7 +352,8 @@ indented one level."
        (t
         ;; Neither top-level nor in a multi-line string or comment
         (let ((indent 0)
-              (inside-indenting-paren nil))
+              (inside-indenting-paren nil)
+              (current-line-closes-scope nil))
           ;; Count every enclosing brace, plus parens that follow
           ;; import, const, var, or type and indent according to
           ;; depth.  This simple rule does quite well, but also has a
@@ -376,9 +377,18 @@ indented one level."
                        (setq inside-indenting-paren t)))))
                 (setq first nil))))
 
+          (setq current-line-closes-scope
+                (case (char-after)
+                  ((?\} ?\)) t)
+                  (t nil)))
+
           ;; case, default, and labels are outdented 1 level
           (when (looking-at "\\<case\\>\\|\\<default\\>\\|\\w+\\s *:\\(\\S.\\|$\\)")
-            (decf indent tab-width))
+            (decf indent tab-width)
+            ;; Lines with case, default, etc. also "close" the previous line's 
+            ;; scope, even when there is no semicolon. Don't treat them as
+            ;; continuation lines.
+            (setq current-line-closes-scope t))
 
           ;; Continuation lines are indented 1 level
           (forward-comment (- (buffer-size)))
@@ -401,8 +411,9 @@ indented one level."
                      (and depth
                           (not (eq (char-after (caar depth)) ?\{)))))
                   (t
-                   ;; Anything else is always a continuation line
-                   t))
+                   ;; Except when the current line closes the previous line's 
+                   ;; scope, anything else is a continuation line.
+                   (not current-line-closes-scope)))
             (incf indent tab-width))
           (max indent 0)))))))