summaryrefslogtreecommitdiff
path: root/src/pkg/go/printer/testdata/declarations.input
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/go/printer/testdata/declarations.input')
-rw-r--r--src/pkg/go/printer/testdata/declarations.input461
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{}
+}