blob: 8cba7e5a2cd4090bb132477e6ffcbb39011165e5 [file] [log] [blame]
// 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 */
}
func _() {
/* freestanding comment
aligned line
*/
}
func _() {
/* freestanding comment
aligned line
*/
}
func _() {
/* freestanding comment
aligned line */
}
func _() {
/* freestanding comment
aligned line
*/
}
func _() {
/* freestanding comment
aligned line
*/
}
func _() {
/* freestanding comment
aligned line */
}
func _() {
/*
freestanding comment
aligned line
*/
}
func _() {
/*
freestanding comment
aligned line
*/
}
func _() {
/*
freestanding comment
aligned line */
}
func _() {
/*
freestanding comment
aligned line
*/
}
func _() {
/*
freestanding comment
aligned line
*/
}
func _() {
/*
freestanding comment
aligned line */
}
/*
* line
* of
* stars
*/
/* another line
* of
* stars */
/* and another line
* of
* stars */
/* a line of
* stars */
/* and another line of
* stars */
/* a line of stars
*/
/* and another line of
*/
/* a line of stars
*/
/* and another line of
*/
/*
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.