1
0
mirror of https://github.com/golang/go synced 2024-11-14 06:40:22 -07:00

Correct indentation for go-mode where a close brace following a semi-

colon-less statement would be indented one stop too many.

R=rsc, aclements
CC=aclements
https://golang.org/cl/154096
This commit is contained in:
James Aguilar 2009-11-13 15:52:30 -08:00 committed by Russ Cox
parent a01839fb82
commit 95be81da4d

View File

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