| 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, |
| ) { |
| } |
| |
| func _() { // comment |
| |
| } |
| |
| -- @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>} |
| |
| func _() {<54 kind=""> // comment |
| |
| </54>} |
| |