// 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. // This is a package for testing comment placement by go/printer. // package main import "fmt" // fmt const c0 = 0; // zero const ( c1 = iota; // c1 c2; // c2 ) // The SZ struct; it is empty. type SZ struct {} // The S0 struct; no field is exported. type S0 struct { int; x, y, z int; // 3 unexported fields } // The S1 struct; some fields are not exported. type S1 struct { S0; A, B, C float; // 3 exported fields D, b, c int; // 2 unexported fields } // The S2 struct; all fields are exported. type S2 struct { S1; A, B, C float; // 3 exported fields } // The IZ interface; it is empty. type SZ interface {} // The I0 interface; no method is exported. type I0 interface { f(x int) int; // unexported method } // The I1 interface; some methods are not exported. type I1 interface { I0; F(x float) float; // exported methods g(x int) int; // unexported method } // The I2 interface; all methods are exported. type I2 interface { I0; F(x float) float; // exported method G(x float) float; // exported method } // This comment group should be separated // with a newline from the next comment // group. // This comment should NOT be associated with the next declaration. var x int; // x var () // This comment SHOULD be associated with the next declaration. func f0() { const pi = 3.14; // pi var s1 struct {} /* an empty struct */ /* foo */ // a struct constructor // -------------------- var s2 struct {} = struct {}{}; x := pi; } // // NO SPACE HERE // func f1() { f0(); /* 1 */ // 2 /* 3 */ /* 4 */ f0(); } func _() { // this comment should be properly indented } func abs(x int) int { if x < 0 { // the tab printed before this comment's // must not affect the remaining lines return -x; // this statement should be properly indented } return x; } func typeswitch(x interface{}) { switch v := x.(type) { case bool, int, float: case string: default: } switch x.(type) { } switch v0, ok := x.(int); v := x.(type) { } switch v0, ok := x.(int); x.(type) { case byte: // this comment should be on the same line as the keyword // this comment should be normally indented _ = 0; case bool, int, float: // this comment should be indented case string: default: // this comment should be indented } // this comment should not be indented } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } func _() { /* freestanding comment aligned line aligned line */ } /* * line * of * stars */ /* another line * of * stars */ /* and another line * of * stars */ /* aligned in middle here not here */ /* blank line in middle: with no leading spaces on blank line. */ /* aligned in middle here not here */ /* blank line in middle: with no leading spaces on blank line. */ func _() { /* * line * of * stars */ /* aligned in middle here not here */ /* blank line in middle: with no leading spaces on blank line. */ } // Some interesting interspersed comments func _(/* this */x/* is *//* an */ int) { } // Line comments with tabs func _() { var finput *bufio.Reader; // input file var stderr *bufio.Writer; var ftable *bufio.Writer; // y.go file var foutput *bufio.Writer; // y.output file var oflag string; // -o [y.go] - y.go file var vflag string; // -v [y.output] - y.output file var lflag bool; // -l - disable line directives } // This comment is the last entry in this file. It must be printed.