diff options
Diffstat (limited to 'src/pkg/go/printer/testdata/declarations.input')
| -rw-r--r-- | src/pkg/go/printer/testdata/declarations.input | 461 |
1 files changed, 461 insertions, 0 deletions
diff --git a/src/pkg/go/printer/testdata/declarations.input b/src/pkg/go/printer/testdata/declarations.input new file mode 100644 index 000000000..c54a2ce22 --- /dev/null +++ b/src/pkg/go/printer/testdata/declarations.input @@ -0,0 +1,461 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package imports + +import "io" + +import ( + _ "io" +) + +import _ "io" + +import ( + "io"; + "io"; + "io"; +) + +import ( + "io"; + aLongRename "io"; + + b "io"; + c "i" "o"; +) + +// no newlines between consecutive single imports, but +// respect extra line breaks in the source (at most one empty line) +import _ "io" +import _ "io" +import _ "io" + +import _ "os" +import _ "os" +import _ "os" + + +import _ "fmt" +import _ "fmt" +import _ "fmt" + + +// at least one empty line between declarations of different kind +import _ "io" +var _ int; + + +func _() { + // the following decls need a semicolon at the end + type _ int; + type _ *int; + type _ []int; + type _ map[string]int; + type _ chan int; + type _ func() int; + + var _ int; + var _ *int; + var _ []int; + var _ map[string]int; + var _ chan int; + var _ func() int; + + // the following decls don't need a semicolon at the end + type _ struct{} + type _ *struct{} + type _ []struct{} + type _ map[string]struct{} + type _ chan struct{} + type _ func() struct{} + + type _ interface{} + type _ *interface{} + type _ []interface{} + type _ map[string]interface{} + type _ chan interface{} + type _ func() interface{} + + var _ struct{} + var _ *struct{} + var _ []struct{} + var _ map[string]struct{} + var _ chan struct{} + var _ func() struct{} + + var _ interface{} + var _ *interface{} + var _ []interface{} + var _ map[string]interface{} + var _ chan interface{} + var _ func() interface{} +} + + +// don't lose blank lines in grouped declarations +const ( + _ int = 0; + _ float = 1; + + _ string = "foo"; + + _ = iota; + _; + + // a comment + _; + + _; +) + + +type ( + _ int; + _ struct {}; + + _ interface{}; + + // a comment + _ map[string]int; +) + + +var ( + _ int = 0; + _ float = 1; + + _ string = "foo"; + + _ bool; + + // a comment + _ bool; +) + + +// don't lose blank lines in this struct +type _ struct { + String struct { + Str, Len int; + }; + Slice struct { + Array, Len, Cap int; + }; + Eface struct { + Typ, Ptr int; + }; + + UncommonType struct { + Name, PkgPath int; + }; + CommonType struct { + Size, Hash, Alg, Align, FieldAlign, String, UncommonType int; + }; + Type struct { + Typ, Ptr int; + }; + StructField struct { + Name, PkgPath, Typ, Tag, Offset int; + }; + StructType struct { + Fields int; + }; + PtrType struct { + Elem int; + }; + SliceType struct { + Elem int; + }; + ArrayType struct { + Elem, Len int; + }; + + Stktop struct { + Stackguard, Stackbase, Gobuf int; + }; + Gobuf struct { + Sp, Pc, G int; + }; + G struct { + Stackbase, Sched, Status, Alllink int; + }; +} + + +// no tabs for single or ungrouped decls +func _() { + const xxxxxx = 0; + type x int; + var xxx int; + var yyyy float = 3.14; + var zzzzz = "bar"; + + const ( + xxxxxx = 0; + ) + type ( + x int; + ) + var ( + xxx int; + ) + var ( + yyyy float = 3.14; + ) + var ( + zzzzz = "bar"; + ) +} + +// tabs for multiple or grouped decls +func _() { + // no entry has a type + const ( + zzzzzz = 1; + z = 2; + zzz = 3; + ) + // some entries have a type + const ( + xxxxxx = 1; + x = 2; + xxx = 3; + yyyyyyyy float = iota; + yyyy = "bar"; + yyy; + yy = 2; + ) +} + +func _() { + // no entry has a type + var ( + zzzzzz = 1; + z = 2; + zzz = 3; + ) + // no entry has a value + var ( + _ int; + _ float; + _ string; + + _ int; // comment + _ float; // comment + _ string; // comment + ) + // some entries have a type + var ( + xxxxxx int; + x float; + xxx string; + yyyyyyyy int = 1234; + y float = 3.14; + yyyy = "bar"; + yyy string = "foo"; + ) + // mixed entries - all comments should be aligned + var ( + a, b, c int; + x = 10; + d int; // comment + y = 20; // comment + f, ff, fff, ffff int = 0, 1, 2, 3; // comment + ) + // respect original line breaks + var _ = []T { + T{0x20, "Telugu"} + }; + var _ = []T { + // respect original line breaks + T{0x20, "Telugu"} + }; +} + +func _() { + type ( + xxxxxx int; + x float; + xxx string; + xxxxx []x; + xx struct{}; + xxxxxxx struct { + _, _ int; + _ float; + }; + xxxx chan<- string; + ) +} + + +// formatting of structs +type _ struct{} + +type _ struct{ /* this comment should be visible */ } + +type _ struct{ + // this comment should be visible and properly indented +} + +type _ struct { // this comment must not change indentation + f int; + f, ff, fff, ffff int; +} + +type _ struct { + string; +} + +type _ struct { + string; // comment +} + +type _ struct { + string "tag" +} + +type _ struct { + string "tag" // comment +} + +type _ struct { + f int; +} + +type _ struct { + f int; // comment +} + +type _ struct { + f int "tag"; +} + +type _ struct { + f int "tag"; // comment +} + +type _ struct { + bool; + a, b, c int; + int "tag"; + ES; // comment + float "tag"; // comment + f int; // comment + f, ff, fff, ffff int; // comment + g float "tag"; + h float "tag"; // comment +} + + +// difficult cases +type _ struct { + bool; // comment + text []byte; // comment +} + + + +// formatting of interfaces +type EI interface{} + +type _ interface { + EI; +} + +type _ interface { + f(); + fffff(); +} + +type _ interface { + EI; + f(); + fffffg(); +} + +type _ interface { // this comment must not change indentation + EI; // here's a comment + f(); // no blank between identifier and () + fffff(); // no blank between identifier and () + gggggggggggg(x, y, z int) (); // hurray +} + +// formatting of variable declarations +func _() { + type day struct { n int; short, long string }; + var ( + Sunday = day{ 0, "SUN", "Sunday" }; + Monday = day{ 1, "MON", "Monday" }; + Tuesday = day{ 2, "TUE", "Tuesday" }; + Wednesday = day{ 3, "WED", "Wednesday" }; + Thursday = day{ 4, "THU", "Thursday" }; + Friday = day{ 5, "FRI", "Friday" }; + Saturday = day{ 6, "SAT", "Saturday" }; + ) +} + + +func _() { + var Universe = Scope { + Names: map[string]*Ident { + // basic types + "bool": nil, + "byte": nil, + "int8": nil, + "int16": nil, + "int32": nil, + "int64": nil, + "uint8": nil, + "uint16": nil, + "uint32": nil, + "uint64": nil, + "float32": nil, + "float64": nil, + "string": nil, + + // convenience types + "int": nil, + "uint": nil, + "uintptr": nil, + "float": nil, + + // constants + "false": nil, + "true": nil, + "iota": nil, + "nil": nil, + + // functions + "cap": nil, + "len": nil, + "new": nil, + "make": nil, + "panic": nil, + "panicln": nil, + "print": nil, + "println": nil, + } + } +} + + +// formatting of consecutive single-line functions +func _() {} +func _() {} +func _() {} + +func _() {} // an empty line before this function +func _() {} +func _() {} + +func _() { + f(1, 2, 3); +} +func _(x int) int { + return x+1 +} +func _() int { + type T struct{} +} |
