This test checks basic behavior of the textDocument/foldingRange, when the
editor only supports line folding.

-- capabilities.json --
{
	"textDocument": {
		"foldingRange": {
			"lineFoldingOnly": true
		}
	}
}
-- a.go --
package folding //@foldingrange(raw)

import (
	"fmt"
	_ "log"
	"sort"
	"time"
)

import _ "os"

// bar is a function.
// With a multiline doc comment.
func bar() string {
	/* This is a single line comment */
	switch {
	case true:
		if true {
			fmt.Println("true")
		} else {
			fmt.Println("false")
		}
	case false:
		fmt.Println("false")
	default:
		fmt.Println("default")
	}
	/* This is a multiline
	block
	comment */

	/* This is a multiline
	block
	comment */
	// Followed by another comment.
	_ = []int{
		1,
		2,
		3,
	}
	_ = [2]string{"d",
		"e",
	}
	_ = map[string]int{
		"a": 1,
		"b": 2,
		"c": 3,
	}
	type T struct {
		f string
		g int
		h string
	}
	_ = T{
		f: "j",
		g: 4,
		h: "i",
	}
	x, y := make(chan bool), make(chan bool)
	select {
	case val := <-x:
		if val {
			fmt.Println("true from x")
		} else {
			fmt.Println("false from x")
		}
	case <-y:
		fmt.Println("y")
	default:
		fmt.Println("default")
	}
	// This is a multiline comment
	// that is not a doc comment.
	return `
this string
is not indented`
}

func _() {
	slice := []int{1, 2, 3}
	sort.Slice(slice, func(i, j int) bool {
		a, b := slice[i], slice[j]
		return a < b
	})

	sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] })

	sort.Slice(
		slice,
		func(i, j int) bool {
			return slice[i] < slice[j]
		},
	)

	fmt.Println(
		1, 2, 3,
		4,
	)

	fmt.Println(1, 2, 3,
		4, 5, 6,
		7, 8, 9,
		10)

	// Call with ellipsis.
	_ = fmt.Errorf(
		"test %d %d",
		[]any{1, 2, 3}...,
	)

	// Check multiline string.
	fmt.Println(
		`multi
		line
		string
		`,
		1, 2, 3,
	)

	// Call without arguments.
	_ = time.Now()
}

func _(
	a int, b int,
	c int,
) {
}
-- @raw --
package folding //@foldingrange(raw)

import (<0 kind="imports">
	"fmt"
	_ "log"
	"sort"
	"time"</0>
)

import _ "os"

// bar is a function.<1 kind="comment">
// With a multiline doc comment.</1>
func bar() string {<2 kind="">
	/* This is a single line comment */
	switch {<3 kind="">
	case true:<4 kind="">
		if true {<5 kind="">
			fmt.Println("true")</5>
		} else {<6 kind="">
			fmt.Println("false")</6>
		}</4>
	case false:<7 kind="">
		fmt.Println("false")</7>
	default:<8 kind="">
		fmt.Println("default")</3></8>
	}
	/* This is a multiline<9 kind="comment">
	block
	comment */</9>

	/* This is a multiline<10 kind="comment">
	block
	comment */
	// Followed by another comment.</10>
	_ = []int{<11 kind="">
		1,
		2,
		3,</11>
	}
	_ = [2]string{"d",
		"e",
	}
	_ = map[string]int{<12 kind="">
		"a": 1,
		"b": 2,
		"c": 3,</12>
	}
	type T struct {<13 kind="">
		f string
		g int
		h string</13>
	}
	_ = T{<14 kind="">
		f: "j",
		g: 4,
		h: "i",</14>
	}
	x, y := make(chan bool), make(chan bool)
	select {<15 kind="">
	case val := <-x:<16 kind="">
		if val {<17 kind="">
			fmt.Println("true from x")</17>
		} else {<18 kind="">
			fmt.Println("false from x")</18>
		}</16>
	case <-y:<19 kind="">
		fmt.Println("y")</19>
	default:<20 kind="">
		fmt.Println("default")</15></20>
	}
	// This is a multiline comment<21 kind="comment">
	// that is not a doc comment.</21>
	return <22 kind="">`
this string
is not indented`</2></22>
}

func _() {<23 kind="">
	slice := []int{1, 2, 3}
	sort.Slice(slice, func(i, j int) bool {<24 kind="">
		a, b := slice[i], slice[j]
		return a < b</24>
	})

	sort.Slice(slice, func(i, j int) bool { return slice[i] < slice[j] })

	sort.Slice(<25 kind="">
		slice,
		func(i, j int) bool {<26 kind="">
			return slice[i] < slice[j]</26>
		},</25>
	)

	fmt.Println(<27 kind="">
		1, 2, 3,
		4,</27>
	)

	fmt.Println(1, 2, 3,
		4, 5, 6,
		7, 8, 9,
		10)

	// Call with ellipsis.
	_ = fmt.Errorf(<28 kind="">
		"test %d %d",
		[]any{1, 2, 3}...,</28>
	)

	// Check multiline string.
	fmt.Println(<29 kind="">
		<30 kind="">`multi
		line
		string
		`</30>,
		1, 2, 3,</29>
	)

	// Call without arguments.
	_ = time.Now()</23>
}

func _(<31 kind="">
	a int, b int,
	c int,</31>
) {
}
