2019-11-10 19:07:16 -05:00

213 lines
3.7 KiB
Go

//args: -Ewsl
//config: linters-settings.wsl.tests=1
package testdata
import (
"context"
"fmt"
)
func main() {
var (
y = 0
)
if y < 1 { // ERROR "if statements should only be cuddled with assignments"
fmt.Println("tight")
}
thisIsNotUsedInIf := true
if 2 > 1 { // ERROR "if statements should only be cuddled with assignments used in the if statement itself"
return
}
one := 1
two := 2
three := 3
if three == 3 { // ERROR "only one cuddle assignment allowed before if statement"
fmt.Println("too many cuddled assignments", one, two, thisIsNotUsedInIf)
}
var a = "a"
var b = "b" // ERROR "declarations should never be cuddled"
if true {
return
}
if false { // ERROR "if statements should only be cuddled with assignments"
return
}
for i := range make([]int, 10) {
fmt.Println(i)
fmt.Println(i + i)
continue // ERROR "branch statements should not be cuddled if block has more than two lines"
}
assignOne := a
fmt.Println(assignOne)
assignTwo := b // ERROR "assignments should only be cuddled with other assignments"
fmt.Println(assignTwo)
_, cf1 := context.WithCancel(context.Background())
_, cf2 := context.WithCancel(context.Background())
defer cf1() // ERROR "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 { // ERROR "if statements should only be cuddled with assignments used in the if statement itself"
panic(notErr)
}
}
func multiline(s ...string) error {
return nil
}
func f1() int {
x := 1
return x
}
func f2() int {
x := 1
y := 3
return x + y // ERROR "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} { // ERROR "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 { // ERROR "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 { // ERROR "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) { // ERROR "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")
}
}