github.com/gocuntian/go@v0.0.0-20160610041250-fee02d270bf8/src/go/printer/testdata/declarations.input (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package imports
     6  
     7  import "io"
     8  
     9  import (
    10  	_ "io"
    11  )
    12  
    13  import _ "io"
    14  
    15  import (
    16  	"io"
    17  	"io"
    18  	"io"
    19  )
    20  
    21  import (
    22  	"io"
    23  	aLongRename "io"
    24  
    25  	b "io"
    26  )
    27  
    28  import (
    29         "unrenamed"
    30         renamed "renameMe"
    31         . "io"
    32         _ "io"
    33         "io"
    34         . "os"
    35  )
    36  
    37  // no newlines between consecutive single imports, but
    38  // respect extra line breaks in the source (at most one empty line)
    39  import _ "io"
    40  import _ "io"
    41  import _ "io"
    42  
    43  import _ "os"
    44  import _ "os"
    45  import _ "os"
    46  
    47  
    48  import _ "fmt"
    49  import _ "fmt"
    50  import _ "fmt"
    51  
    52  import "foo"  // a comment
    53  import "bar"  // a comment
    54  
    55  import (
    56  	_ "foo"
    57  	// a comment
    58  	"bar"
    59  	"foo"  // a comment
    60  	"bar"  // a comment
    61  )
    62  
    63  // comments + renames
    64  import (
    65         "unrenamed" // a comment
    66         renamed "renameMe"
    67         . "io" /* a comment */
    68         _ "io/ioutil" // a comment
    69         "io" // testing alignment
    70         . "os"
    71         // a comment
    72  )
    73  
    74  // a case that caused problems in the past (comment placement)
    75  import (
    76  	. "fmt"
    77  	"io"
    78  	"malloc"	// for the malloc count test only
    79  	"math"
    80  	"strings"
    81  	"testing"
    82  )
    83  
    84  // more import examples
    85  import (
    86  	"xxx"
    87  	"much_longer_name" // comment
    88  	"short_name" // comment
    89  )
    90  
    91  import (
    92  	_ "xxx"
    93  	"much_longer_name" // comment
    94  )
    95  
    96  import (
    97  	mymath "math"
    98  	"/foo/bar/long_package_path" // a comment
    99  )
   100  
   101  import (
   102  	"package_a" // comment
   103  	"package_b"
   104  	my_better_c "package_c" // comment
   105  	"package_d" // comment
   106  	my_e "package_e" // comment
   107  
   108  	"package_a"    // comment
   109  	"package_bb"
   110  	"package_ccc"  // comment
   111  	"package_dddd" // comment
   112  )
   113  
   114  // print import paths as double-quoted strings
   115  // (we would like more test cases but the go/parser
   116  // already excludes most incorrect paths, and we don't
   117  // bother setting up test-ASTs manually)
   118  import (
   119  	`fmt`
   120  	"math"
   121  )
   122  
   123  // at least one empty line between declarations of different kind
   124  import _ "io"
   125  var _ int
   126  
   127  // at least one empty line between declarations of the same kind
   128  // if there is associated documentation (was issue 2570)
   129  type T1 struct{}
   130  // T2 comment
   131  type T2 struct {
   132  } // should be a two-line struct
   133  
   134  
   135  // T3 comment
   136  type T2 struct {
   137  
   138  
   139  } // should be a two-line struct
   140  
   141  
   142  // printing of constant literals
   143  const (
   144  	_ = "foobar"
   145  	_ = "a۰۱۸"
   146  	_ = "foo६४"
   147  	_ = "bar9876"
   148  	_ = 0
   149  	_ = 1
   150  	_ = 123456789012345678890
   151  	_ = 01234567
   152  	_ = 0xcafebabe
   153  	_ = 0.
   154  	_ = .0
   155  	_ = 3.14159265
   156  	_ = 1e0
   157  	_ = 1e+100
   158  	_ = 1e-100
   159  	_ = 2.71828e-1000
   160  	_ = 0i
   161  	_ = 1i
   162  	_ = 012345678901234567889i
   163  	_ = 123456789012345678890i
   164  	_ = 0.i
   165  	_ = .0i
   166  	_ = 3.14159265i
   167  	_ = 1e0i
   168  	_ = 1e+100i
   169  	_ = 1e-100i
   170  	_ = 2.71828e-1000i
   171  	_ = 'a'
   172  	_ = '\000'
   173  	_ = '\xFF'
   174  	_ = '\uff16'
   175  	_ = '\U0000ff16'
   176  	_ = `foobar`
   177  	_ = `foo
   178  ---
   179  ---
   180  bar`
   181  )
   182  
   183  
   184  func _() {
   185  	type _ int
   186  	type _ *int
   187  	type _ []int
   188  	type _ map[string]int
   189  	type _ chan int
   190  	type _ func() int
   191  
   192  	var _ int
   193  	var _ *int
   194  	var _ []int
   195  	var _ map[string]int
   196  	var _ chan int
   197  	var _ func() int
   198  
   199  	type _ struct{}
   200  	type _ *struct{}
   201  	type _ []struct{}
   202  	type _ map[string]struct{}
   203  	type _ chan struct{}
   204  	type _ func() struct{}
   205  
   206  	type _ interface{}
   207  	type _ *interface{}
   208  	type _ []interface{}
   209  	type _ map[string]interface{}
   210  	type _ chan interface{}
   211  	type _ func() interface{}
   212  
   213  	var _ struct{}
   214  	var _ *struct{}
   215  	var _ []struct{}
   216  	var _ map[string]struct{}
   217  	var _ chan struct{}
   218  	var _ func() struct{}
   219  
   220  	var _ interface{}
   221  	var _ *interface{}
   222  	var _ []interface{}
   223  	var _ map[string]interface{}
   224  	var _ chan interface{}
   225  	var _ func() interface{}
   226  }
   227  
   228  
   229  // don't lose blank lines in grouped declarations
   230  const (
   231  	_ int = 0
   232  	_ float = 1
   233  
   234  	_ string = "foo"
   235  
   236  	_ = iota
   237  	_
   238  	
   239  	// a comment
   240  	_
   241  
   242  	_
   243  )
   244  
   245  
   246  type (
   247  	_ int
   248  	_ struct {}
   249  	
   250  	_ interface{}
   251  	
   252  	// a comment
   253  	_ map[string]int
   254  )
   255  
   256  
   257  var (
   258  	_ int = 0
   259  	_ float = 1
   260  
   261  	_ string = "foo"
   262  
   263  	_ bool
   264  	
   265  	// a comment
   266  	_ bool
   267  )
   268  
   269  
   270  // don't lose blank lines in this struct
   271  type _ struct {
   272  	String struct {
   273  		Str, Len int
   274  	}
   275  	Slice struct {
   276  		Array, Len, Cap int
   277  	}
   278  	Eface struct {
   279  		Typ, Ptr int
   280  	}
   281  
   282  	UncommonType struct {
   283  		Name, PkgPath int
   284  	}
   285  	CommonType struct {
   286  		Size, Hash, Alg, Align, FieldAlign, String, UncommonType int
   287  	}
   288  	Type struct {
   289  		Typ, Ptr int
   290  	}
   291  	StructField struct {
   292  		Name, PkgPath, Typ, Tag, Offset int
   293  	}
   294  	StructType struct {
   295  		Fields int
   296  	}
   297  	PtrType struct {
   298  		Elem int
   299  	}
   300  	SliceType struct {
   301  		Elem int
   302  	}
   303  	ArrayType struct {
   304  		Elem, Len int
   305  	}
   306  
   307  	Stktop struct {
   308  		Stackguard, Stackbase, Gobuf int
   309  	}
   310  	Gobuf struct {
   311  		Sp, Pc, G int
   312  	}
   313  	G struct {
   314  		Stackbase, Sched, Status, Alllink int
   315  	}
   316  }
   317  
   318  
   319  // no blank lines in empty structs and interfaces, but leave 1- or 2-line layout alone
   320  type _ struct{            }
   321  type _ struct {
   322  
   323  }
   324  
   325  type _ interface{            }
   326  type _ interface {
   327  
   328  }
   329  
   330  
   331  // no tabs for single or ungrouped decls
   332  func _() {
   333  	const xxxxxx = 0
   334  	type x int
   335  	var xxx int
   336  	var yyyy float = 3.14
   337  	var zzzzz = "bar"
   338  
   339  	const (
   340  		xxxxxx = 0
   341  	)
   342  	type (
   343  		x int
   344  	)
   345  	var (
   346  		xxx int
   347  	)
   348  	var (
   349  		yyyy float = 3.14
   350  	)
   351  	var (
   352  		zzzzz = "bar"
   353  	)
   354  }
   355  
   356  // tabs for multiple or grouped decls
   357  func _() {
   358  	// no entry has a type
   359  	const (
   360  		zzzzzz = 1
   361  		z = 2
   362  		zzz = 3
   363  	)
   364  	// some entries have a type
   365  	const (
   366  		xxxxxx = 1
   367  		x = 2
   368  		xxx = 3
   369  		yyyyyyyy float = iota
   370  		yyyy = "bar"
   371  		yyy
   372  		yy = 2
   373  	)
   374  }
   375  
   376  func _() {
   377  	// no entry has a type
   378  	var (
   379  		zzzzzz = 1
   380  		z = 2
   381  		zzz = 3
   382  	)
   383  	// no entry has a value
   384  	var (
   385  		_ int
   386  		_ float
   387  		_ string
   388  
   389  		_ int  // comment
   390  		_ float  // comment
   391  		_ string  // comment
   392  	)
   393  	// some entries have a type
   394  	var (
   395  		xxxxxx int
   396  		x float
   397  		xxx string
   398  		yyyyyyyy int = 1234
   399  		y float = 3.14
   400  		yyyy = "bar"
   401  		yyy string = "foo"
   402  	)
   403  	// mixed entries - all comments should be aligned
   404  	var (
   405  		a, b, c int
   406  		x = 10
   407  		d int  // comment
   408  		y = 20  // comment
   409  		f, ff, fff, ffff int = 0, 1, 2, 3  // comment
   410  	)
   411  	// respect original line breaks
   412  	var _ = []T {
   413  		T{0x20,	"Telugu"},
   414  	}
   415  	var _ = []T {
   416  		// respect original line breaks
   417  		T{0x20,	"Telugu"},
   418  	}
   419  }
   420  
   421  // use the formatted output rather than the input to decide when to align
   422  // (was issue 4505)
   423  const (
   424  	short = 2 * (
   425  	1 + 2)
   426  	aMuchLongerName = 3
   427  )
   428  
   429  var (
   430  	short = X{
   431  	}
   432  	aMuchLongerName = X{}
   433  
   434  	x1 = X{} // foo
   435  	x2 = X{
   436  	} // foo
   437  )
   438  
   439  func _() {
   440  	type (
   441  		xxxxxx int
   442  		x float
   443  		xxx string
   444  		xxxxx []x
   445  		xx struct{}
   446  		xxxxxxx struct {
   447  			_, _ int
   448  			_ float
   449  		}
   450  		xxxx chan<- string
   451  	)
   452  }
   453  
   454  // alignment of "=" in consecutive lines (extended example from issue 1414)
   455  const (
   456  	umax uint                  = ^uint(0) // maximum value for a uint
   457  	bpu  = 1 << (5 + umax>>63)            // bits per uint
   458  	foo
   459  	bar  = -1
   460  )
   461  
   462  // typical enum
   463  const (
   464  	a MyType = iota
   465  	abcd
   466  	b
   467  	c
   468  	def
   469  )
   470  
   471  // excerpt from godoc.go
   472  var (
   473  	goroot = flag.String("goroot", runtime.GOROOT(), "Go root directory")
   474  	testDir = flag.String("testdir", "", "Go root subdirectory - for testing only (faster startups)")
   475  	pkgPath = flag.String("path", "", "additional package directories (colon-separated)")
   476  	filter = flag.String("filter", "", "filter file containing permitted package directory paths")
   477  	filterMin = flag.Int("filter_minutes", 0, "filter file update interval in minutes; disabled if <= 0")
   478  	filterDelay delayTime // actual filter update interval in minutes; usually filterDelay == filterMin, but filterDelay may back off exponentially
   479  )
   480  
   481  
   482  // formatting of structs
   483  type _ struct{}
   484  
   485  type _ struct{ /* this comment should be visible */ }
   486  
   487  type _ struct{
   488  	// this comment should be visible and properly indented
   489  }
   490  
   491  type _ struct {  // this comment must not change indentation
   492  	f int
   493  	f, ff, fff, ffff int
   494  }
   495  
   496  type _ struct {
   497  	string
   498  }
   499  
   500  type _ struct {
   501  	string  // comment
   502  }
   503  
   504  type _ struct {
   505  	string "tag"
   506  }
   507  
   508  type _ struct {
   509  	string "tag"  // comment
   510  }
   511  
   512  type _ struct {
   513  	f int
   514  }
   515  
   516  type _ struct {
   517  	f int  // comment
   518  }
   519  
   520  type _ struct {
   521  	f int "tag"
   522  }
   523  
   524  type _ struct {
   525  	f int "tag"  // comment
   526  }
   527  
   528  type _ struct {
   529  	bool
   530  	a, b, c int
   531  	int "tag"
   532  	ES // comment
   533  	float "tag"  // comment
   534  	f int  // comment
   535  	f, ff, fff, ffff int  // comment
   536  	g float "tag"
   537  	h float "tag"  // comment
   538  }
   539  
   540  type _ struct { a, b,
   541  c, d int  // this line should be indented
   542  u, v, w, x float // this line should be indented
   543  p, q,
   544  r, s float // this line should be indented
   545  }
   546  
   547  
   548  // difficult cases
   549  type _ struct {
   550  	bool  // comment
   551  	text []byte  // comment
   552  }
   553  
   554  
   555  // formatting of interfaces
   556  type EI interface{}
   557  
   558  type _ interface {
   559  	EI
   560  }
   561  
   562  type _ interface {
   563  	f()
   564  	fffff()
   565  }
   566  
   567  type _ interface {
   568  	EI
   569  	f()
   570  	fffffg()
   571  }
   572  
   573  type _ interface {  // this comment must not change indentation
   574  	EI  // here's a comment
   575  	f()  // no blank between identifier and ()
   576  	fffff()  // no blank between identifier and ()
   577  	gggggggggggg(x, y, z int) ()  // hurray
   578  }
   579  
   580  
   581  // formatting of variable declarations
   582  func _() {
   583  	type day struct { n int; short, long string }
   584  	var (
   585  		Sunday = day{ 0, "SUN", "Sunday" }
   586  		Monday = day{ 1, "MON", "Monday" }
   587  		Tuesday = day{ 2, "TUE", "Tuesday" }
   588  		Wednesday = day{ 3, "WED", "Wednesday" }
   589  		Thursday = day{ 4, "THU", "Thursday" }
   590  		Friday = day{ 5, "FRI", "Friday" }
   591  		Saturday = day{ 6, "SAT", "Saturday" }
   592  	)
   593  }
   594  
   595  
   596  // formatting of multi-line variable declarations
   597  var a1, b1, c1 int  // all on one line
   598  
   599  var a2, b2,
   600  c2 int  // this line should be indented
   601  
   602  var (a3, b3,
   603  c3, d3 int  // this line should be indented
   604  a4, b4, c4 int  // this line should be indented
   605  )
   606  
   607  // Test case from issue 3304: multi-line declarations must end
   608  // a formatting section and not influence indentation of the
   609  // next line.
   610  var (
   611  	minRefreshTimeSec = flag.Int64("min_refresh_time_sec", 604800,
   612  		"minimum time window between two refreshes for a given user.")
   613  	x = flag.Int64("refresh_user_rollout_percent", 100,
   614  		"temporary flag to ramp up the refresh user rpc")
   615  	aVeryLongVariableName = stats.GetVarInt("refresh-user-count")
   616  )
   617  
   618  func _() {
   619  	var privateKey2 = &Block{Type: "RSA PRIVATE KEY",
   620  					Headers: map[string]string{},
   621  					Bytes: []uint8{0x30, 0x82, 0x1, 0x3a, 0x2, 0x1, 0x0, 0x2,
   622  			0x41, 0x0, 0xb2, 0x99, 0xf, 0x49, 0xc4, 0x7d, 0xfa, 0x8c,
   623  			0xd4, 0x0, 0xae, 0x6a, 0x4d, 0x1b, 0x8a, 0x3b, 0x6a, 0x13,
   624  			0x64, 0x2b, 0x23, 0xf2, 0x8b, 0x0, 0x3b, 0xfb, 0x97, 0x79,
   625  		},
   626  	}
   627  }
   628  
   629  
   630  func _() {
   631  	var Universe = Scope {
   632  		Names: map[string]*Ident {
   633  			// basic types
   634  			"bool": nil,
   635  			"byte": nil,
   636  			"int8": nil,
   637  			"int16": nil,
   638  			"int32": nil,
   639  			"int64": nil,
   640  			"uint8": nil,
   641  			"uint16": nil,
   642  			"uint32": nil,
   643  			"uint64": nil,
   644  			"float32": nil,
   645  			"float64": nil,
   646  			"string": nil,
   647  
   648  			// convenience types
   649  			"int": nil,
   650  			"uint": nil,
   651  			"uintptr": nil,
   652  			"float": nil,
   653  
   654  			// constants
   655  			"false": nil,
   656  			"true": nil,
   657  			"iota": nil,
   658  			"nil": nil,
   659  
   660  			// functions
   661  			"cap": nil,
   662  			"len": nil,
   663  			"new": nil,
   664  			"make": nil,
   665  			"panic": nil,
   666  			"panicln": nil,
   667  			"print": nil,
   668  			"println": nil,
   669  		},
   670  	}
   671  }
   672  
   673  
   674  // alignment of map composite entries
   675  var _ = map[int]int{
   676  	// small key sizes: always align even if size ratios are large
   677  	a: a,
   678  	abcdefghabcdefgh: a,
   679  	ab: a,
   680  	abc: a,
   681  	abcdefgabcdefg: a,
   682  	abcd: a,
   683  	abcde: a,
   684  	abcdef: a,
   685  
   686  	// mixed key sizes: align when key sizes change within accepted ratio
   687  	abcdefgh: a,
   688  	abcdefghabcdefg: a,
   689  	abcdefghij: a,
   690  	abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij: a, // outlier - do not align with previous line
   691  	abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij: a, // align with previous line
   692  
   693  	ab: a, // do not align with previous line
   694  	abcde: a, // align with previous line
   695  }
   696  
   697  // alignment of map composite entries: test cases from issue 3965
   698  // aligned
   699  var _ = T1{
   700  	a:                    x,
   701  	b:                    y,
   702  	cccccccccccccccccccc: z,
   703  }
   704  
   705  // not aligned
   706  var _ = T2{
   707  	a: x,
   708  	b: y,
   709  	ccccccccccccccccccccc: z,
   710  }
   711  
   712  // aligned
   713  var _ = T3{
   714  	aaaaaaaaaaaaaaaaaaaa: x,
   715  	b:                    y,
   716  	c:                    z,
   717  }
   718  
   719  // not aligned
   720  var _ = T4{
   721  	aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: x,
   722  	b:                                       y,
   723  	c:                                       z,
   724  }
   725  
   726  
   727  // no alignment of map composite entries if they are not the first entry on a line
   728  var _ = T{0: 0} // not aligned
   729  var _ = T{0: 0, // not aligned
   730  	1: 1, // aligned
   731  	22: 22, // aligned
   732  	333: 333, 1234: 12, 12345: 0, // first on line aligned
   733  }
   734  
   735  
   736  // test cases form issue 8685
   737  // not aligned
   738  var _ = map[int]string{1: "spring", 2: "summer",
   739  					3:             "autumn", 4: "winter"}
   740  
   741  // not aligned
   742  var _ = map[string]string{"a": "spring", "b": "summer",
   743  	"c": "autumn", "d": "winter"}
   744  
   745  // aligned
   746  var _ = map[string]string{"a": "spring",
   747  "b": "summer",
   748  	"c": "autumn",
   749  "d": "winter"}
   750  
   751  
   752  func _() {
   753  	var _ = T{
   754  		a,	// must introduce trailing comma
   755  	}
   756  }
   757  
   758  
   759  // formatting of function results
   760  func _() func() {}
   761  func _() func(int) { return nil }
   762  func _() func(int) int { return nil }
   763  func _() func(int) func(int) func() { return nil }
   764  
   765  
   766  // formatting of consecutive single-line functions
   767  func _() {}
   768  func _() {}
   769  func _() {}
   770  
   771  func _() {}  // an empty line before this function
   772  func _() {}
   773  func _() {}
   774  
   775  func _() { f(1, 2, 3) }
   776  func _(x int) int { y := x; return y+1 }
   777  func _() int { type T struct{}; var x T; return x }
   778  
   779  // these must remain multi-line since they are multi-line in the source
   780  func _() {
   781  	f(1, 2, 3)
   782  }
   783  func _(x int) int {
   784  	y := x; return y+1
   785  }
   786  func _() int {
   787  	type T struct{}; var x T; return x
   788  }
   789  
   790  
   791  // making function declarations safe for new semicolon rules
   792  func _() { /* single-line function because of "short-ish" comment */ }
   793  func _() { /* multi-line function because of "long-ish" comment - much more comment text is following here */ /* and more */ }
   794  
   795  func _() {
   796  /* multi-line func because block is on multiple lines */ }
   797  
   798  
   799  // ellipsis parameters
   800  func _(...int)
   801  func _(...*int)
   802  func _(...[]int)
   803  func _(...struct{})
   804  func _(bool, ...interface{})
   805  func _(bool, ...func())
   806  func _(bool, ...func(...int))
   807  func _(bool, ...map[string]int)
   808  func _(bool, ...chan int)
   809  
   810  func _(b bool, x ...int)
   811  func _(b bool, x ...*int)
   812  func _(b bool, x ...[]int)
   813  func _(b bool, x ...struct{})
   814  func _(x ...interface{})
   815  func _(x ...func())
   816  func _(x ...func(...int))
   817  func _(x ...map[string]int)
   818  func _(x ...chan int)
   819  
   820  
   821  // these parameter lists must remain multi-line since they are multi-line in the source
   822  func _(bool,
   823  int) {
   824  }
   825  func _(x bool,
   826  y int) {
   827  }
   828  func _(x,
   829  y bool) {
   830  }
   831  func _(bool, // comment
   832  int) {
   833  }
   834  func _(x bool, // comment
   835  y int) {
   836  }
   837  func _(x, // comment
   838  y bool) {
   839  }
   840  func _(bool, // comment
   841  // comment
   842  int) {
   843  }
   844  func _(x bool, // comment
   845  // comment
   846  y int) {
   847  }
   848  func _(x, // comment
   849  // comment
   850  y bool) {
   851  }
   852  func _(bool,
   853  // comment
   854  int) {
   855  }
   856  func _(x bool,
   857  // comment
   858  y int) {
   859  }
   860  func _(x,
   861  // comment
   862  y bool) {
   863  }
   864  func _(x, // comment
   865  y,// comment
   866  z bool) {
   867  }
   868  func _(x, // comment
   869  	y,// comment
   870  	z bool) {
   871  }
   872  func _(x int,	// comment
   873  	y float,	// comment
   874  	z bool) {
   875  }
   876  
   877  
   878  // properly indent multi-line signatures
   879  func ManageStatus(in <-chan *Status, req <-chan Request,
   880  stat chan<- *TargetInfo,
   881  TargetHistorySize int) {
   882  }
   883  
   884  func MultiLineSignature0(
   885  a, b, c int,
   886  ) {}
   887  
   888  func MultiLineSignature1(
   889  a, b, c int,
   890  u, v, w float,
   891  ) {}
   892  
   893  func MultiLineSignature2(
   894  a, b,
   895  c int,
   896  ) {}
   897  
   898  func MultiLineSignature3(
   899  a, b,
   900  c int, u, v,
   901  w float,
   902  		x ...int) {}
   903  
   904  func MultiLineSignature4(
   905  a, b, c int,
   906  u, v,
   907  w float,
   908  		x ...int) {}
   909  
   910  func MultiLineSignature5(
   911  a, b, c int,
   912  u, v, w float,
   913  p, q,
   914  r string,
   915  		x ...int) {}
   916  
   917  // make sure it also works for methods in interfaces
   918  type _ interface {
   919  MultiLineSignature0(
   920  a, b, c int,
   921  )
   922  
   923  MultiLineSignature1(
   924  a, b, c int,
   925  u, v, w float,
   926  )
   927  
   928  MultiLineSignature2(
   929  a, b,
   930  c int,
   931  )
   932  
   933  MultiLineSignature3(
   934  a, b,
   935  c int, u, v,
   936  w float,
   937  		x ...int)
   938  
   939  MultiLineSignature4(
   940  a, b, c int,
   941  u, v,
   942  w float,
   943  		x ...int)
   944  
   945  MultiLineSignature5(
   946  a, b, c int,
   947  u, v, w float,
   948  p, q,
   949  r string,
   950  		x ...int)
   951  }
   952  
   953  // omit superfluous parentheses in parameter lists
   954  func _((int))
   955  func _((((((int))))))
   956  func _(x (int))
   957  func _(x (((((int))))))
   958  func _(x, y (int))
   959  func _(x, y (((((int))))))
   960  
   961  func _() (int)
   962  func _() ((int))
   963  func _() ((((((int))))))
   964  
   965  func _() (x int)
   966  func _() (x (int))
   967  func _() (x (((((int))))))
   968  
   969  // special cases: some channel types require parentheses
   970  func _(x chan(<-chan int))
   971  func _(x (chan(<-chan int)))
   972  func _(x ((((chan(<-chan int))))))
   973  
   974  func _(x chan<-(chan int))
   975  func _(x (chan<-(chan int)))
   976  func _(x ((((chan<-(chan int))))))
   977  
   978  // don't introduce comma after last parameter if the closing ) is on the same line
   979  // even if the parameter type itself is multi-line (test cases from issue 4533)
   980  func _(...interface{})
   981  func _(...interface {
   982  	m()
   983  	n()
   984  }) // no extra comma between } and )
   985  
   986  func (t *T) _(...interface{})
   987  func (t *T) _(...interface {
   988  	m()
   989  	n()
   990  }) // no extra comma between } and )
   991  
   992  func _(interface{})
   993  func _(interface {
   994  	m()
   995  }) // no extra comma between } and )
   996  
   997  func _(struct{})
   998  func _(struct {
   999  	x int
  1000  	y int
  1001  }) // no extra comma between } and )