github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/go/printer/testdata/comments.input (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 // This is a package for testing comment placement by go/printer. 6 // 7 package main 8 9 import "fmt" // fmt 10 11 const c0 = 0 // zero 12 const ( 13 c1 = iota // c1 14 c2 // c2 15 ) 16 17 // Alignment of comments in declarations> 18 const ( 19 _ T = iota // comment 20 _ // comment 21 _ // comment 22 _ = iota+10 23 _ // comments 24 25 _ = 10 // comment 26 _ T = 20 // comment 27 ) 28 29 const ( 30 _____ = iota // foo 31 _ // bar 32 _ = 0 // bal 33 _ // bat 34 ) 35 36 const ( 37 _ T = iota // comment 38 _ // comment 39 _ // comment 40 _ = iota + 10 41 _ // comment 42 _ = 10 43 _ = 20 // comment 44 _ T = 0 // comment 45 ) 46 47 // The SZ struct; it is empty. 48 type SZ struct {} 49 50 // The S0 struct; no field is exported. 51 type S0 struct { 52 int 53 x, y, z int // 3 unexported fields 54 } 55 56 // The S1 struct; some fields are not exported. 57 type S1 struct { 58 S0 59 A, B, C float // 3 exported fields 60 D, b, c int // 2 unexported fields 61 } 62 63 // The S2 struct; all fields are exported. 64 type S2 struct { 65 S1 66 A, B, C float // 3 exported fields 67 } 68 69 // The IZ interface; it is empty. 70 type SZ interface {} 71 72 // The I0 interface; no method is exported. 73 type I0 interface { 74 f(x int) int // unexported method 75 } 76 77 // The I1 interface; some methods are not exported. 78 type I1 interface { 79 I0 80 F(x float) float // exported methods 81 g(x int) int // unexported method 82 } 83 84 // The I2 interface; all methods are exported. 85 type I2 interface { 86 I0 87 F(x float) float // exported method 88 G(x float) float // exported method 89 } 90 91 // The S3 struct; all comments except for the last one must appear in the export. 92 type S3 struct { 93 // lead comment for F1 94 F1 int // line comment for F1 95 // lead comment for F2 96 F2 int // line comment for F2 97 f3 int // f3 is not exported 98 } 99 100 // This comment group should be separated 101 // with a newline from the next comment 102 // group. 103 104 // This comment should NOT be associated with the next declaration. 105 106 var x int // x 107 var () 108 109 110 // This comment SHOULD be associated with f0. 111 func f0() { 112 const pi = 3.14 // pi 113 var s1 struct {} /* an empty struct */ /* foo */ 114 // a struct constructor 115 // -------------------- 116 var s2 struct {} = struct {}{} 117 x := pi 118 } 119 // 120 // This comment should be associated with f1, with one blank line before the comment. 121 // 122 func f1() { 123 f0() 124 /* 1 */ 125 // 2 126 /* 3 */ 127 /* 4 */ 128 f0() 129 } 130 131 132 func _() { 133 // this comment should be properly indented 134 } 135 136 137 func _(x int) int { 138 if x < 0 { // the tab printed before this comment's // must not affect the remaining lines 139 return -x // this statement should be properly indented 140 } 141 if x < 0 { /* the tab printed before this comment's /* must not affect the remaining lines */ 142 return -x // this statement should be properly indented 143 } 144 return x 145 } 146 147 148 func typeswitch(x interface{}) { 149 switch v := x.(type) { 150 case bool, int, float: 151 case string: 152 default: 153 } 154 155 switch x.(type) { 156 } 157 158 switch v0, ok := x.(int); v := x.(type) { 159 } 160 161 switch v0, ok := x.(int); x.(type) { 162 case byte: // this comment should be on the same line as the keyword 163 // this comment should be normally indented 164 _ = 0 165 case bool, int, float: 166 // this comment should be indented 167 case string: 168 default: 169 // this comment should be indented 170 } 171 // this comment should not be indented 172 } 173 174 // 175 // Indentation of comments after possibly indented multi-line constructs 176 // (test cases for issue 3147). 177 // 178 179 func _() { 180 s := 1 + 181 2 182 // should be indented like s 183 } 184 185 func _() { 186 s := 1 + 187 2 // comment 188 // should be indented like s 189 } 190 191 func _() { 192 s := 1 + 193 2 // comment 194 // should be indented like s 195 _ = 0 196 } 197 198 func _() { 199 s := 1 + 200 2 201 // should be indented like s 202 _ = 0 203 } 204 205 func _() { 206 s := 1 + 207 2 208 209 // should be indented like s 210 } 211 212 func _() { 213 s := 1 + 214 2 // comment 215 216 // should be indented like s 217 } 218 219 func _() { 220 s := 1 + 221 2 // comment 222 223 // should be indented like s 224 _ = 0 225 } 226 227 func _() { 228 s := 1 + 229 2 230 231 // should be indented like s 232 _ = 0 233 } 234 235 // Test case from issue 3147. 236 func f() { 237 templateText := "a" + // A 238 "b" + // B 239 "c" // C 240 241 // should be aligned with f() 242 f() 243 } 244 245 // Modified test case from issue 3147. 246 func f() { 247 templateText := "a" + // A 248 "b" + // B 249 "c" // C 250 251 // may not be aligned with f() (source is not aligned) 252 f() 253 } 254 255 // 256 // Test cases for alignment of lines in general comments. 257 // 258 259 func _() { 260 /* freestanding comment 261 aligned line 262 aligned line 263 */ 264 } 265 266 func _() { 267 /* freestanding comment 268 aligned line 269 aligned line 270 */ 271 } 272 273 func _() { 274 /* freestanding comment 275 aligned line 276 aligned line */ 277 } 278 279 func _() { 280 /* freestanding comment 281 aligned line 282 aligned line 283 */ 284 } 285 286 func _() { 287 /* freestanding comment 288 aligned line 289 aligned line 290 */ 291 } 292 293 func _() { 294 /* freestanding comment 295 aligned line 296 aligned line */ 297 } 298 299 300 func _() { 301 /* 302 freestanding comment 303 aligned line 304 aligned line 305 */ 306 } 307 308 func _() { 309 /* 310 freestanding comment 311 aligned line 312 aligned line 313 */ 314 } 315 316 func _() { 317 /* 318 freestanding comment 319 aligned line 320 aligned line */ 321 } 322 323 func _() { 324 /* 325 freestanding comment 326 aligned line 327 aligned line 328 */ 329 } 330 331 func _() { 332 /* 333 freestanding comment 334 aligned line 335 aligned line 336 */ 337 } 338 339 func _() { 340 /* 341 freestanding comment 342 aligned line 343 aligned line */ 344 } 345 346 func _() { 347 /* freestanding comment 348 aligned line 349 */ 350 } 351 352 func _() { 353 /* freestanding comment 354 aligned line 355 */ 356 } 357 358 func _() { 359 /* freestanding comment 360 aligned line */ 361 } 362 363 func _() { 364 /* freestanding comment 365 aligned line 366 */ 367 } 368 369 func _() { 370 /* freestanding comment 371 aligned line 372 */ 373 } 374 375 func _() { 376 /* freestanding comment 377 aligned line */ 378 } 379 380 381 func _() { 382 /* 383 freestanding comment 384 aligned line 385 */ 386 } 387 388 func _() { 389 /* 390 freestanding comment 391 aligned line 392 */ 393 } 394 395 func _() { 396 /* 397 freestanding comment 398 aligned line */ 399 } 400 401 func _() { 402 /* 403 freestanding comment 404 aligned line 405 */ 406 } 407 408 func _() { 409 /* 410 freestanding comment 411 aligned line 412 */ 413 } 414 415 func _() { 416 /* 417 freestanding comment 418 aligned line */ 419 } 420 421 /* 422 * line 423 * of 424 * stars 425 */ 426 427 /* another line 428 * of 429 * stars */ 430 431 /* and another line 432 * of 433 * stars */ 434 435 /* a line of 436 * stars */ 437 438 /* and another line of 439 * stars */ 440 441 /* a line of stars 442 */ 443 444 /* and another line of 445 */ 446 447 /* a line of stars 448 */ 449 450 /* and another line of 451 */ 452 453 /* 454 aligned in middle 455 here 456 not here 457 */ 458 459 /* 460 blank line in middle: 461 462 with no leading spaces on blank line. 463 */ 464 465 /* 466 aligned in middle 467 here 468 not here 469 */ 470 471 /* 472 blank line in middle: 473 474 with no leading spaces on blank line. 475 */ 476 477 func _() { 478 /* 479 * line 480 * of 481 * stars 482 */ 483 484 /* 485 aligned in middle 486 here 487 not here 488 */ 489 490 /* 491 blank line in middle: 492 493 with no leading spaces on blank line. 494 */ 495 } 496 497 498 // Some interesting interspersed comments. 499 // See below for more common cases. 500 func _(/* this */x/* is *//* an */ int) { 501 } 502 503 func _(/* no params */) {} 504 505 func _() { 506 f(/* no args */) 507 } 508 509 func (/* comment1 */ T /* comment2 */) _() {} 510 511 func _() { /* one-line functions with comments are formatted as multi-line functions */ } 512 513 func _() { 514 _ = 0 515 /* closing curly brace should be on new line */ } 516 517 func _() { 518 _ = []int{0, 1 /* don't introduce a newline after this comment - was issue 1365 */} 519 } 520 521 // Test cases from issue 1542: 522 // Comments must not be placed before commas and cause invalid programs. 523 func _() { 524 var a = []int{1, 2, /*jasldf*/ 525 } 526 _ = a 527 } 528 529 func _() { 530 var a = []int{1, 2, /*jasldf 531 */ 532 } 533 _ = a 534 } 535 536 func _() { 537 var a = []int{1, 2, // jasldf 538 } 539 _ = a 540 } 541 542 // Comments immediately adjacent to punctuation followed by a newline 543 // remain after the punctuation (looks better and permits alignment of 544 // comments). 545 func _() { 546 _ = T{ 547 1, // comment after comma 548 2, /* comment after comma */ 549 3 , // comment after comma 550 } 551 _ = T{ 552 1 ,// comment after comma 553 2 ,/* comment after comma */ 554 3,// comment after comma 555 } 556 _ = T{ 557 /* comment before literal */1, 558 2/* comment before comma - ok to move after comma */, 559 3 /* comment before comma - ok to move after comma */ , 560 } 561 562 for 563 i=0;// comment after semicolon 564 i<9;/* comment after semicolon */ 565 i++{// comment after opening curly brace 566 } 567 568 // TODO(gri) the last comment in this example should be aligned */ 569 for 570 i=0;// comment after semicolon 571 i<9/* comment before semicolon - ok to move after semicolon */; 572 i++ /* comment before opening curly brace */ { 573 } 574 } 575 576 // If there is no newline following punctuation, commas move before the punctuation. 577 // This way, commas interspersed in lists stay with the respective expression. 578 func f(x/* comment */, y int, z int /* comment */, u, v, w int /* comment */) { 579 f(x /* comment */, y) 580 f(x /* comment */, 581 y) 582 f( 583 x /* comment */, 584 ) 585 } 586 587 func g( 588 x int /* comment */, 589 ) {} 590 591 type _ struct { 592 a, b /* comment */, c int 593 } 594 595 type _ struct { a, b /* comment */, c int } 596 597 func _() { 598 for a /* comment */, b := range x { 599 } 600 } 601 602 // Print line directives correctly. 603 604 // The following is a legal line directive. 605 //line foo:1 606 func _() { 607 _ = 0 608 // The following is a legal line directive. It must not be indented: 609 //line foo:2 610 _ = 1 611 612 // The following is not a legal line directive (it doesn't start in column 1): 613 //line foo:2 614 _ = 2 615 616 // The following is not a legal line directive (negative line number): 617 //line foo:-3 618 _ = 3 619 } 620 621 // Line comments with tabs 622 func _() { 623 var finput *bufio.Reader // input file 624 var stderr *bufio.Writer 625 var ftable *bufio.Writer // y.go file 626 var foutput *bufio.Writer // y.output file 627 628 var oflag string // -o [y.go] - y.go file 629 var vflag string // -v [y.output] - y.output file 630 var lflag bool // -l - disable line directives 631 } 632 633 // Trailing white space in comments should be trimmed 634 func _() { 635 // This comment has 4 blanks following that should be trimmed: 636 /* Each line of this comment has blanks or tabs following that should be trimmed: 637 line 2: 638 line 3: 639 */ 640 } 641 642 /* This comment is the last entry in this file. It must be printed and should be followed by a newline */