Closed
Description
Using Go's dev.typeparams
branch and gopls
built with -tags=typeparams -gcflags=all=-G=3
, it works fairly well, but it randomly crashes with this:
I didn't dig much deeper into it but I figured I should open a bug report here to keep track.
I'll try to create a minimal repro and share it once I figure out how to trigger it.
❯ go version
go version devel go1.17-a9de78ac88 2021-06-08 17:03:39 +0000 linux/amd64
❯ git describe
gopls/v0.1.7-2226-g4e58f8f0
panic: Apply: unexpected node type *ast.ListExpr [recovered]
panic: Apply: unexpected node type *ast.ListExpr
goroutine 1246 [running]:
golang.org/x/tools/go/ast/astutil.Apply.func1()
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:47 +0x89
panic({0xc0cd00, 0xc002974a30})
/usr/src/go1.18/src/runtime/panic.go:1037 +0x215
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe7a1b8, 0xc00463c750}, {0xd18575, 0x33}, 0xe8bd58, {0xe7a258, 0xc004628d08})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:440 +0x26c7
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe7a438, 0xc004628d20}, {0xe60b49, 0x1}, 0x1, {0xe7a1b8, 0xc00463c750})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:252 +0x255d
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe79b28, 0xc00463c780}, {0xd168a5, 0x0}, 0x0, {0xe7a438, 0xc004628d20})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:269 +0xc45
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe79f88, 0xc0015a9d40}, {0xd175e3, 0x5}, 0xc00464a230, {0xe79b28, 0xc00463c780})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:285 +0x12fb
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe79fb0, 0xc00463c7b0}, {0xd173e3, 0x0}, 0xea7590, {0xe79f88, 0xc0015a9d40})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:221 +0x1645
golang.org/x/tools/go/ast/astutil.(*application).applyList(0xc00454be60, {0xe79fb0, 0xc00463c7b0}, {0xd173e3, 0x4})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:473 +0xae
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe7a488, 0xc004628d50}, {0xd19e97, 0x0}, 0x20, {0xe79fb0, 0xc00463c7b0})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:226 +0x1ba5
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe7a528, 0xc0015a9b80}, {0xd175e3, 0x20}, 0xc00464a228, {0xe7a488, 0xc004628d50})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:288 +0xd25
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe7a0a0, 0xc0015a9e40}, {0xd1893a, 0xc0015a9e40}, 0xbfe5e0, {0xe7a528, 0xc0015a9b80})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:403 +0xf68
golang.org/x/tools/go/ast/astutil.(*application).applyList(0xc00454be60, {0xe7a0a0, 0xc0015a9e40}, {0xd1893a, 0x5})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:473 +0xae
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe79fd8, 0xc00105dc00}, {0xd18327, 0xc00105dc00}, 0xe1, {0xe7a0a0, 0xc0015a9e40})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:411 +0x2255
golang.org/x/tools/go/ast/astutil.(*application).applyList(0xc00454be60, {0xe79fd8, 0xc00105dc00}, {0xd18327, 0x5})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:473 +0xae
golang.org/x/tools/go/ast/astutil.(*application).apply(0xc00454be60, {0xe7b388, 0xc002974a10}, {0xd17463, 0x10}, 0x7fbd0309a108, {0xe79fd8, 0xc00105dc00})
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:424 +0xbc5
golang.org/x/tools/go/ast/astutil.Apply({0xe79fd8, 0xc00105dc00}, 0xc0029749f0, 0xc002974a00)
/home/oneofone/code/go/src/golang.org/x/tools/go/ast/astutil/rewrite.go:52 +0x166
mvdan.cc/gofumpt/format.File(0xc0015a9940, 0xc00105dc00, {{0x0, 0xc02ea0}, 0xe8})
/home/oneofone/code/go/pkg/mod/mvdan.cc/gofumpt@v0.1.1/format/format.go:95 +0x245
mvdan.cc/gofumpt/format.Source({0xc004621980, 0x18a1, 0x1910}, {{0x0, 0xc000250c78}, 0xc8})
/home/oneofone/code/go/pkg/mod/mvdan.cc/gofumpt@v0.1.1/format/format.go:55 +0xb9
golang.org/x/tools/gopls/internal/hooks.Options.func1({0xe67f60, 0xc004621980}, {0xc004621980, 0xc4aee0, 0xc001b2fc80})
/home/oneofone/code/go/src/golang.org/x/tools/gopls/internal/hooks/hooks.go:26 +0x2e
golang.org/x/tools/internal/lsp/source.Format({0xe7f718, 0xc001c7a480}, {0xea7ff8, 0xc000b79100}, {0xe8b518, 0xc00410aa20})
/home/oneofone/code/go/src/golang.org/x/tools/internal/lsp/source/format.go:60 +0x3b8
golang.org/x/tools/internal/lsp.(*Server).formatting(0xc0045d4538, {0xe7f718, 0xc001c7a480}, 0xc0045d4510)
/home/oneofone/code/go/src/golang.org/x/tools/internal/lsp/format.go:25 +0x1d6
golang.org/x/tools/internal/lsp.(*Server).Formatting(0xc000589260, {0xe7f718, 0xc001c7a480}, 0xbef5e0)
/home/oneofone/code/go/src/golang.org/x/tools/internal/lsp/server_gen.go:124 +0x25
golang.org/x/tools/internal/lsp/protocol.serverDispatch({0xe7f718, 0xc001c7a480}, {0xeac500, 0xc0001b22a0}, 0xc004603b00, {0xe7f980, 0xc001c7a400})
/home/oneofone/code/go/src/golang.org/x/tools/internal/lsp/protocol/tsserver.go:469 +0x1b25
golang.org/x/tools/internal/lsp/protocol.ServerHandler.func1({0xe7f718, 0xc001c7a480}, 0xc004603b00, {0xe7f980, 0xc001c7a400})
/home/oneofone/code/go/src/golang.org/x/tools/internal/lsp/protocol/protocol.go:154 +0x90
golang.org/x/tools/internal/lsp/lsprpc.handshaker.func1({0xe7f718, 0xc001c7a480}, 0xc004603b00, {0xe7f980, 0xc001c7a400})
/home/oneofone/code/go/src/golang.org/x/tools/internal/lsp/lsprpc/lsprpc.go:684 +0xa7d
golang.org/x/tools/internal/jsonrpc2.MustReplyHandler.func1({0xe7f718, 0xc001c7a480}, 0xc001e851d0, {0xe7f980, 0xc001c7a400})
/home/oneofone/code/go/src/golang.org/x/tools/internal/jsonrpc2/handler.go:35 +0xf6
golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1.2()
/home/oneofone/code/go/src/golang.org/x/tools/internal/jsonrpc2/handler.go:103 +0xa3
created by golang.org/x/tools/internal/jsonrpc2.AsyncHandler.func1
/home/oneofone/code/go/src/golang.org/x/tools/internal/jsonrpc2/handler.go:100 +0x20f