github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/go/printer/testdata/statements.golden (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 statements
     6  
     7  var expr bool
     8  
     9  func use(x interface{})	{}
    10  
    11  // Formatting of multi-line return statements.
    12  func _f() {
    13  	return
    14  	return x, y, z
    15  	return T{}
    16  	return T{1, 2, 3},
    17  		x, y, z
    18  	return T{1, 2, 3},
    19  		x, y,
    20  		z
    21  	return T{1,
    22  		2,
    23  		3}
    24  	return T{1,
    25  		2,
    26  		3,
    27  	}
    28  	return T{
    29  		1,
    30  		2,
    31  		3}
    32  	return T{
    33  		1,
    34  		2,
    35  		3,
    36  	}
    37  	return T{
    38  		1,
    39  		T{1, 2, 3},
    40  		3,
    41  	}
    42  	return T{
    43  		1,
    44  		T{1,
    45  			2, 3},
    46  		3,
    47  	}
    48  	return T{
    49  		1,
    50  		T{1,
    51  			2,
    52  			3},
    53  		3,
    54  	}
    55  	return T{
    56  		1,
    57  		2,
    58  	}, nil
    59  	return T{
    60  			1,
    61  			2,
    62  		},
    63  		T{
    64  			x:	3,
    65  			y:	4,
    66  		}, nil
    67  	return T{
    68  			1,
    69  			2,
    70  		},
    71  		nil
    72  	return T{
    73  			1,
    74  			2,
    75  		},
    76  		T{
    77  			x:	3,
    78  			y:	4,
    79  		},
    80  		nil
    81  	return x + y +
    82  		z
    83  	return func() {}
    84  	return func() {
    85  			_ = 0
    86  		}, T{
    87  			1, 2,
    88  		}
    89  	return func() {
    90  		_ = 0
    91  	}
    92  	return func() T {
    93  		return T{
    94  			1, 2,
    95  		}
    96  	}
    97  }
    98  
    99  // Formatting of multi-line returns: test cases from issue 1207.
   100  func F() (*T, os.Error) {
   101  	return &T{
   102  			X:	1,
   103  			Y:	2,
   104  		},
   105  		nil
   106  }
   107  
   108  func G() (*T, *T, os.Error) {
   109  	return &T{
   110  			X:	1,
   111  			Y:	2,
   112  		},
   113  		&T{
   114  			X:	3,
   115  			Y:	4,
   116  		},
   117  		nil
   118  }
   119  
   120  func _() interface{} {
   121  	return &fileStat{
   122  		name:		basename(file.name),
   123  		size:		mkSize(d.FileSizeHigh, d.FileSizeLow),
   124  		modTime:	mkModTime(d.LastWriteTime),
   125  		mode:		mkMode(d.FileAttributes),
   126  		sys:		mkSysFromFI(&d),
   127  	}, nil
   128  }
   129  
   130  // Formatting of if-statement headers.
   131  func _() {
   132  	if true {
   133  	}
   134  	if true {
   135  	}	// no semicolon printed
   136  	if expr {
   137  	}
   138  	if expr {
   139  	}	// no semicolon printed
   140  	if expr {
   141  	}	// no parens printed
   142  	if expr {
   143  	}	// no semicolon and parens printed
   144  	if x := expr; true {
   145  		use(x)
   146  	}
   147  	if x := expr; expr {
   148  		use(x)
   149  	}
   150  }
   151  
   152  // Formatting of switch-statement headers.
   153  func _() {
   154  	switch {
   155  	}
   156  	switch {
   157  	}	// no semicolon printed
   158  	switch expr {
   159  	}
   160  	switch expr {
   161  	}	// no semicolon printed
   162  	switch expr {
   163  	}	// no parens printed
   164  	switch expr {
   165  	}	// no semicolon and parens printed
   166  	switch x := expr; {
   167  	default:
   168  		use(
   169  			x)
   170  	}
   171  	switch x := expr; expr {
   172  	default:
   173  		use(x)
   174  	}
   175  }
   176  
   177  // Formatting of switch statement bodies.
   178  func _() {
   179  	switch {
   180  	}
   181  
   182  	switch x := 0; x {
   183  	case 1:
   184  		use(x)
   185  		use(x)	// followed by an empty line
   186  
   187  	case 2:	// followed by an empty line
   188  
   189  		use(x)	// followed by an empty line
   190  
   191  	case 3:	// no empty lines
   192  		use(x)
   193  		use(x)
   194  	}
   195  
   196  	switch x {
   197  	case 0:
   198  		use(x)
   199  	case 1:	// this comment should have no effect on the previous or next line
   200  		use(x)
   201  	}
   202  
   203  	switch x := 0; x {
   204  	case 1:
   205  		x = 0
   206  		// this comment should be indented
   207  	case 2:
   208  		x = 0
   209  	// this comment should not be indented, it is aligned with the next case
   210  	case 3:
   211  		x = 0
   212  		/* indented comment
   213  		   aligned
   214  		   aligned
   215  		*/
   216  		// bla
   217  		/* and more */
   218  	case 4:
   219  		x = 0
   220  	/* not indented comment
   221  	   aligned
   222  	   aligned
   223  	*/
   224  	// bla
   225  	/* and more */
   226  	case 5:
   227  	}
   228  }
   229  
   230  // Formatting of selected select statements.
   231  func _() {
   232  	select {}
   233  	select { /* this comment should not be tab-aligned because the closing } is on the same line */
   234  	}
   235  	select {	/* this comment should be tab-aligned */
   236  	}
   237  	select {	// this comment should be tab-aligned
   238  	}
   239  	select {
   240  	case <-c:
   241  	}
   242  }
   243  
   244  // Formatting of for-statement headers for single-line for-loops.
   245  func _() {
   246  	for {
   247  	}
   248  	for expr {
   249  	}
   250  	for expr {
   251  	}	// no parens printed
   252  	for {
   253  	}	// no semicolons printed
   254  	for x := expr; ; {
   255  		use(x)
   256  	}
   257  	for expr {
   258  	}	// no semicolons printed
   259  	for expr {
   260  	}	// no semicolons and parens printed
   261  	for ; ; expr = false {
   262  	}
   263  	for x := expr; expr; {
   264  		use(x)
   265  	}
   266  	for x := expr; ; expr = false {
   267  		use(x)
   268  	}
   269  	for ; expr; expr = false {
   270  	}
   271  	for x := expr; expr; expr = false {
   272  		use(x)
   273  	}
   274  	for x := range []int{} {
   275  		use(x)
   276  	}
   277  	for x := range []int{} {
   278  		use(x)
   279  	}	// no parens printed
   280  }
   281  
   282  // Formatting of for-statement headers for multi-line for-loops.
   283  func _() {
   284  	for {
   285  	}
   286  	for expr {
   287  	}
   288  	for expr {
   289  	}	// no parens printed
   290  	for {
   291  	}	// no semicolons printed
   292  	for x := expr; ; {
   293  		use(x)
   294  	}
   295  	for expr {
   296  	}	// no semicolons printed
   297  	for expr {
   298  	}	// no semicolons and parens printed
   299  	for ; ; expr = false {
   300  	}
   301  	for x := expr; expr; {
   302  		use(x)
   303  	}
   304  	for x := expr; ; expr = false {
   305  		use(x)
   306  	}
   307  	for ; expr; expr = false {
   308  	}
   309  	for x := expr; expr; expr = false {
   310  		use(x)
   311  	}
   312  	for x := range []int{} {
   313  		use(x)
   314  	}
   315  	for x := range []int{} {
   316  		use(x)
   317  	}	// no parens printed
   318  }
   319  
   320  // Formatting of selected short single- and multi-line statements.
   321  func _() {
   322  	if cond {
   323  	}
   324  	if cond {
   325  	}	// multiple lines
   326  	if cond {
   327  	} else {
   328  	}	// else clause always requires multiple lines
   329  
   330  	for {
   331  	}
   332  	for i := 0; i < len(a); 1++ {
   333  	}
   334  	for i := 0; i < len(a); 1++ {
   335  		a[i] = i
   336  	}
   337  	for i := 0; i < len(a); 1++ {
   338  		a[i] = i
   339  	}	// multiple lines
   340  
   341  	for i := range a {
   342  	}
   343  	for i := range a {
   344  		a[i] = i
   345  	}
   346  	for i := range a {
   347  		a[i] = i
   348  	}	// multiple lines
   349  
   350  	go func() {
   351  		for {
   352  			a <- <-b
   353  		}
   354  	}()
   355  	defer func() {
   356  		if x := recover(); x != nil {
   357  			err = fmt.Sprintf("error: %s", x.msg)
   358  		}
   359  	}()
   360  }
   361  
   362  // Don't remove mandatory parentheses around composite literals in control clauses.
   363  func _() {
   364  	// strip parentheses - no composite literals or composite literals don't start with a type name
   365  	if x {
   366  	}
   367  	if x {
   368  	}
   369  	if []T{} {
   370  	}
   371  	if []T{} {
   372  	}
   373  	if []T{} {
   374  	}
   375  
   376  	for x {
   377  	}
   378  	for x {
   379  	}
   380  	for []T{} {
   381  	}
   382  	for []T{} {
   383  	}
   384  	for []T{} {
   385  	}
   386  
   387  	switch x {
   388  	}
   389  	switch x {
   390  	}
   391  	switch []T{} {
   392  	}
   393  	switch []T{} {
   394  	}
   395  
   396  	for _ = range []T{T{42}} {
   397  	}
   398  
   399  	// leave parentheses - composite literals start with a type name
   400  	if (T{}) {
   401  	}
   402  	if (T{}) {
   403  	}
   404  	if (T{}) {
   405  	}
   406  
   407  	for (T{}) {
   408  	}
   409  	for (T{}) {
   410  	}
   411  	for (T{}) {
   412  	}
   413  
   414  	switch (T{}) {
   415  	}
   416  	switch (T{}) {
   417  	}
   418  
   419  	for _ = range (T1{T{42}}) {
   420  	}
   421  
   422  	if x == (T{42}[0]) {
   423  	}
   424  	if (x == T{42}[0]) {
   425  	}
   426  	if x == (T{42}[0]) {
   427  	}
   428  	if x == (T{42}[0]) {
   429  	}
   430  	if x == (T{42}[0]) {
   431  	}
   432  	if x == a+b*(T{42}[0]) {
   433  	}
   434  	if (x == a+b*T{42}[0]) {
   435  	}
   436  	if x == a+b*(T{42}[0]) {
   437  	}
   438  	if x == a+(b * (T{42}[0])) {
   439  	}
   440  	if x == a+b*(T{42}[0]) {
   441  	}
   442  	if (a + b*(T{42}[0])) == x {
   443  	}
   444  	if (a + b*(T{42}[0])) == x {
   445  	}
   446  
   447  	if struct{ x bool }{false}.x {
   448  	}
   449  	if (struct{ x bool }{false}.x) == false {
   450  	}
   451  	if struct{ x bool }{false}.x == false {
   452  	}
   453  }
   454  
   455  // Extra empty lines inside functions. Do respect source code line
   456  // breaks between statement boundaries but print at most one empty
   457  // line at a time.
   458  func _() {
   459  
   460  	const _ = 0
   461  
   462  	const _ = 1
   463  	type _ int
   464  	type _ float
   465  
   466  	var _ = 0
   467  	var x = 1
   468  
   469  	// Each use(x) call below should have at most one empty line before and after.
   470  	// Known bug: The first use call may have more than one empty line before
   471  	//            (see go/printer/nodes.go, func linebreak).
   472  
   473  	use(x)
   474  
   475  	if x < x {
   476  
   477  		use(x)
   478  
   479  	} else {
   480  
   481  		use(x)
   482  
   483  	}
   484  }
   485  
   486  // Formatting around labels.
   487  func _() {
   488  L:
   489  }
   490  
   491  func _() {
   492  	// this comment should be indented
   493  L:	// no semicolon needed
   494  }
   495  
   496  func _() {
   497  	switch 0 {
   498  	case 0:
   499  	L0:
   500  		;	// semicolon required
   501  	case 1:
   502  	L1:
   503  		;	// semicolon required
   504  	default:
   505  	L2:	// no semicolon needed
   506  	}
   507  }
   508  
   509  func _() {
   510  	f()
   511  L1:
   512  	f()
   513  L2:
   514  	;
   515  L3:
   516  }
   517  
   518  func _() {
   519  	// this comment should be indented
   520  L:
   521  }
   522  
   523  func _() {
   524  L:
   525  	_ = 0
   526  }
   527  
   528  func _() {
   529  	// this comment should be indented
   530  L:
   531  	_ = 0
   532  }
   533  
   534  func _() {
   535  	for {
   536  	L1:
   537  		_ = 0
   538  	L2:
   539  		_ = 0
   540  	}
   541  }
   542  
   543  func _() {
   544  	// this comment should be indented
   545  	for {
   546  	L1:
   547  		_ = 0
   548  	L2:
   549  		_ = 0
   550  	}
   551  }
   552  
   553  func _() {
   554  	if true {
   555  		_ = 0
   556  	}
   557  	_ = 0	// the indentation here should not be affected by the long label name
   558  AnOverlongLabel:
   559  	_ = 0
   560  
   561  	if true {
   562  		_ = 0
   563  	}
   564  	_ = 0
   565  
   566  L:
   567  	_ = 0
   568  }
   569  
   570  func _() {
   571  	for {
   572  		goto L
   573  	}
   574  L:
   575  
   576  	MoreCode()
   577  }
   578  
   579  func _() {
   580  	for {
   581  		goto L
   582  	}
   583  L:	// A comment on the same line as the label, followed by a single empty line.
   584  	// Known bug: There may be more than one empty line before MoreCode()
   585  	//            (see go/printer/nodes.go, func linebreak).
   586  
   587  	MoreCode()
   588  }
   589  
   590  func _() {
   591  	for {
   592  		goto L
   593  	}
   594  L:
   595  
   596  	// There should be a single empty line before this comment.
   597  	MoreCode()
   598  }
   599  
   600  func _() {
   601  	for {
   602  		goto AVeryLongLabelThatShouldNotAffectFormatting
   603  	}
   604  AVeryLongLabelThatShouldNotAffectFormatting:
   605  	// There should be a single empty line after this comment.
   606  
   607  	// There should be a single empty line before this comment.
   608  	MoreCode()
   609  }
   610  
   611  // Formatting of empty statements.
   612  func _() {
   613  
   614  }
   615  
   616  func _() {
   617  }
   618  
   619  func _() {
   620  }
   621  
   622  func _() {
   623  	f()
   624  }
   625  
   626  func _() {
   627  L:
   628  	;
   629  }
   630  
   631  func _() {
   632  L:
   633  	;
   634  	f()
   635  }