// 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 statements var expr bool func use(x interface{}) {} // Formatting of if-statement headers. func _() { if { } if { } // no semicolon printed if expr { } if expr { } // no semicolon printed if expr { } // no parens printed if expr { } // no semicolon and parens printed if x := expr; { use(x) } if x := expr; expr { use(x) } } // Formatting of switch-statement headers. func _() { switch { } switch { } // no semicolon printed switch expr { } switch expr { } // no semicolon printed switch expr { } // no parens printed switch expr { } // no semicolon and parens printed switch x := expr; { default: use( x) } switch x := expr; expr { default: use(x) } } // Formatting of switch statement bodies. func _() { switch { } switch x := 0; x { case 1: use(x); use(x); // followed by an empty line case 2: // followed by an empty line use(x) // followed by an empty line case 3: // no empty lines use(x); use(x); } switch x { case 0: use(x) case 1: // this comment should have no effect on the previous or next line use(x) } switch x := 0; x { case 1: x = 0 // this comment should be indented case 2: x = 0 // this comment should not be indented, it is aligned with the next case case 3: x = 0 /* indented comment aligned aligned */ // bla /* and more */ case 4: x = 0 /* not indented comment aligned aligned */ // bla /* and more */ case 5: } } // Formatting of for-statement headers. func _() { for { } for expr { } for expr { } // no parens printed for { } // no semicolons printed for x := expr; ; { use(x) } for expr { } // no semicolons printed for expr { } // no semicolons and parens printed for ; ; expr = false { } for x := expr; expr; { use(x) } for x := expr; ; expr = false { use(x) } for ; expr; expr = false { } for x := expr; expr; expr = false { use(x) } for x := range []int{} { use(x) } } // Extra empty lines inside functions. Do respect source code line // breaks between statement boundaries but print at most one empty // line at a time. func _() { const _ = 0; const _ = 1; type _ int; type _ float; var _ = 0; var x = 1; // Each use(x) call below should have at most one empty line before and after. use(x); if x < x { use(x) } else { use(x) } } // Formatting around labels. func _() { L: } func _() { // this comment should be indented L: } func _() { L: _ = 0 } func _() { // this comment should be indented L: _ = 0 } func _() { for { L1: _ = 0; L2: _ = 0; } } func _() { // this comment should be indented for { L1: _ = 0; L2: _ = 0; } } func _() { if { _ = 0 } _ = 0; // the indentation here should not be affected by the long label name AnOverlongLabel: _ = 0; if { _ = 0 } _ = 0; L: _ = 0; }