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}") }