1
0
mirror of https://github.com/golang/go synced 2024-11-24 18:10:02 -07:00

gofmt: fix alignment of multi-line var declarations

- gofmt -w src misc

R=rsc, r
CC=golang-dev
https://golang.org/cl/223101
This commit is contained in:
Robert Griesemer 2010-03-02 17:23:07 -08:00
parent e678afa891
commit 305f5433f3
6 changed files with 82 additions and 34 deletions

View File

@ -795,11 +795,11 @@ func readTemplate(name string) *template.Template {
var ( var (
dirlistHTML, dirlistHTML,
errorHTML, errorHTML,
godocHTML, godocHTML,
packageHTML, packageHTML,
packageText, packageText,
searchHTML *template.Template searchHTML *template.Template
) )
func readTemplates() { func readTemplates() {

View File

@ -214,7 +214,7 @@ type runtimeValues struct {
String, Slice, Eface *remoteType String, Slice, Eface *remoteType
// Runtime type structures // Runtime type structures
Type, CommonType, UncommonType, StructField, StructType, PtrType, Type, CommonType, UncommonType, StructField, StructType, PtrType,
ArrayType, SliceType *remoteType ArrayType, SliceType *remoteType
// Runtime scheduler structures // Runtime scheduler structures
Stktop, Gobuf, G *remoteType Stktop, Gobuf, G *remoteType
// Addresses of *runtime.XType types. These are the // Addresses of *runtime.XType types. These are the
@ -222,12 +222,12 @@ type runtimeValues struct {
// reflection to fill these in from the remote symbol table, // reflection to fill these in from the remote symbol table,
// so the names must match the runtime names. // so the names must match the runtime names.
PBoolType, PBoolType,
PUint8Type, PUint16Type, PUint32Type, PUint64Type, PUintType, PUintptrType, PUint8Type, PUint16Type, PUint32Type, PUint64Type, PUintType, PUintptrType,
PInt8Type, PInt16Type, PInt32Type, PInt64Type, PIntType, PInt8Type, PInt16Type, PInt32Type, PInt64Type, PIntType,
PFloat32Type, PFloat64Type, PFloatType, PFloat32Type, PFloat64Type, PFloatType,
PArrayType, PStringType, PStructType, PPtrType, PFuncType, PArrayType, PStringType, PStructType, PPtrType, PFuncType,
PInterfaceType, PSliceType, PMapType, PChanType, PInterfaceType, PSliceType, PMapType, PChanType,
PDotDotDotType, PUnsafePointerType proc.Word PDotDotDotType, PUnsafePointerType proc.Word
// G status values // G status values
runtimeGStatus runtimeGStatus
} }

View File

@ -81,17 +81,6 @@ func (p *printer) setComment(g *ast.CommentGroup) {
} }
// Sets multiLine to true if the identifier list spans multiple lines.
func (p *printer) identList(list []*ast.Ident, multiLine *bool) {
// convert into an expression list so we can re-use exprList formatting
xlist := make([]ast.Expr, len(list))
for i, x := range list {
xlist[i] = x
}
p.exprList(noPos, xlist, 1, commaSep, multiLine, noPos)
}
type exprListMode uint type exprListMode uint
const ( const (
@ -103,6 +92,23 @@ const (
) )
// Sets multiLine to true if the identifier list spans multiple lines.
// If ident is set, a multi-line identifier list is indented after the
// first linebreak encountered.
func (p *printer) identList(list []*ast.Ident, indent bool, multiLine *bool) {
// convert into an expression list so we can re-use exprList formatting
xlist := make([]ast.Expr, len(list))
for i, x := range list {
xlist[i] = x
}
mode := commaSep
if !indent {
mode |= noIndent
}
p.exprList(noPos, xlist, 1, mode, multiLine, noPos)
}
// isOneLineExpr returns true if x is "small enough" to fit onto a single line. // isOneLineExpr returns true if x is "small enough" to fit onto a single line.
func (p *printer) isOneLineExpr(x ast.Expr) bool { func (p *printer) isOneLineExpr(x ast.Expr) bool {
const maxSize = 60 // aproximate value, excluding space for comments const maxSize = 60 // aproximate value, excluding space for comments
@ -238,7 +244,7 @@ func (p *printer) parameters(fields *ast.FieldList, multiLine *bool) {
p.print(token.COMMA, blank) p.print(token.COMMA, blank)
} }
if len(par.Names) > 0 { if len(par.Names) > 0 {
p.identList(par.Names, multiLine) p.identList(par.Names, false, multiLine)
p.print(blank) p.print(blank)
} }
p.expr(par.Type, multiLine) p.expr(par.Type, multiLine)
@ -352,7 +358,7 @@ func (p *printer) fieldList(fields *ast.FieldList, isIncomplete bool, ctxt exprC
p.setComment(f.Doc) p.setComment(f.Doc)
if len(f.Names) > 0 { if len(f.Names) > 0 {
// named fields // named fields
p.identList(f.Names, &ml) p.identList(f.Names, false, &ml)
p.print(sep) p.print(sep)
p.expr(f.Type, &ml) p.expr(f.Type, &ml)
extraTabs = 1 extraTabs = 1
@ -1040,10 +1046,11 @@ const (
// The parameter n is the number of specs in the group; context specifies // The parameter n is the number of specs in the group; context specifies
// the surroundings of the declaration. Separating semicolons are printed // the surroundings of the declaration. Separating semicolons are printed
// depending on the context. Sets multiLine to true if the spec spans // depending on the context. If indent is set, a multi-line identifier lists
// multiple lines. // in the spec are indented when the first linebreak is encountered. Sets
// multiLine to true if the spec spans multiple lines.
// //
func (p *printer) spec(spec ast.Spec, n int, context declContext, multiLine *bool) { func (p *printer) spec(spec ast.Spec, n int, context declContext, indent bool, multiLine *bool) {
var ( var (
comment *ast.CommentGroup // a line comment, if any comment *ast.CommentGroup // a line comment, if any
extraTabs int // number of extra tabs before comment, if any extraTabs int // number of extra tabs before comment, if any
@ -1061,7 +1068,7 @@ func (p *printer) spec(spec ast.Spec, n int, context declContext, multiLine *boo
case *ast.ValueSpec: case *ast.ValueSpec:
p.setComment(s.Doc) p.setComment(s.Doc)
p.identList(s.Names, multiLine) // always present p.identList(s.Names, indent, multiLine) // always present
if n == 1 { if n == 1 {
if s.Type != nil { if s.Type != nil {
p.print(blank) p.print(blank)
@ -1129,7 +1136,7 @@ func (p *printer) genDecl(d *ast.GenDecl, context declContext, multiLine *bool)
p.linebreak(s.Pos().Line, 1, 2, ignore, ml) p.linebreak(s.Pos().Line, 1, 2, ignore, ml)
} }
ml = false ml = false
p.spec(s, len(d.Specs), inGroup, &ml) p.spec(s, len(d.Specs), inGroup, false, &ml)
} }
p.print(unindent, formfeed) p.print(unindent, formfeed)
*multiLine = true *multiLine = true
@ -1138,7 +1145,7 @@ func (p *printer) genDecl(d *ast.GenDecl, context declContext, multiLine *bool)
} else { } else {
// single declaration // single declaration
p.spec(d.Specs[0], 1, context, multiLine) p.spec(d.Specs[0], 1, context, true, multiLine)
} }
} }

View File

@ -411,6 +411,14 @@ type _ struct {
h float "tag" // comment h float "tag" // comment
} }
type _ struct {
a, b,
c, d int // this line should be indented
u, v, w, x float // this line should be indented
p, q,
r, s float // this line should be indented
}
// difficult cases // difficult cases
type _ struct { type _ struct {
@ -444,6 +452,7 @@ type _ interface { // this comment must not change indentation
gggggggggggg(x, y, z int) // hurray gggggggggggg(x, y, z int) // hurray
} }
// formatting of variable declarations // formatting of variable declarations
func _() { func _() {
type day struct { type day struct {
@ -462,6 +471,19 @@ func _() {
} }
// formatting of multi-line variable declarations
var a1, b1, c1 int // all on one line
var a2, b2,
c2 int // this line should be indented
var (
a3, b3,
c3, d3 int // this line should be indented
a4, b4, c4 int // this line should be indented
)
func _() { func _() {
var privateKey2 = &Block{Type: "RSA PRIVATE KEY", var privateKey2 = &Block{Type: "RSA PRIVATE KEY",
Headers: map[string]string{}, Headers: map[string]string{},

View File

@ -410,6 +410,13 @@ type _ struct {
h float "tag" // comment h float "tag" // comment
} }
type _ struct { a, b,
c, d int // this line should be indented
u, v, w, x float // this line should be indented
p, q,
r, s float // this line should be indented
}
// difficult cases // difficult cases
type _ struct { type _ struct {
@ -418,7 +425,6 @@ type _ struct {
} }
// formatting of interfaces // formatting of interfaces
type EI interface{} type EI interface{}
@ -444,6 +450,7 @@ type _ interface { // this comment must not change indentation
gggggggggggg(x, y, z int) () // hurray gggggggggggg(x, y, z int) () // hurray
} }
// formatting of variable declarations // formatting of variable declarations
func _() { func _() {
type day struct { n int; short, long string } type day struct { n int; short, long string }
@ -459,6 +466,18 @@ func _() {
} }
// formatting of multi-line variable declarations
var a1, b1, c1 int // all on one line
var a2, b2,
c2 int // this line should be indented
var (a3, b3,
c3, d3 int // this line should be indented
a4, b4, c4 int // this line should be indented
)
func _() { func _() {
var privateKey2 = &Block{Type: "RSA PRIVATE KEY", var privateKey2 = &Block{Type: "RSA PRIVATE KEY",
Headers: map[string]string{}, Headers: map[string]string{},

View File

@ -17,9 +17,9 @@ import (
) )
var respExcludeHeader = map[string]int{ var respExcludeHeader = map[string]int{
"Content-Length": 0, "Content-Length": 0,
"Transfer-Encoding": 0, "Transfer-Encoding": 0,
"Trailer": 0, "Trailer": 0,
} }
// Response represents the response from an HTTP request. // Response represents the response from an HTTP request.