kubernetes/third_party/golang/go/printer/testdata/declarations.input
Daniel Smith 4deda6ea98 Vendor in go1.5.1 dependency
* Changes to make vendored packages accept new home.
* Fix go2idl to import vendored packages.
2015-10-21 09:56:36 -07:00

1002 lines
16 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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"
)
import (
"unrenamed"
renamed "renameMe"
. "io"
_ "io"
"io"
. "os"
)
// 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"
import "foo" // a comment
import "bar" // a comment
import (
_ "foo"
// a comment
"bar"
"foo" // a comment
"bar" // a comment
)
// comments + renames
import (
"unrenamed" // a comment
renamed "renameMe"
. "io" /* a comment */
_ "io/ioutil" // a comment
"io" // testing alignment
. "os"
// a comment
)
// a case that caused problems in the past (comment placement)
import (
. "fmt"
"io"
"malloc" // for the malloc count test only
"math"
"strings"
"testing"
)
// more import examples
import (
"xxx"
"much_longer_name" // comment
"short_name" // comment
)
import (
_ "xxx"
"much_longer_name" // comment
)
import (
mymath "math"
"/foo/bar/long_package_path" // a comment
)
import (
"package_a" // comment
"package_b"
my_better_c "package_c" // comment
"package_d" // comment
my_e "package_e" // comment
"package_a" // comment
"package_bb"
"package_ccc" // comment
"package_dddd" // comment
)
// print import paths as double-quoted strings
// (we would like more test cases but the go/parser
// already excludes most incorrect paths, and we don't
// bother setting up test-ASTs manually)
import (
`fmt`
"math"
)
// at least one empty line between declarations of different kind
import _ "io"
var _ int
// at least one empty line between declarations of the same kind
// if there is associated documentation (was issue 2570)
type T1 struct{}
// T2 comment
type T2 struct {
} // should be a two-line struct
// T3 comment
type T2 struct {
} // should be a two-line struct
// printing of constant literals
const (
_ = "foobar"
_ = "a۰۱۸"
_ = "foo६४"
_ = "bar"
_ = 0
_ = 1
_ = 123456789012345678890
_ = 01234567
_ = 0xcafebabe
_ = 0.
_ = .0
_ = 3.14159265
_ = 1e0
_ = 1e+100
_ = 1e-100
_ = 2.71828e-1000
_ = 0i
_ = 1i
_ = 012345678901234567889i
_ = 123456789012345678890i
_ = 0.i
_ = .0i
_ = 3.14159265i
_ = 1e0i
_ = 1e+100i
_ = 1e-100i
_ = 2.71828e-1000i
_ = 'a'
_ = '\000'
_ = '\xFF'
_ = '\uff16'
_ = '\U0000ff16'
_ = `foobar`
_ = `foo
---
---
bar`
)
func _() {
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
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 blank lines in empty structs and interfaces, but leave 1- or 2-line layout alone
type _ struct{ }
type _ struct {
}
type _ interface{ }
type _ interface {
}
// 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"},
}
}
// use the formatted output rather than the input to decide when to align
// (was issue 4505)
const (
short = 2 * (
1 + 2)
aMuchLongerName = 3
)
var (
short = X{
}
aMuchLongerName = X{}
x1 = X{} // foo
x2 = X{
} // foo
)
func _() {
type (
xxxxxx int
x float
xxx string
xxxxx []x
xx struct{}
xxxxxxx struct {
_, _ int
_ float
}
xxxx chan<- string
)
}
// alignment of "=" in consecutive lines (extended example from issue 1414)
const (
umax uint = ^uint(0) // maximum value for a uint
bpu = 1 << (5 + umax>>63) // bits per uint
foo
bar = -1
)
// typical enum
const (
a MyType = iota
abcd
b
c
def
)
// excerpt from godoc.go
var (
goroot = flag.String("goroot", runtime.GOROOT(), "Go root directory")
testDir = flag.String("testdir", "", "Go root subdirectory - for testing only (faster startups)")
pkgPath = flag.String("path", "", "additional package directories (colon-separated)")
filter = flag.String("filter", "", "filter file containing permitted package directory paths")
filterMin = flag.Int("filter_minutes", 0, "filter file update interval in minutes; disabled if <= 0")
filterDelay delayTime // actual filter update interval in minutes; usually filterDelay == filterMin, but filterDelay may back off exponentially
)
// 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
}
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
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" }
)
}
// 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
)
// Test case from issue 3304: multi-line declarations must end
// a formatting section and not influence indentation of the
// next line.
var (
minRefreshTimeSec = flag.Int64("min_refresh_time_sec", 604800,
"minimum time window between two refreshes for a given user.")
x = flag.Int64("refresh_user_rollout_percent", 100,
"temporary flag to ramp up the refresh user rpc")
aVeryLongVariableName = stats.GetVarInt("refresh-user-count")
)
func _() {
var privateKey2 = &Block{Type: "RSA PRIVATE KEY",
Headers: map[string]string{},
Bytes: []uint8{0x30, 0x82, 0x1, 0x3a, 0x2, 0x1, 0x0, 0x2,
0x41, 0x0, 0xb2, 0x99, 0xf, 0x49, 0xc4, 0x7d, 0xfa, 0x8c,
0xd4, 0x0, 0xae, 0x6a, 0x4d, 0x1b, 0x8a, 0x3b, 0x6a, 0x13,
0x64, 0x2b, 0x23, 0xf2, 0x8b, 0x0, 0x3b, 0xfb, 0x97, 0x79,
},
}
}
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,
},
}
}
// alignment of map composite entries
var _ = map[int]int{
// small key sizes: always align even if size ratios are large
a: a,
abcdefghabcdefgh: a,
ab: a,
abc: a,
abcdefgabcdefg: a,
abcd: a,
abcde: a,
abcdef: a,
// mixed key sizes: align when key sizes change within accepted ratio
abcdefgh: a,
abcdefghabcdefg: a,
abcdefghij: a,
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij: a, // outlier - do not align with previous line
abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij: a, // align with previous line
ab: a, // do not align with previous line
abcde: a, // align with previous line
}
// alignment of map composite entries: test cases from issue 3965
// aligned
var _ = T1{
a: x,
b: y,
cccccccccccccccccccc: z,
}
// not aligned
var _ = T2{
a: x,
b: y,
ccccccccccccccccccccc: z,
}
// aligned
var _ = T3{
aaaaaaaaaaaaaaaaaaaa: x,
b: y,
c: z,
}
// not aligned
var _ = T4{
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: x,
b: y,
c: z,
}
// no alignment of map composite entries if they are not the first entry on a line
var _ = T{0: 0} // not aligned
var _ = T{0: 0, // not aligned
1: 1, // aligned
22: 22, // aligned
333: 333, 1234: 12, 12345: 0, // first on line aligned
}
// test cases form issue 8685
// not aligned
var _ = map[int]string{1: "spring", 2: "summer",
3: "autumn", 4: "winter"}
// not aligned
var _ = map[string]string{"a": "spring", "b": "summer",
"c": "autumn", "d": "winter"}
// aligned
var _ = map[string]string{"a": "spring",
"b": "summer",
"c": "autumn",
"d": "winter"}
func _() {
var _ = T{
a, // must introduce trailing comma
}
}
// formatting of function results
func _() func() {}
func _() func(int) { return nil }
func _() func(int) int { return nil }
func _() func(int) func(int) func() { return 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 { y := x; return y+1 }
func _() int { type T struct{}; var x T; return x }
// these must remain multi-line since they are multi-line in the source
func _() {
f(1, 2, 3)
}
func _(x int) int {
y := x; return y+1
}
func _() int {
type T struct{}; var x T; return x
}
// making function declarations safe for new semicolon rules
func _() { /* single-line function because of "short-ish" comment */ }
func _() { /* multi-line function because of "long-ish" comment - much more comment text is following here */ /* and more */ }
func _() {
/* multi-line func because block is on multiple lines */ }
// ellipsis parameters
func _(...int)
func _(...*int)
func _(...[]int)
func _(...struct{})
func _(bool, ...interface{})
func _(bool, ...func())
func _(bool, ...func(...int))
func _(bool, ...map[string]int)
func _(bool, ...chan int)
func _(b bool, x ...int)
func _(b bool, x ...*int)
func _(b bool, x ...[]int)
func _(b bool, x ...struct{})
func _(x ...interface{})
func _(x ...func())
func _(x ...func(...int))
func _(x ...map[string]int)
func _(x ...chan int)
// these parameter lists must remain multi-line since they are multi-line in the source
func _(bool,
int) {
}
func _(x bool,
y int) {
}
func _(x,
y bool) {
}
func _(bool, // comment
int) {
}
func _(x bool, // comment
y int) {
}
func _(x, // comment
y bool) {
}
func _(bool, // comment
// comment
int) {
}
func _(x bool, // comment
// comment
y int) {
}
func _(x, // comment
// comment
y bool) {
}
func _(bool,
// comment
int) {
}
func _(x bool,
// comment
y int) {
}
func _(x,
// comment
y bool) {
}
func _(x, // comment
y,// comment
z bool) {
}
func _(x, // comment
y,// comment
z bool) {
}
func _(x int, // comment
y float, // comment
z bool) {
}
// properly indent multi-line signatures
func ManageStatus(in <-chan *Status, req <-chan Request,
stat chan<- *TargetInfo,
TargetHistorySize int) {
}
func MultiLineSignature0(
a, b, c int,
) {}
func MultiLineSignature1(
a, b, c int,
u, v, w float,
) {}
func MultiLineSignature2(
a, b,
c int,
) {}
func MultiLineSignature3(
a, b,
c int, u, v,
w float,
x ...int) {}
func MultiLineSignature4(
a, b, c int,
u, v,
w float,
x ...int) {}
func MultiLineSignature5(
a, b, c int,
u, v, w float,
p, q,
r string,
x ...int) {}
// make sure it also works for methods in interfaces
type _ interface {
MultiLineSignature0(
a, b, c int,
)
MultiLineSignature1(
a, b, c int,
u, v, w float,
)
MultiLineSignature2(
a, b,
c int,
)
MultiLineSignature3(
a, b,
c int, u, v,
w float,
x ...int)
MultiLineSignature4(
a, b, c int,
u, v,
w float,
x ...int)
MultiLineSignature5(
a, b, c int,
u, v, w float,
p, q,
r string,
x ...int)
}
// omit superfluous parentheses in parameter lists
func _((int))
func _((((((int))))))
func _(x (int))
func _(x (((((int))))))
func _(x, y (int))
func _(x, y (((((int))))))
func _() (int)
func _() ((int))
func _() ((((((int))))))
func _() (x int)
func _() (x (int))
func _() (x (((((int))))))
// special cases: some channel types require parentheses
func _(x chan(<-chan int))
func _(x (chan(<-chan int)))
func _(x ((((chan(<-chan int))))))
func _(x chan<-(chan int))
func _(x (chan<-(chan int)))
func _(x ((((chan<-(chan int))))))
// don't introduce comma after last parameter if the closing ) is on the same line
// even if the parameter type itself is multi-line (test cases from issue 4533)
func _(...interface{})
func _(...interface {
m()
n()
}) // no extra comma between } and )
func (t *T) _(...interface{})
func (t *T) _(...interface {
m()
n()
}) // no extra comma between } and )
func _(interface{})
func _(interface {
m()
}) // no extra comma between } and )
func _(struct{})
func _(struct {
x int
y int
}) // no extra comma between } and )