This test exercises completion around various statements.
-- flags --
-ignore_extra_diags
-- settings.json --
{
"usePlaceholders": true
}
-- go.mod --
module golang.org/lsptests/statements
-- append.go --
package statements
func _() {
type mySlice []int
var (
abc []int //@item(stmtABC, "abc", "[]int", "var")
abcdef mySlice //@item(stmtABCDEF, "abcdef", "mySlice", "var")
)
/* abcdef = append(abcdef, ) */ //@item(stmtABCDEFAssignAppend, "abcdef = append(abcdef, )", "", "func")
// don't offer "abc = append(abc, )" because "abc" isn't necessarily
// better than "abcdef".
abc //@complete(" //", stmtABC, stmtABCDEF)
abcdef //@complete(" //", stmtABCDEF, stmtABCDEFAssignAppend)
/* append(abc, ) */ //@item(stmtABCAppend, "append(abc, )", "", "func")
abc = app //@snippet(" //", stmtABCAppend, "append(abc, ${1:})")
}
func _() {
var s struct{ xyz []int }
/* xyz = append(s.xyz, ) */ //@item(stmtXYZAppend, "xyz = append(s.xyz, )", "", "func")
s.x //@snippet(" //", stmtXYZAppend, "xyz = append(s.xyz, ${1:})")
/* s.xyz = append(s.xyz, ) */ //@item(stmtDeepXYZAppend, "s.xyz = append(s.xyz, )", "", "func")
sx //@snippet(" //", stmtDeepXYZAppend, "s.xyz = append(s.xyz, ${1:})")
}
func _() {
var foo [][]int
/* append(foo[0], ) */ //@item(stmtFooAppend, "append(foo[0], )", "", "func")
foo[0] = app //@complete(" //", stmtFooAppend),snippet(" //", stmtFooAppend, "append(foo[0], ${1:})")
}
-- if_err_check_return.go --
package statements
import (
"bytes"
"io"
"os"
)
func one() (int, float32, io.Writer, *int, []int, bytes.Buffer, error) {
/* if err != nil { return err } */ //@item(stmtOneIfErrReturn, "if err != nil { return err }", "", "")
/* err != nil { return err } */ //@item(stmtOneErrReturn, "err != nil { return err }", "", "")
_, err := os.Open("foo")
//@snippet("", stmtOneIfErrReturn, "if err != nil {\n\treturn 0, 0, nil, nil, nil, bytes.Buffer{\\}, ${1:err}\n\\}")
_, err = os.Open("foo")
i //@snippet(" //", stmtOneIfErrReturn, "if err != nil {\n\treturn 0, 0, nil, nil, nil, bytes.Buffer{\\}, ${1:err}\n\\}")
_, err = os.Open("foo")
if er //@snippet(" //", stmtOneErrReturn, "err != nil {\n\treturn 0, 0, nil, nil, nil, bytes.Buffer{\\}, ${1:err}\n\\}")
_, err = os.Open("foo")
if //@snippet(" //", stmtOneIfErrReturn, "if err != nil {\n\treturn 0, 0, nil, nil, nil, bytes.Buffer{\\}, ${1:err}\n\\}")
_, err = os.Open("foo")
if //@snippet("//", stmtOneIfErrReturn, "if err != nil {\n\treturn 0, 0, nil, nil, nil, bytes.Buffer{\\}, ${1:err}\n\\}")
}
-- if_err_check_return2.go --
package statements
import "os"
func two() error {
var s struct{ err error }
/* if s.err != nil { return s.err } */ //@item(stmtTwoIfErrReturn, "if s.err != nil { return s.err }", "", "")
_, s.err = os.Open("foo")
//@snippet("", stmtTwoIfErrReturn, "if s.err != nil {\n\treturn ${1:s.err}\n\\}")
}
-- if_err_check_test.go --
package statements
import (
"os"
"testing"
)
func TestErr(t *testing.T) {
/* if err != nil { t.Fatal(err) } */ //@item(stmtOneIfErrTFatal, "if err != nil { t.Fatal(err) }", "", "")
_, err := os.Open("foo")
//@snippet("", stmtOneIfErrTFatal, "if err != nil {\n\tt.Fatal(err)\n\\}")
}
func BenchmarkErr(b *testing.B) {
/* if err != nil { b.Fatal(err) } */ //@item(stmtOneIfErrBFatal, "if err != nil { b.Fatal(err) }", "", "")
_, err := os.Open("foo")
//@snippet("", stmtOneIfErrBFatal, "if err != nil {\n\tb.Fatal(err)\n\\}")
}
-- return.go --
package statements
//@item(stmtReturnZeroValues, `return 0, "", nil`)
func foo() (int, string, error) {
ret //@snippet(" ", stmtReturnZeroValues, "return ${1:0}, ${2:\"\"}, ${3:nil}")
}
func bar() (int, string, error) {
return //@snippet(" ", stmtReturnZeroValues, "return ${1:0}, ${2:\"\"}, ${3:nil}")
}