This test checks basic functionality of the textDocument/highlight request.
-- highlights.go --
package highlights
import (
"fmt" //@hiloc(fmtImp, "\"fmt\"", text),highlightall(fmtImp, fmt1, fmt2, fmt3, fmt4)
h2 "net/http" //@hiloc(hImp, "h2", text),highlightall(hImp, hUse)
"sort"
)
type F struct{ bar int } //@hiloc(barDeclaration, "bar", text),highlightall(barDeclaration, bar1, bar2, bar3)
func _() F {
return F{
bar: 123, //@hiloc(bar1, "bar", write)
}
}
var foo = F{bar: 52} //@hiloc(fooDeclaration, "foo", write),hiloc(bar2, "bar", write),highlightall(fooDeclaration, fooUse)
func Print() { //@hiloc(printFunc, "Print", text),highlightall(printFunc, printTest)
_ = h2.Client{} //@hiloc(hUse, "h2", text)
fmt.Println(foo) //@hiloc(fooUse, "foo", read),hiloc(fmt1, "fmt", text)
fmt.Print("yo") //@hiloc(printSep, "Print", text),highlightall(printSep, print1, print2),hiloc(fmt2, "fmt", text)
}
func (x *F) Inc() { //@hiloc(xRightDecl, "x", text),hiloc(xLeftDecl, " *", text),highlightall(xRightDecl, xUse),highlight(xLeftDecl, xRightDecl, xUse)
x.bar++ //@hiloc(xUse, "x", read),hiloc(bar3, "bar", write)
}
func testFunctions() {
fmt.Print("main start") //@hiloc(print1, "Print", text),hiloc(fmt3, "fmt", text)
fmt.Print("ok") //@hiloc(print2, "Print", text),hiloc(fmt4, "fmt", text)
Print() //@hiloc(printTest, "Print", text)
}
// DocumentHighlight is undefined, so its uses below are type errors.
// Nevertheless, document highlighting should still work.
//@diag(locdoc1, re"undefined|undeclared"), diag(locdoc2, re"undefined|undeclared"), diag(locdoc3, re"undefined|undeclared")
func toProtocolHighlight(rngs []int) []DocumentHighlight { //@loc(locdoc1, "DocumentHighlight"), hiloc(doc1, "DocumentHighlight", text),hiloc(docRet1, "[]DocumentHighlight", text),highlight(doc1, docRet1, doc1, doc2, doc3, result)
result := make([]DocumentHighlight, 0, len(rngs)) //@loc(locdoc2, "DocumentHighlight"), hiloc(doc2, "DocumentHighlight", text),highlight(doc2, doc1, doc2, doc3)
for _, rng := range rngs {
result = append(result, DocumentHighlight{ //@loc(locdoc3, "DocumentHighlight"), hiloc(doc3, "DocumentHighlight", text),highlight(doc3, doc1, doc2, doc3)
Range: rng,
})
}
return result //@hiloc(result, "result", text)
}
func testForLoops() {
for i := 0; i < 10; i++ { //@hiloc(forDecl1, "for", text),highlightall(forDecl1, brk1, cont1)
if i > 8 {
break //@hiloc(brk1, "break", text)
}
if i < 2 {
for j := 1; j < 10; j++ { //@hiloc(forDecl2, "for", text),highlightall(forDecl2, cont2)
if j < 3 {
for k := 1; k < 10; k++ { //@hiloc(forDecl3, "for", text),highlightall(forDecl3, cont3)
if k < 3 {
continue //@hiloc(cont3, "continue", text)
}
}
continue //@hiloc(cont2, "continue", text)
}
}
continue //@hiloc(cont1, "continue", text)
}
}
arr := []int{}
for i := range arr { //@hiloc(forDecl4, "for", text),highlightall(forDecl4, brk4, cont4)
if i > 8 {
break //@hiloc(brk4, "break", text)
}
if i < 4 {
continue //@hiloc(cont4, "continue", text)
}
}
Outer:
for i := 0; i < 10; i++ { //@hiloc(forDecl5, "for", text),highlightall(forDecl5, brk5, brk6, brk8)
break //@hiloc(brk5, "break", text)
for { //@hiloc(forDecl6, "for", text),highlightall(forDecl6, cont5), diag("for", re"unreachable")
if i == 1 {
break Outer //@hiloc(brk6, "break Outer", text)
}
switch i { //@hiloc(switch1, "switch", text),highlightall(switch1, brk7)
case 5:
break //@hiloc(brk7, "break", text)
case 6:
continue //@hiloc(cont5, "continue", text)
case 7:
break Outer //@hiloc(brk8, "break Outer", text)
}
}
}
}
func testSwitch() {
var i, j int
L1:
for { //@hiloc(forDecl7, "for", text),highlightall(forDecl7, brk10, cont6)
L2:
switch i { //@hiloc(switch2, "switch", text),highlightall(switch2, brk11, brk12, brk13)
case 1:
switch j { //@hiloc(switch3, "switch", text),highlightall(switch3, brk9)
case 1:
break //@hiloc(brk9, "break", text)
case 2:
break L1 //@hiloc(brk10, "break L1", text)
case 3:
break L2 //@hiloc(brk11, "break L2", text)
default:
continue //@hiloc(cont6, "continue", text)
}
case 2:
break //@hiloc(brk12, "break", text)
default:
break L2 //@hiloc(brk13, "break L2", text)
}
}
}
func testReturn() bool { //@hiloc(func1, "func", text),hiloc(bool1, "bool", text),highlight(func1, func1, fullRet11, fullRet12),highlight(bool1, bool1, false1, bool2, true1)
if 1 < 2 {
return false //@hiloc(ret11, "return", text),hiloc(fullRet11, "return false", text),hiloc(false1, "false", text),highlight(ret11, func1, fullRet11, fullRet12)
}
candidates := []int{}
sort.SliceStable(candidates, func(i, j int) bool { //@hiloc(func2, "func", text),hiloc(bool2, "bool", text),highlight(func2, func2, fullRet2)
return candidates[i] > candidates[j] //@hiloc(ret2, "return", text),hiloc(fullRet2, "return candidates[i] > candidates[j]", text),highlight(ret2, func2, fullRet2)
})
return true //@hiloc(ret12, "return", text),hiloc(fullRet12, "return true", text),hiloc(true1, "true", text),highlight(ret12, func1, fullRet11, fullRet12)
}
func testReturnFields() float64 { //@hiloc(retVal1, "float64", text),highlight(retVal1, retVal1, retVal11, retVal21)
if 1 < 2 {
return 20.1 //@hiloc(retVal11, "20.1", text),highlight(retVal11, retVal1, retVal11, retVal21)
}
z := 4.3 //@hiloc(zDecl, "z", write)
return z //@hiloc(retVal21, "z", text),highlight(retVal21, retVal1, retVal11, zDecl, retVal21)
}
func testReturnMultipleFields() (float32, string) { //@hiloc(retVal31, "float32", text),hiloc(retVal32, "string", text),highlight(retVal31, retVal31, retVal41, retVal51),highlight(retVal32, retVal32, retVal42, retVal52)
y := "im a var" //@hiloc(yDecl, "y", write),
if 1 < 2 {
return 20.1, y //@hiloc(retVal41, "20.1", text),hiloc(retVal42, "y", text),highlight(retVal41, retVal31, retVal41, retVal51),highlight(retVal42, retVal32, yDecl, retVal42, retVal52)
}
return 4.9, "test" //@hiloc(retVal51, "4.9", text),hiloc(retVal52, "\"test\"", text),highlight(retVal51, retVal31, retVal41, retVal51),highlight(retVal52, retVal32, retVal42, retVal52)
}
func testReturnFunc() int32 { //@hiloc(retCall, "int32", text)
mulch := 1 //@hiloc(mulchDec, "mulch", write),highlight(mulchDec, mulchDec, mulchRet)
return int32(mulch) //@hiloc(mulchRet, "mulch", read),hiloc(retFunc, "int32", text),hiloc(retTotal, "int32(mulch)", text),highlight(mulchRet, mulchDec, mulchRet),highlight(retFunc, retCall, retFunc, retTotal)
}