213 lines
3.7 KiB
Go
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")
|
|
}
|
|
}
|