220 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| //golangcitest:args -Ewsl
 | |
| //golangcitest:config_path testdata/configs/wsl.yml
 | |
| package testdata
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	var (
 | |
| 		y = 0
 | |
| 	)
 | |
| 	if y < 1 { // want "if statements should only be cuddled with assignments"
 | |
| 		fmt.Println("tight")
 | |
| 	}
 | |
| 
 | |
| 	thisIsNotUsedInIf := true
 | |
| 	if 2 > 1 { // want "if statements should only be cuddled with assignments used in the if statement itself"
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	one := 1
 | |
| 	two := 2
 | |
| 	three := 3
 | |
| 	if three == 3 { // want "only one cuddle assignment allowed before if statement"
 | |
| 		fmt.Println("too many cuddled assignments", one, two, thisIsNotUsedInIf)
 | |
| 	}
 | |
| 
 | |
| 	var a = "a"
 | |
| 	var b = "b" // want "declarations should never be cuddled"
 | |
| 
 | |
| 	if true {
 | |
| 		return
 | |
| 	}
 | |
| 	if false { // want "if statements should only be cuddled with assignments"
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	for i := range make([]int, 10) {
 | |
| 		fmt.Println(i)
 | |
| 		fmt.Println(i + i)
 | |
| 		continue // want "branch statements should not be cuddled if block has more than two lines"
 | |
| 	}
 | |
| 
 | |
| 	assignOne := a
 | |
| 	fmt.Println(assignOne)
 | |
| 	assignTwo := b // want "assignments should only be cuddled with other assignments"
 | |
| 	fmt.Println(assignTwo)
 | |
| 
 | |
| 	_, cf1 := context.WithCancel(context.Background())
 | |
| 	_, cf2 := context.WithCancel(context.Background())
 | |
| 	defer cf1() // want "only one cuddle assignment allowed before defer statement"
 | |
| 	defer cf2()
 | |
| 
 | |
| 	err := multiline(
 | |
| 		"spanning",
 | |
| 		"multiple",
 | |
| 	)
 | |
| 	if err != nil {
 | |
| 		panic(err)
 | |
| 	}
 | |
| 
 | |
| 	notErr := multiline(
 | |
| 		"spanning",
 | |
| 		"multiple",
 | |
| 	)
 | |
| 	if err != nil { // want "if statements should only be cuddled with assignments used in the if statement itself"
 | |
| 		panic("not from the line above")
 | |
| 	}
 | |
| 
 | |
| 	// This is OK since we use a variable from the line above, even if we don't
 | |
| 	// check it with the if.
 | |
| 	xx := notErr
 | |
| 	if err != nil {
 | |
| 		panic(xx)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func multiline(s ...string) error {
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func f1() int {
 | |
| 	x := 1
 | |
| 	return x
 | |
| }
 | |
| 
 | |
| func f2() int {
 | |
| 	x := 1
 | |
| 	y := 3
 | |
| 	return x + y // want "return statements should not be cuddled if block has more than two lines"
 | |
| }
 | |
| 
 | |
| func f3() int {
 | |
| 	sum := 0
 | |
| 	for _, v := range []int{2, 4, 8} {
 | |
| 		sum += v
 | |
| 	}
 | |
| 
 | |
| 	notSum := 0
 | |
| 	for _, v := range []int{1, 2, 4} { // want "ranges should only be cuddled with assignments used in the iteration"
 | |
| 		sum += v
 | |
| 	}
 | |
| 
 | |
| 	return sum + notSum
 | |
| }
 | |
| 
 | |
| func onelineShouldNotError() error { return nil }
 | |
| 
 | |
| func multilineCase() {
 | |
| 	// Multiline cases
 | |
| 	switch {
 | |
| 	case true,
 | |
| 		false:
 | |
| 		fmt.Println("ok")
 | |
| 	case false ||
 | |
| 		true:
 | |
| 		fmt.Println("ok")
 | |
| 	case true,
 | |
| 		false:
 | |
| 		fmt.Println("ok")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func sliceExpr() {
 | |
| 	// Index- and slice expressions.
 | |
| 	var aSlice = []int{1, 2, 3}
 | |
| 
 | |
| 	start := 2
 | |
| 	if v := aSlice[start]; v == 1 {
 | |
| 		fmt.Println("ok")
 | |
| 	}
 | |
| 
 | |
| 	notOk := 1
 | |
| 	if v := aSlice[start]; v == 1 { // want "if statements should only be cuddled with assignments used in the if statement itself"
 | |
| 		fmt.Println("notOk")
 | |
| 		fmt.Println(notOk)
 | |
| 	}
 | |
| 
 | |
| 	end := 2
 | |
| 	if len(aSlice[start:end]) > 2 {
 | |
| 		fmt.Println("ok")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func indexExpr() {
 | |
| 	var aMap = map[string]struct{}{"key": {}}
 | |
| 
 | |
| 	key := "key"
 | |
| 	if k, ok := aMap[key]; ok {
 | |
| 		fmt.Println(k)
 | |
| 	}
 | |
| 
 | |
| 	xxx := "xxx"
 | |
| 	if _, ok := aMap[key]; ok { // want "if statements should only be cuddled with assignments used in the if statement itself"
 | |
| 		fmt.Println("not ok")
 | |
| 		fmt.Println(xxx)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func allowTrailing(i int) {
 | |
| 	switch i {
 | |
| 	case 1:
 | |
| 		fmt.Println("one")
 | |
| 
 | |
| 	case 2:
 | |
| 		fmt.Println("two")
 | |
| 		// Comments OK too!
 | |
| 	case 3:
 | |
| 		fmt.Println("three")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ExampleSomeOutput simulates an example function.
 | |
| func ExampleSomeOutput() {
 | |
| 	fmt.Println("Hello, world")
 | |
| 
 | |
| 	// Output:
 | |
| 	// Hello, world
 | |
| }
 | |
| 
 | |
| func IncDecStmt() {
 | |
| 	counter := 0
 | |
| 	for range make([]int, 5) {
 | |
| 		counter++
 | |
| 	}
 | |
| 
 | |
| 	type t struct {
 | |
| 		counter int
 | |
| 	}
 | |
| 
 | |
| 	x := t{5}
 | |
| 
 | |
| 	x.counter--
 | |
| 	if x.counter > 0 {
 | |
| 		fmt.Println("not yet 0")
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func AnonymousBlock() {
 | |
| 	func(a, b int) { // want "block should not start with a whitespace"
 | |
| 
 | |
| 		fmt.Println(a + b)
 | |
| 	}(1, 1)
 | |
| }
 | |
| 
 | |
| func MultilineComment() {
 | |
| 	if true {
 | |
| 		/*
 | |
| 			Ok to start block with
 | |
| 			a
 | |
| 			long
 | |
| 			multiline
 | |
| 			cmoment
 | |
| 		*/
 | |
| 		fmt.Println("true")
 | |
| 	}
 | |
| }
 | 
