This test checks basic behavior of textDocument/foldingRange.
-- 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() (<2 kind="">
string,
</2>) {<3 kind="">
/* This is a single line comment */
switch {<4 kind="">
case true:<5 kind="">
if true {<6 kind="">
fmt.Println(<7 kind="">"true"</7>)
</6>} else {<8 kind="">
fmt.Println(<9 kind="">"false"</9>)
</8>}</5>
case false:<10 kind="">
fmt.Println(<11 kind="">"false"</11>)</10>
default:<12 kind="">
fmt.Println(<13 kind="">"default"</13>)</12>
</4>}
/* This is a multiline<14 kind="comment">
block
comment */</14>
/* This is a multiline<15 kind="comment">
block
comment */
// Followed by another comment.</15>
_ = []int{<16 kind="">
1,
2,
3,
</16>}
_ = [2]string{<17 kind="">"d",
"e",
</17>}
_ = map[string]int{<18 kind="">
"a": 1,
"b": 2,
"c": 3,
</18>}
type T struct {<19 kind="">
f string
g int
h string
</19>}
_ = T{<20 kind="">
f: "j",
g: 4,
h: "i",
</20>}
x, y := make(<21 kind="">chan bool</21>), make(<22 kind="">chan bool</22>)
select {<23 kind="">
case val := <-x:<24 kind="">
if val {<25 kind="">
fmt.Println(<26 kind="">"true from x"</26>)
</25>} else {<27 kind="">
fmt.Println(<28 kind="">"false from x"</28>)
</27>}</24>
case <-y:<29 kind="">
fmt.Println(<30 kind="">"y"</30>)</29>
default:<31 kind="">
fmt.Println(<32 kind="">"default"</32>)</31>
</23>}
// This is a multiline comment<33 kind="comment">
// that is not a doc comment.</33>
return <34 kind="">`
this string
is not indented`</34>
</3>}
func _() {<35 kind="">
slice := []int{<36 kind="">1, 2, 3</36>}
sort.Slice(<37 kind="">slice, func(<38 kind="">i, j int</38>) bool {<39 kind="">
a, b := slice[i], slice[j]
return a < b
</39>}</37>)
sort.Slice(<40 kind="">slice, func(<41 kind="">i, j int</41>) bool {<42 kind=""> return slice[i] < slice[j] </42>}</40>)
sort.Slice(<43 kind="">
slice,
func(<44 kind="">i, j int</44>) bool {<45 kind="">
return slice[i] < slice[j]
</45>},
</43>)
fmt.Println(<46 kind="">
1, 2, 3,
4,
</46>)
fmt.Println(<47 kind="">1, 2, 3,
4, 5, 6,
7, 8, 9,
10</47>)
// Call with ellipsis.
_ = fmt.Errorf(<48 kind="">
"test %d %d",
[]any{<49 kind="">1, 2, 3</49>}...,
</48>)
// Check multiline string.
fmt.Println(<50 kind="">
<51 kind="">`multi
line
string
`</51>,
1, 2, 3,
</50>)
// Call without arguments.
_ = time.Now()
</35>}
func _(<52 kind="">
a int, b int,
c int,
</52>) {<53 kind="">
</53>}