| // 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. |