-
-
Save puremourning/6a531965b8a6ef2bcde713e6cf9f2ae2 to your computer and use it in GitHub Desktop.
gopls log
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[Trace - 20:52:09.411 PM] Sending request 'initialize - (1)'. | |
Params: {"capabilities":{"textDocument":{"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"completion":{"completionItem":{"documentationFormat":["plaintext","markdown"]},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]}},"documentSymbol":{"hierarchicalDocumentSymbolSupport":false,"labelSupport":false,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"hover":{"contentFormat":["plaintext","markdown"]},"inlay_hint":{},"semanticTokens":{"augmentSyntaxTokens":true,"formats":["relative"],"requests":{"full":{"delta":false},"range":true},"tokenModifiers":[],"tokenTypes":["namespace","type","class","enum","interface","struct","typeParameter","parameter","variable","property","enumMember","event","function","method","member","macro","keyword","modifier","comment","string","number","regexp","operator"]},"signatureHelp":{"signatureInformation":{"documentationFormat":["plaintext","markdown"],"parameterInformation":{"labelOffsetSupport":true}}},"synchronization":{"didSave":true}},"workspace":{"applyEdit":true,"configuration":true,"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"workspaceEdit":{"documentChanges":true},"workspaceFolders":true}},"initializationOptions":{"hints":{"assignVariableTypes":true,"compositeLiteralFields":true,"compositeLiteralTypes":true,"constantValues":true,"functionTypeParameters":true,"parameterNames":true,"rangeVariableTypes":true},"hoverKind":"Structured","semanticTokens":true},"processId":50969,"rootPath":"/Users/ben/Development/YouCompleteMe/golang-tools","rootUri":"file:///Users/ben/Development/YouCompleteMe/golang-tools","workspaceFolders":[{"name":"golang-tools","uri":"file:///Users/ben/Development/YouCompleteMe/golang-tools"}]} | |
[Trace - 20:52:09.411 PM] Received response 'initialize - (1)' in 0ms. | |
Result: {"capabilities":{"textDocumentSync":{"openClose":true,"change":2,"save":{}},"completionProvider":{"triggerCharacters":["."],"completionItem":{}},"hoverProvider":true,"signatureHelpProvider":{"triggerCharacters":["(",","]},"definitionProvider":true,"typeDefinitionProvider":true,"implementationProvider":true,"referencesProvider":true,"documentHighlightProvider":true,"documentSymbolProvider":true,"codeActionProvider":{"codeActionKinds":["quickfix","refactor.extract","refactor.rewrite","source.fixAll","source.organizeImports"]},"codeLensProvider":{},"documentLinkProvider":{},"workspaceSymbolProvider":true,"documentFormattingProvider":true,"documentOnTypeFormattingProvider":{"firstTriggerCharacter":""},"renameProvider":true,"foldingRangeProvider":true,"executeCommandProvider":{"commands":["gopls.add_dependency","gopls.add_import","gopls.apply_fix","gopls.check_upgrades","gopls.edit_go_directive","gopls.gc_details","gopls.generate","gopls.generate_gopls_mod","gopls.go_get_package","gopls.list_imports","gopls.list_known_packages","gopls.regenerate_cgo","gopls.remove_dependency","gopls.run_tests","gopls.run_vulncheck_exp","gopls.start_debugging","gopls.test","gopls.tidy","gopls.toggle_gc_details","gopls.update_go_sum","gopls.upgrade_dependency","gopls.vendor"]},"callHierarchyProvider":true,"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":"workspace/didChangeWorkspaceFolders"}},"inlayHintProvider":{}},"serverInfo":{"name":"gopls","version":"{\"GoVersion\":\"go1.19\",\"Path\":\"golang.org/x/tools/gopls\",\"Main\":{\"Path\":\"golang.org/x/tools/gopls\",\"Version\":\"v0.9.4\",\"Sum\":\"h1:YhHOxVi++ILnY+QnH9FGtRKZZrunSaR7OW8/dCp7bBk=\",\"Replace\":null},\"Deps\":[{\"Path\":\"github.com/BurntSushi/toml\",\"Version\":\"v1.2.0\",\"Sum\":\"h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=\",\"Replace\":null},{\"Path\":\"github.com/google/go-cmp\",\"Version\":\"v0.5.8\",\"Sum\":\"h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=\",\"Replace\":null},{\"Path\":\"github.com/sergi/go-diff\",\"Version\":\"v1.1.0\",\"Sum\":\"h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=\",\"Replace\":null},{\"Path\":\"golang.org/x/exp/typeparams\",\"Version\":\"v0.0.0-20220722155223-a9213eeb770e\",\"Sum\":\"h1:7Xs2YCOpMlNqSQSmrrnhlzBXIE/bpMecZplbLePTJvE=\",\"Replace\":null},{\"Path\":\"golang.org/x/mod\",\"Version\":\"v0.6.0-dev.0.20220419223038-86c51ed26bb4\",\"Sum\":\"h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=\",\"Replace\":null},{\"Path\":\"golang.org/x/sync\",\"Version\":\"v0.0.0-20220722155255-886fb9371eb4\",\"Sum\":\"h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw=\",\"Replace\":null},{\"Path\":\"golang.org/x/sys\",\"Version\":\"v0.0.0-20220722155257-8c9f86f7a55f\",\"Sum\":\"h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=\",\"Replace\":null},{\"Path\":\"golang.org/x/text\",\"Version\":\"v0.3.7\",\"Sum\":\"h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=\",\"Replace\":null},{\"Path\":\"golang.org/x/tools\",\"Version\":\"v0.1.13-0.20220812184215-3f9b119300de\",\"Sum\":\"h1:b68wxF4nfQjj1XTRHtjVjCximbhAwjztuzDEFGU+n9o=\",\"Replace\":null},{\"Path\":\"golang.org/x/vuln\",\"Version\":\"v0.0.0-20220725105440-4151a5aca1df\",\"Sum\":\"h1:BkeW9/QJhcigekDUPS9N9bIb0v7gPKKmLYeczVAqr2s=\",\"Replace\":null},{\"Path\":\"honnef.co/go/tools\",\"Version\":\"v0.3.2\",\"Sum\":\"h1:ytYb4rOqyp1TSa2EPvNVwtPQJctSELKaMyLfqNP4+34=\",\"Replace\":null},{\"Path\":\"mvdan.cc/gofumpt\",\"Version\":\"v0.3.1\",\"Sum\":\"h1:avhhrOmv0IuvQVK7fvwV91oFSGAk5/6Po8GXTzICeu8=\",\"Replace\":null},{\"Path\":\"mvdan.cc/xurls/v2\",\"Version\":\"v2.4.0\",\"Sum\":\"h1:tzxjVAj+wSBmDcF6zBB7/myTy3gX9xvi8Tyr28AuQgc=\",\"Replace\":null}],\"Settings\":[{\"Key\":\"-compiler\",\"Value\":\"gc\"},{\"Key\":\"CGO_ENABLED\",\"Value\":\"1\"},{\"Key\":\"CGO_CFLAGS\",\"Value\":\"\"},{\"Key\":\"CGO_CPPFLAGS\",\"Value\":\"\"},{\"Key\":\"CGO_CXXFLAGS\",\"Value\":\"\"},{\"Key\":\"CGO_LDFLAGS\",\"Value\":\"\"},{\"Key\":\"GOARCH\",\"Value\":\"arm64\"},{\"Key\":\"GOOS\",\"Value\":\"darwin\"}],\"Version\":\"v0.9.4\"}"}} | |
[Trace - 20:52:09.412 PM] Sending notification 'initialized'. | |
Params: {} | |
[Trace - 20:52:09.412 PM] Sending notification 'workspace/didChangeConfiguration'. | |
Params: {"settings":{"hints":{"assignVariableTypes":true,"compositeLiteralFields":true,"compositeLiteralTypes":true,"constantValues":true,"functionTypeParameters":true,"parameterNames":true,"rangeVariableTypes":true},"hoverKind":"Structured","semanticTokens":true}} | |
[Trace - 20:52:09.412 PM] Received notification 'window/showMessage'. | |
Params: {"type":4,"message":"Loading packages..."} | |
[Trace - 20:52:09.412 PM] Received request 'workspace/configuration - (1)'. | |
Params: {"items":[{"scopeUri":"file:///Users/ben/Development/YouCompleteMe/golang-tools","section":"gopls"}]} | |
[Trace - 20:52:09.413 PM] Sending notification 'textDocument/didOpen'. | |
Params: {"textDocument":{"languageId":"go","text":"// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage lsp\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/token\"\n\t\"go/types\"\n\t\"log\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"golang.org/x/tools/internal/event\"\n\t\"golang.org/x/tools/internal/lsp/protocol\"\n\t\"golang.org/x/tools/internal/lsp/safetoken\"\n\t\"golang.org/x/tools/internal/lsp/source\"\n\t\"golang.org/x/tools/internal/lsp/template\"\n\t\"golang.org/x/tools/internal/typeparams\"\n)\n\n// The LSP says that errors for the semantic token requests should only be returned\n// for exceptions (a word not otherwise defined). This code treats a too-large file\n// as an exception. On parse errors, the code does what it can.\n\n// reject full semantic token requests for large files\nconst maxFullFileSize int = 100000\n\n// to control comprehensive logging of decisions (gopls semtok foo.go > /dev/null shows log output)\n// semDebug should NEVER be true in checked-in code\nconst semDebug = false\n\nfunc (s *Server) semanticTokensFull(ctx context.Context, p *protocol.SemanticTokensParams) (*protocol.SemanticTokens, error) {\n\tret, err := s.computeSemanticTokens(ctx, p.TextDocument, nil)\n\treturn ret, err\n}\n\nfunc (s *Server) semanticTokensFullDelta(ctx context.Context, p *protocol.SemanticTokensDeltaParams) (interface{}, error) {\n\treturn nil, fmt.Errorf(\"implement SemanticTokensFullDelta\")\n}\n\nfunc (s *Server) semanticTokensRange(ctx context.Context, p *protocol.SemanticTokensRangeParams) (*protocol.SemanticTokens, error) {\n\tret, err := s.computeSemanticTokens(ctx, p.TextDocument, &p.Range)\n\treturn ret, err\n}\n\nfunc (s *Server) semanticTokensRefresh(ctx context.Context) error {\n\t// in the code, but not in the protocol spec\n\treturn fmt.Errorf(\"implement SemanticTokensRefresh\")\n}\n\nfunc (s *Server) computeSemanticTokens(ctx context.Context, td protocol.TextDocumentIdentifier, rng *protocol.Range) (*protocol.SemanticTokens, error) {\n\tans := protocol.SemanticTokens{\n\t\tData: []uint32{},\n\t}\n\tsnapshot, fh, ok, release, err := s.beginFileRequest(ctx, td.URI, source.UnknownKind)\n\tdefer release()\n\tif !ok {\n\t\treturn nil, err\n\t}\n\tvv := snapshot.View()\n\tif !vv.Options().SemanticTokens {\n\t\t// return an error, so if the option changes\n\t\t// the client won't remember the wrong answer\n\t\treturn nil, fmt.Errorf(\"semantictokens are disabled\")\n\t}\n\tkind := snapshot.View().FileKind(fh)\n\tif kind == source.Tmpl {\n\t\t// this is a little cumbersome to avoid both exporting 'encoded' and its methods\n\t\t// and to avoid import cycles\n\t\te := &encoded{\n\t\t\tctx: ctx,\n\t\t\trng: rng,\n\t\t\ttokTypes: s.session.Options().SemanticTypes,\n\t\t\ttokMods: s.session.Options().SemanticMods,\n\t\t}\n\t\tadd := func(line, start uint32, len uint32) {\n\t\t\te.add(line, start, len, tokMacro, nil)\n\t\t}\n\t\tdata := func() []uint32 {\n\t\t\treturn e.Data()\n\t\t}\n\t\treturn template.SemanticTokens(ctx, snapshot, fh.URI(), add, data)\n\t}\n\tif kind != source.Go {\n\t\treturn nil, nil\n\t}\n\tpkg, err := snapshot.PackageForFile(ctx, fh.URI(), source.TypecheckFull, source.WidestPackage)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpgf, err := pkg.File(fh.URI())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// ignore pgf.ParseErr. Do what we can.\n\tif rng == nil && len(pgf.Src) > maxFullFileSize {\n\t\terr := fmt.Errorf(\"semantic tokens: file %s too large for full (%d>%d)\",\n\t\t\tfh.URI().Filename(), len(pgf.Src), maxFullFileSize)\n\t\treturn nil, err\n\t}\n\te := &encoded{\n\t\tctx: ctx,\n\t\tpgf: pgf,\n\t\trng: rng,\n\t\tti: pkg.GetTypesInfo(),\n\t\tpkg: pkg,\n\t\tfset: snapshot.FileSet(),\n\t\ttokTypes: s.session.Options().SemanticTypes,\n\t\ttokMods: s.session.Options().SemanticMods,\n\t\tnoStrings: vv.Options().NoSemanticString,\n\t\tnoNumbers: vv.Options().NoSemanticNumber,\n\t}\n\tif err := e.init(); err != nil {\n\t\t// e.init should never return an error, unless there's some\n\t\t// seemingly impossible race condition\n\t\treturn nil, err\n\t}\n\te.semantics()\n\tans.Data = e.Data()\n\t// For delta requests, but we've never seen any.\n\tans.ResultID = fmt.Sprintf(\"%v\", time.Now())\n\treturn &ans, nil\n}\n\nfunc (e *encoded) semantics() {\n\tf := e.pgf.File\n\t// may not be in range, but harmless\n\te.token(f.Package, len(\"package\"), tokKeyword, nil)\n\te.token(f.Name.NamePos, len(f.Name.Name), tokNamespace, nil)\n\tinspect := func(n ast.Node) bool {\n\t\treturn e.inspector(n)\n\t}\n\tfor _, d := range f.Decls {\n\t\t// only look at the decls that overlap the range\n\t\tstart, end := d.Pos(), d.End()\n\t\tif end <= e.start || start >= e.end {\n\t\t\tcontinue\n\t\t}\n\t\tast.Inspect(d, inspect)\n\t}\n\tfor _, cg := range f.Comments {\n\t\tfor _, c := range cg.List {\n\t\t\tif !strings.Contains(c.Text, \"\\n\") {\n\t\t\t\te.token(c.Pos(), len(c.Text), tokComment, nil)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\te.multiline(c.Pos(), c.End(), c.Text, tokComment)\n\t\t}\n\t}\n}\n\ntype tokenType string\n\nconst (\n\ttokNamespace tokenType = \"namespace\"\n\ttokType tokenType = \"type\"\n\ttokInterface tokenType = \"interface\"\n\ttokTypeParam tokenType = \"typeParameter\"\n\ttokParameter tokenType = \"parameter\"\n\ttokVariable tokenType = \"variable\"\n\ttokMethod tokenType = \"method\"\n\ttokFunction tokenType = \"function\"\n\ttokKeyword tokenType = \"keyword\"\n\ttokComment tokenType = \"comment\"\n\ttokString tokenType = \"string\"\n\ttokNumber tokenType = \"number\"\n\ttokOperator tokenType = \"operator\"\n\n\ttokMacro tokenType = \"macro\" // for templates\n)\n\nfunc (e *encoded) token(start token.Pos, leng int, typ tokenType, mods []string) {\n\n\tif !start.IsValid() {\n\t\t// This is not worth reporting\n\t\treturn\n\t}\n\tif start >= e.end || start+token.Pos(leng) <= e.start {\n\t\treturn\n\t}\n\t// want a line and column from start (in LSP coordinates)\n\t// [//line directives should be ignored]\n\trng := source.NewMappedRange(e.pgf.Tok, e.pgf.Mapper, start, start+token.Pos(leng))\n\tlspRange, err := rng.Range()\n\tif err != nil {\n\t\t// possibly a //line directive. TODO(pjw): fix this somehow\n\t\t// \"column mapper is for file...instead of...\"\n\t\t// \"line is beyond end of file...\"\n\t\t// see line 116 of internal/span/token.go which uses Position not PositionFor\n\t\t// (it is too verbose to print the error on every token. some other RPC will fail)\n\t\t// event.Error(e.ctx, \"failed to convert to range\", err)\n\t\treturn\n\t}\n\tif lspRange.End.Line != lspRange.Start.Line {\n\t\t// this happens if users are typing at the end of the file, but report nothing\n\t\treturn\n\t}\n\t// token is all on one line\n\tlength := lspRange.End.Character - lspRange.Start.Character\n\te.add(lspRange.Start.Line, lspRange.Start.Character, length, typ, mods)\n}\n\nfunc (e *encoded) add(line, start uint32, len uint32, tok tokenType, mod []string) {\n\tx := semItem{line, start, len, tok, mod}\n\te.items = append(e.items, x)\n}\n\n// semItem represents a token found walking the parse tree\ntype semItem struct {\n\tline, start uint32\n\tlen uint32\n\ttypeStr tokenType\n\tmods []string\n}\n\ntype encoded struct {\n\t// the generated data\n\titems []semItem\n\n\tnoStrings bool\n\tnoNumbers bool\n\n\tctx context.Context\n\ttokTypes, tokMods []string\n\tpgf *source.ParsedGoFile\n\trng *protocol.Range\n\tti *types.Info\n\tpkg source.Package\n\tfset *token.FileSet\n\t// allowed starting and ending token.Pos, set by init\n\t// used to avoid looking at declarations not in range\n\tstart, end token.Pos\n\t// path from the root of the parse tree, used for debugging\n\tstack []ast.Node\n}\n\n// convert the stack to a string, for debugging\nfunc (e *encoded) strStack() string {\n\tmsg := []string{\"[\"}\n\tfor i := len(e.stack) - 1; i >= 0; i-- {\n\t\ts := e.stack[i]\n\t\tmsg = append(msg, fmt.Sprintf(\"%T\", s)[5:])\n\t}\n\tif len(e.stack) > 0 {\n\t\tloc := e.stack[len(e.stack)-1].Pos()\n\t\tif !safetoken.InRange(e.pgf.Tok, loc) {\n\t\t\tmsg = append(msg, fmt.Sprintf(\"invalid position %v for %s\", loc, e.pgf.URI))\n\t\t} else if safetoken.InRange(e.pgf.Tok, loc) {\n\t\t\tadd := e.pgf.Tok.PositionFor(loc, false)\n\t\t\tnm := filepath.Base(add.Filename)\n\t\t\tmsg = append(msg, fmt.Sprintf(\"(%s:%d,col:%d)\", nm, add.Line, add.Column))\n\t\t} else {\n\t\t\tmsg = append(msg, fmt.Sprintf(\"(loc %d out of range)\", loc))\n\t\t}\n\t}\n\tmsg = append(msg, \"]\")\n\treturn strings.Join(msg, \" \")\n}\n\n// find the line in the source\nfunc (e *encoded) srcLine(x ast.Node) string {\n\tfile := e.pgf.Tok\n\tline := file.Line(x.Pos())\n\tstart, err := safetoken.Offset(file, file.LineStart(line))\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\tend := start\n\tfor ; end < len(e.pgf.Src) && e.pgf.Src[end] != '\\n'; end++ {\n\n\t}\n\tans := e.pgf.Src[start:end]\n\treturn string(ans)\n}\n\nfunc (e *encoded) inspector(n ast.Node) bool {\n\tpop := func() {\n\t\te.stack = e.stack[:len(e.stack)-1]\n\t}\n\tif n == nil {\n\t\tpop()\n\t\treturn true\n\t}\n\te.stack = append(e.stack, n)\n\tswitch x := n.(type) {\n\tcase *ast.ArrayType:\n\tcase *ast.AssignStmt:\n\t\te.token(x.TokPos, len(x.Tok.String()), tokOperator, nil)\n\tcase *ast.BasicLit:\n\t\tif strings.Contains(x.Value, \"\\n\") {\n\t\t\t// has to be a string\n\t\t\te.multiline(x.Pos(), x.End(), x.Value, tokString)\n\t\t\tbreak\n\t\t}\n\t\tln := len(x.Value)\n\t\twhat := tokNumber\n\t\tif x.Kind == token.STRING {\n\t\t\twhat = tokString\n\t\t}\n\t\te.token(x.Pos(), ln, what, nil)\n\tcase *ast.BinaryExpr:\n\t\te.token(x.OpPos, len(x.Op.String()), tokOperator, nil)\n\tcase *ast.BlockStmt:\n\tcase *ast.BranchStmt:\n\t\te.token(x.TokPos, len(x.Tok.String()), tokKeyword, nil)\n\t\t// There's no semantic encoding for labels\n\tcase *ast.CallExpr:\n\t\tif x.Ellipsis != token.NoPos {\n\t\t\te.token(x.Ellipsis, len(\"...\"), tokOperator, nil)\n\t\t}\n\tcase *ast.CaseClause:\n\t\tiam := \"case\"\n\t\tif x.List == nil {\n\t\t\tiam = \"default\"\n\t\t}\n\t\te.token(x.Case, len(iam), tokKeyword, nil)\n\tcase *ast.ChanType:\n\t\t// chan | chan <- | <- chan\n\t\tswitch {\n\t\tcase x.Arrow == token.NoPos:\n\t\t\te.token(x.Begin, len(\"chan\"), tokKeyword, nil)\n\t\tcase x.Arrow == x.Begin:\n\t\t\te.token(x.Arrow, 2, tokOperator, nil)\n\t\t\tpos := e.findKeyword(\"chan\", x.Begin+2, x.Value.Pos())\n\t\t\te.token(pos, len(\"chan\"), tokKeyword, nil)\n\t\tcase x.Arrow != x.Begin:\n\t\t\te.token(x.Begin, len(\"chan\"), tokKeyword, nil)\n\t\t\te.token(x.Arrow, 2, tokOperator, nil)\n\t\t}\n\tcase *ast.CommClause:\n\t\tiam := len(\"case\")\n\t\tif x.Comm == nil {\n\t\t\tiam = len(\"default\")\n\t\t}\n\t\te.token(x.Case, iam, tokKeyword, nil)\n\tcase *ast.CompositeLit:\n\tcase *ast.DeclStmt:\n\tcase *ast.DeferStmt:\n\t\te.token(x.Defer, len(\"defer\"), tokKeyword, nil)\n\tcase *ast.Ellipsis:\n\t\te.token(x.Ellipsis, len(\"...\"), tokOperator, nil)\n\tcase *ast.EmptyStmt:\n\tcase *ast.ExprStmt:\n\tcase *ast.Field:\n\tcase *ast.FieldList:\n\tcase *ast.ForStmt:\n\t\te.token(x.For, len(\"for\"), tokKeyword, nil)\n\tcase *ast.FuncDecl:\n\tcase *ast.FuncLit:\n\tcase *ast.FuncType:\n\t\tif x.Func != token.NoPos {\n\t\t\te.token(x.Func, len(\"func\"), tokKeyword, nil)\n\t\t}\n\tcase *ast.GenDecl:\n\t\te.token(x.TokPos, len(x.Tok.String()), tokKeyword, nil)\n\tcase *ast.GoStmt:\n\t\te.token(x.Go, len(\"go\"), tokKeyword, nil)\n\tcase *ast.Ident:\n\t\te.ident(x)\n\tcase *ast.IfStmt:\n\t\te.token(x.If, len(\"if\"), tokKeyword, nil)\n\t\tif x.Else != nil {\n\t\t\t// x.Body.End() or x.Body.End()+1, not that it matters\n\t\t\tpos := e.findKeyword(\"else\", x.Body.End(), x.Else.Pos())\n\t\t\te.token(pos, len(\"else\"), tokKeyword, nil)\n\t\t}\n\tcase *ast.ImportSpec:\n\t\te.importSpec(x)\n\t\tpop()\n\t\treturn false\n\tcase *ast.IncDecStmt:\n\t\te.token(x.TokPos, len(x.Tok.String()), tokOperator, nil)\n\tcase *ast.IndexExpr:\n\tcase *typeparams.IndexListExpr: // accommodate generics\n\tcase *ast.InterfaceType:\n\t\te.token(x.Interface, len(\"interface\"), tokKeyword, nil)\n\tcase *ast.KeyValueExpr:\n\tcase *ast.LabeledStmt:\n\tcase *ast.MapType:\n\t\te.token(x.Map, len(\"map\"), tokKeyword, nil)\n\tcase *ast.ParenExpr:\n\tcase *ast.RangeStmt:\n\t\te.token(x.For, len(\"for\"), tokKeyword, nil)\n\t\t// x.TokPos == token.NoPos is legal (for range foo {})\n\t\toffset := x.TokPos\n\t\tif offset == token.NoPos {\n\t\t\toffset = x.For\n\t\t}\n\t\tpos := e.findKeyword(\"range\", offset, x.X.Pos())\n\t\te.token(pos, len(\"range\"), tokKeyword, nil)\n\tcase *ast.ReturnStmt:\n\t\te.token(x.Return, len(\"return\"), tokKeyword, nil)\n\tcase *ast.SelectStmt:\n\t\te.token(x.Select, len(\"select\"), tokKeyword, nil)\n\tcase *ast.SelectorExpr:\n\tcase *ast.SendStmt:\n\t\te.token(x.Arrow, len(\"<-\"), tokOperator, nil)\n\tcase *ast.SliceExpr:\n\tcase *ast.StarExpr:\n\t\te.token(x.Star, len(\"*\"), tokOperator, nil)\n\tcase *ast.StructType:\n\t\te.token(x.Struct, len(\"struct\"), tokKeyword, nil)\n\tcase *ast.SwitchStmt:\n\t\te.token(x.Switch, len(\"switch\"), tokKeyword, nil)\n\tcase *ast.TypeAssertExpr:\n\t\tif x.Type == nil {\n\t\t\tpos := e.findKeyword(\"type\", x.Lparen, x.Rparen)\n\t\t\te.token(pos, len(\"type\"), tokKeyword, nil)\n\t\t}\n\tcase *ast.TypeSpec:\n\tcase *ast.TypeSwitchStmt:\n\t\te.token(x.Switch, len(\"switch\"), tokKeyword, nil)\n\tcase *ast.UnaryExpr:\n\t\te.token(x.OpPos, len(x.Op.String()), tokOperator, nil)\n\tcase *ast.ValueSpec:\n\t// things only seen with parsing or type errors, so ignore them\n\tcase *ast.BadDecl, *ast.BadExpr, *ast.BadStmt:\n\t\treturn true\n\t// not going to see these\n\tcase *ast.File, *ast.Package:\n\t\te.unexpected(fmt.Sprintf(\"implement %T %s\", x, e.pgf.Tok.PositionFor(x.Pos(), false)))\n\t// other things we knowingly ignore\n\tcase *ast.Comment, *ast.CommentGroup:\n\t\tpop()\n\t\treturn false\n\tdefault:\n\t\te.unexpected(fmt.Sprintf(\"failed to implement %T\", x))\n\t}\n\treturn true\n}\n\nfunc (e *encoded) ident(x *ast.Ident) {\n\tif e.ti == nil {\n\t\twhat, mods := e.unkIdent(x)\n\t\tif what != \"\" {\n\t\t\te.token(x.Pos(), len(x.String()), what, mods)\n\t\t}\n\t\tif semDebug {\n\t\t\tlog.Printf(\" nil %s/nil/nil %q %v %s\", x.String(), what, mods, e.strStack())\n\t\t}\n\t\treturn\n\t}\n\tdef := e.ti.Defs[x]\n\tif def != nil {\n\t\twhat, mods := e.definitionFor(x, def)\n\t\tif what != \"\" {\n\t\t\te.token(x.Pos(), len(x.String()), what, mods)\n\t\t}\n\t\tif semDebug {\n\t\t\tlog.Printf(\" for %s/%T/%T got %s %v (%s)\", x.String(), def, def.Type(), what, mods, e.strStack())\n\t\t}\n\t\treturn\n\t}\n\tuse := e.ti.Uses[x]\n\ttok := func(pos token.Pos, lng int, tok tokenType, mods []string) {\n\t\te.token(pos, lng, tok, mods)\n\t\tq := \"nil\"\n\t\tif use != nil {\n\t\t\tq = fmt.Sprintf(\"%T\", use.Type())\n\t\t}\n\t\tif semDebug {\n\t\t\tlog.Printf(\" use %s/%T/%s got %s %v (%s)\", x.String(), use, q, tok, mods, e.strStack())\n\t\t}\n\t}\n\n\tswitch y := use.(type) {\n\tcase nil:\n\t\twhat, mods := e.unkIdent(x)\n\t\tif what != \"\" {\n\t\t\ttok(x.Pos(), len(x.String()), what, mods)\n\t\t} else if semDebug {\n\t\t\t// tok() wasn't called, so didn't log\n\t\t\tlog.Printf(\" nil %s/%T/nil %q %v (%s)\", x.String(), use, what, mods, e.strStack())\n\t\t}\n\t\treturn\n\tcase *types.Builtin:\n\t\ttok(x.NamePos, len(x.Name), tokFunction, []string{\"defaultLibrary\"})\n\tcase *types.Const:\n\t\tmods := []string{\"readonly\"}\n\t\ttt := y.Type()\n\t\tif _, ok := tt.(*types.Basic); ok {\n\t\t\ttok(x.Pos(), len(x.String()), tokVariable, mods)\n\t\t\tbreak\n\t\t}\n\t\tif ttx, ok := tt.(*types.Named); ok {\n\t\t\tif x.String() == \"iota\" {\n\t\t\t\te.unexpected(fmt.Sprintf(\"iota:%T\", ttx))\n\t\t\t}\n\t\t\tif _, ok := ttx.Underlying().(*types.Basic); ok {\n\t\t\t\ttok(x.Pos(), len(x.String()), tokVariable, mods)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\te.unexpected(fmt.Sprintf(\"%q/%T\", x.String(), tt))\n\t\t}\n\t\t// can this happen? Don't think so\n\t\te.unexpected(fmt.Sprintf(\"%s %T %#v\", x.String(), tt, tt))\n\tcase *types.Func:\n\t\ttok(x.Pos(), len(x.Name), tokFunction, nil)\n\tcase *types.Label:\n\t\t// nothing to map it to\n\tcase *types.Nil:\n\t\t// nil is a predeclared identifier\n\t\ttok(x.Pos(), len(\"nil\"), tokVariable, []string{\"readonly\", \"defaultLibrary\"})\n\tcase *types.PkgName:\n\t\ttok(x.Pos(), len(x.Name), tokNamespace, nil)\n\tcase *types.TypeName: // could be a tokTpeParam\n\t\tvar mods []string\n\t\tif _, ok := y.Type().(*types.Basic); ok {\n\t\t\tmods = []string{\"defaultLibrary\"}\n\t\t} else if _, ok := y.Type().(*typeparams.TypeParam); ok {\n\t\t\ttok(x.Pos(), len(x.String()), tokTypeParam, mods)\n\t\t\tbreak\n\t\t}\n\t\ttok(x.Pos(), len(x.String()), tokType, mods)\n\tcase *types.Var:\n\t\tif isSignature(y) {\n\t\t\ttok(x.Pos(), len(x.Name), tokFunction, nil)\n\t\t} else if _, ok := y.Type().(*typeparams.TypeParam); ok {\n\t\t\ttok(x.Pos(), len(x.Name), tokTypeParam, nil)\n\t\t} else {\n\t\t\ttok(x.Pos(), len(x.Name), tokVariable, nil)\n\t\t}\n\tdefault:\n\t\t// can't happen\n\t\tif use == nil {\n\t\t\tmsg := fmt.Sprintf(\"%#v/%#v %#v %#v\", x, x.Obj, e.ti.Defs[x], e.ti.Uses[x])\n\t\t\te.unexpected(msg)\n\t\t}\n\t\tif use.Type() != nil {\n\t\t\te.unexpected(fmt.Sprintf(\"%s %T/%T,%#v\", x.String(), use, use.Type(), use))\n\t\t} else {\n\t\t\te.unexpected(fmt.Sprintf(\"%s %T\", x.String(), use))\n\t\t}\n\t}\n}\n\nfunc isSignature(use types.Object) bool {\n\tif true {\n\t\treturn false //PJW: fix after generics seem ok\n\t}\n\tif _, ok := use.(*types.Var); !ok {\n\t\treturn false\n\t}\n\tv := use.Type()\n\tif v == nil {\n\t\treturn false\n\t}\n\tif _, ok := v.(*types.Signature); ok {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// both e.ti.Defs and e.ti.Uses are nil. use the parse stack.\n// a lot of these only happen when the package doesn't compile\n// but in that case it is all best-effort from the parse tree\nfunc (e *encoded) unkIdent(x *ast.Ident) (tokenType, []string) {\n\tdef := []string{\"definition\"}\n\tn := len(e.stack) - 2 // parent of Ident\n\tif n < 0 {\n\t\te.unexpected(\"no stack?\")\n\t\treturn \"\", nil\n\t}\n\tswitch nd := e.stack[n].(type) {\n\tcase *ast.BinaryExpr, *ast.UnaryExpr, *ast.ParenExpr, *ast.StarExpr,\n\t\t*ast.IncDecStmt, *ast.SliceExpr, *ast.ExprStmt, *ast.IndexExpr,\n\t\t*ast.ReturnStmt, *ast.ChanType, *ast.SendStmt,\n\t\t*ast.ForStmt, // possibly incomplete\n\t\t*ast.IfStmt, /* condition */\n\t\t*ast.KeyValueExpr: // either key or value\n\t\treturn tokVariable, nil\n\tcase *typeparams.IndexListExpr: // generic?\n\t\treturn tokVariable, nil\n\tcase *ast.Ellipsis:\n\t\treturn tokType, nil\n\tcase *ast.CaseClause:\n\t\tif n-2 >= 0 {\n\t\t\tif _, ok := e.stack[n-2].(*ast.TypeSwitchStmt); ok {\n\t\t\t\treturn tokType, nil\n\t\t\t}\n\t\t}\n\t\treturn tokVariable, nil\n\tcase *ast.ArrayType:\n\t\tif x == nd.Len {\n\t\t\t// or maybe a Type Param, but we can't just from the parse tree\n\t\t\treturn tokVariable, nil\n\t\t} else {\n\t\t\treturn tokType, nil\n\t\t}\n\tcase *ast.MapType:\n\t\treturn tokType, nil\n\tcase *ast.CallExpr:\n\t\tif x == nd.Fun {\n\t\t\treturn tokFunction, nil\n\t\t}\n\t\treturn tokVariable, nil\n\tcase *ast.SwitchStmt:\n\t\treturn tokVariable, nil\n\tcase *ast.TypeAssertExpr:\n\t\tif x == nd.X {\n\t\t\treturn tokVariable, nil\n\t\t} else if x == nd.Type {\n\t\t\treturn tokType, nil\n\t\t}\n\tcase *ast.ValueSpec:\n\t\tfor _, p := range nd.Names {\n\t\t\tif p == x {\n\t\t\t\treturn tokVariable, def\n\t\t\t}\n\t\t}\n\t\tfor _, p := range nd.Values {\n\t\t\tif p == x {\n\t\t\t\treturn tokVariable, nil\n\t\t\t}\n\t\t}\n\t\treturn tokType, nil\n\tcase *ast.SelectorExpr: // e.ti.Selections[nd] is nil, so no help\n\t\tif n-1 >= 0 {\n\t\t\tif ce, ok := e.stack[n-1].(*ast.CallExpr); ok {\n\t\t\t\t// ... CallExpr SelectorExpr Ident (_.x())\n\t\t\t\tif ce.Fun == nd && nd.Sel == x {\n\t\t\t\t\treturn tokFunction, nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn tokVariable, nil\n\tcase *ast.AssignStmt:\n\t\tfor _, p := range nd.Lhs {\n\t\t\t// x := ..., or x = ...\n\t\t\tif p == x {\n\t\t\t\tif nd.Tok != token.DEFINE {\n\t\t\t\t\tdef = nil\n\t\t\t\t}\n\t\t\t\treturn tokVariable, def\n\t\t\t}\n\t\t}\n\t\t// RHS, = x\n\t\treturn tokVariable, nil\n\tcase *ast.TypeSpec: // it's a type if it is either the Name or the Type\n\t\tif x == nd.Type {\n\t\t\tdef = nil\n\t\t}\n\t\treturn tokType, def\n\tcase *ast.Field:\n\t\t// ident could be type in a field, or a method in an interface type, or a variable\n\t\tif x == nd.Type {\n\t\t\treturn tokType, nil\n\t\t}\n\t\tif n-2 >= 0 {\n\t\t\t_, okit := e.stack[n-2].(*ast.InterfaceType)\n\t\t\t_, okfl := e.stack[n-1].(*ast.FieldList)\n\t\t\tif okit && okfl {\n\t\t\t\treturn tokMethod, def\n\t\t\t}\n\t\t}\n\t\treturn tokVariable, nil\n\tcase *ast.LabeledStmt, *ast.BranchStmt:\n\t\t// nothing to report\n\tcase *ast.CompositeLit:\n\t\tif nd.Type == x {\n\t\t\treturn tokType, nil\n\t\t}\n\t\treturn tokVariable, nil\n\tcase *ast.RangeStmt:\n\t\tif nd.Tok != token.DEFINE {\n\t\t\tdef = nil\n\t\t}\n\t\treturn tokVariable, def\n\tcase *ast.FuncDecl:\n\t\treturn tokFunction, def\n\tdefault:\n\t\tmsg := fmt.Sprintf(\"%T undexpected: %s %s%q\", nd, x.Name, e.strStack(), e.srcLine(x))\n\t\te.unexpected(msg)\n\t}\n\treturn \"\", nil\n}\n\nfunc isDeprecated(n *ast.CommentGroup) bool {\n\tif n == nil {\n\t\treturn false\n\t}\n\tfor _, c := range n.List {\n\t\tif strings.HasPrefix(c.Text, \"// Deprecated\") {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (e *encoded) definitionFor(x *ast.Ident, def types.Object) (tokenType, []string) {\n\t// PJW: def == types.Label? probably a nothing\n\t// PJW: look into replaceing these syntactic tests with types more generally\n\tmods := []string{\"definition\"}\n\tfor i := len(e.stack) - 1; i >= 0; i-- {\n\t\ts := e.stack[i]\n\t\tswitch y := s.(type) {\n\t\tcase *ast.AssignStmt, *ast.RangeStmt:\n\t\t\tif x.Name == \"_\" {\n\t\t\t\treturn \"\", nil // not really a variable\n\t\t\t}\n\t\t\treturn tokVariable, mods\n\t\tcase *ast.GenDecl:\n\t\t\tif isDeprecated(y.Doc) {\n\t\t\t\tmods = append(mods, \"deprecated\")\n\t\t\t}\n\t\t\tif y.Tok == token.CONST {\n\t\t\t\tmods = append(mods, \"readonly\")\n\t\t\t}\n\t\t\treturn tokVariable, mods\n\t\tcase *ast.FuncDecl:\n\t\t\t// If x is immediately under a FuncDecl, it is a function or method\n\t\t\tif i == len(e.stack)-2 {\n\t\t\t\tif isDeprecated(y.Doc) {\n\t\t\t\t\tmods = append(mods, \"deprecated\")\n\t\t\t\t}\n\t\t\t\tif y.Recv != nil {\n\t\t\t\t\treturn tokMethod, mods\n\t\t\t\t}\n\t\t\t\treturn tokFunction, mods\n\t\t\t}\n\t\t\t// if x < ... < FieldList < FuncDecl, this is the receiver, a variable\n\t\t\tif _, ok := e.stack[i+1].(*ast.FieldList); ok {\n\t\t\t\treturn tokVariable, nil\n\t\t\t}\n\t\t\t// if x < ... < FieldList < FuncType < FuncDecl, this is a param\n\t\t\treturn tokParameter, mods\n\t\tcase *ast.FuncType:\n\t\t\treturn tokParameter, mods\n\t\tcase *ast.InterfaceType:\n\t\t\treturn tokMethod, mods\n\t\tcase *ast.TypeSpec:\n\t\t\t// GenDecl/Typespec/FuncType/FieldList/Field/Ident\n\t\t\t// (type A func(b uint64)) (err error)\n\t\t\t// b and err should not be tokType, but tokVaraible\n\t\t\t// and in GenDecl/TpeSpec/StructType/FieldList/Field/Ident\n\t\t\t// (type A struct{b uint64}\n\t\t\t// but on type B struct{C}), C is a type, but is not being defined.\n\t\t\t// GenDecl/TypeSpec/FieldList/Field/Ident is a typeParam\n\t\t\tif _, ok := e.stack[i+1].(*ast.FieldList); ok {\n\t\t\t\treturn tokTypeParam, mods\n\t\t\t}\n\t\t\tfldm := e.stack[len(e.stack)-2]\n\t\t\tif fld, ok := fldm.(*ast.Field); ok {\n\t\t\t\t// if len(fld.names) == 0 this is a tokType, being used\n\t\t\t\tif len(fld.Names) == 0 {\n\t\t\t\t\treturn tokType, nil\n\t\t\t\t}\n\t\t\t\treturn tokVariable, mods\n\t\t\t}\n\t\t\treturn tokType, mods\n\t\t}\n\t}\n\t// can't happen\n\tmsg := fmt.Sprintf(\"failed to find the decl for %s\", e.pgf.Tok.PositionFor(x.Pos(), false))\n\te.unexpected(msg)\n\treturn \"\", []string{\"\"}\n}\n\nfunc (e *encoded) multiline(start, end token.Pos, val string, tok tokenType) {\n\tf := e.fset.File(start)\n\t// the hard part is finding the lengths of lines. include the \\n\n\tleng := func(line int) int {\n\t\tn := f.LineStart(line)\n\t\tif line >= f.LineCount() {\n\t\t\treturn f.Size() - int(n)\n\t\t}\n\t\treturn int(f.LineStart(line+1) - n)\n\t}\n\tspos := e.fset.PositionFor(start, false)\n\tepos := e.fset.PositionFor(end, false)\n\tsline := spos.Line\n\teline := epos.Line\n\t// first line is from spos.Column to end\n\te.token(start, leng(sline)-spos.Column, tok, nil) // leng(sline)-1 - (spos.Column-1)\n\tfor i := sline + 1; i < eline; i++ {\n\t\t// intermediate lines are from 1 to end\n\t\te.token(f.LineStart(i), leng(i)-1, tok, nil) // avoid the newline\n\t}\n\t// last line is from 1 to epos.Column\n\te.token(f.LineStart(eline), epos.Column-1, tok, nil) // columns are 1-based\n}\n\n// findKeyword finds a keyword rather than guessing its location\nfunc (e *encoded) findKeyword(keyword string, start, end token.Pos) token.Pos {\n\toffset := int(start) - e.pgf.Tok.Base()\n\tlast := int(end) - e.pgf.Tok.Base()\n\tbuf := e.pgf.Src\n\tidx := bytes.Index(buf[offset:last], []byte(keyword))\n\tif idx != -1 {\n\t\treturn start + token.Pos(idx)\n\t}\n\t//(in unparsable programs: type _ <-<-chan int)\n\te.unexpected(fmt.Sprintf(\"not found:%s %v\", keyword, e.fset.PositionFor(start, false)))\n\treturn token.NoPos\n}\n\nfunc (e *encoded) init() error {\n\te.start = token.Pos(e.pgf.Tok.Base())\n\te.end = e.start + token.Pos(e.pgf.Tok.Size())\n\tif e.rng == nil {\n\t\treturn nil\n\t}\n\tspan, err := e.pgf.Mapper.RangeSpan(*e.rng)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"range span (%w) error for %s\", err, e.pgf.File.Name)\n\t}\n\te.end = e.start + token.Pos(span.End().Offset())\n\te.start += token.Pos(span.Start().Offset())\n\treturn nil\n}\n\nfunc (e *encoded) Data() []uint32 {\n\t// binary operators, at least, will be out of order\n\tsort.Slice(e.items, func(i, j int) bool {\n\t\tif e.items[i].line != e.items[j].line {\n\t\t\treturn e.items[i].line < e.items[j].line\n\t\t}\n\t\treturn e.items[i].start < e.items[j].start\n\t})\n\ttypeMap, modMap := e.maps()\n\t// each semantic token needs five values\n\t// (see Integer Encoding for Tokens in the LSP spec)\n\tx := make([]uint32, 5*len(e.items))\n\tvar j int\n\tvar last semItem\n\tfor i := 0; i < len(e.items); i++ {\n\t\titem := e.items[i]\n\t\ttyp, ok := typeMap[item.typeStr]\n\t\tif !ok {\n\t\t\tcontinue // client doesn't want typeStr\n\t\t}\n\t\tif item.typeStr == tokString && e.noStrings {\n\t\t\tcontinue\n\t\t}\n\t\tif item.typeStr == tokNumber && e.noNumbers {\n\t\t\tcontinue\n\t\t}\n\t\tif j == 0 {\n\t\t\tx[0] = e.items[0].line\n\t\t} else {\n\t\t\tx[j] = item.line - last.line\n\t\t}\n\t\tx[j+1] = item.start\n\t\tif j > 0 && x[j] == 0 {\n\t\t\tx[j+1] = item.start - last.start\n\t\t}\n\t\tx[j+2] = item.len\n\t\tx[j+3] = uint32(typ)\n\t\tmask := 0\n\t\tfor _, s := range item.mods {\n\t\t\t// modMap[s] is 0 if the client doesn't want this modifier\n\t\t\tmask |= modMap[s]\n\t\t}\n\t\tx[j+4] = uint32(mask)\n\t\tj += 5\n\t\tlast = item\n\t}\n\treturn x[:j]\n}\n\nfunc (e *encoded) importSpec(d *ast.ImportSpec) {\n\t// a local package name or the last component of the Path\n\tif d.Name != nil {\n\t\tnm := d.Name.String()\n\t\tif nm != \"_\" && nm != \".\" {\n\t\t\te.token(d.Name.Pos(), len(nm), tokNamespace, nil)\n\t\t}\n\t\treturn // don't mark anything for . or _\n\t}\n\tval := d.Path.Value\n\tif len(val) < 2 || val[0] != '\"' || val[len(val)-1] != '\"' {\n\t\t// avoid panics on imports without a properly quoted string\n\t\treturn\n\t}\n\tnm := val[1 : len(val)-1] // remove surrounding \"s\n\t// Import strings are implementation defined. Try to match with parse information.\n\tx, err := e.pkg.GetImport(nm)\n\tif err != nil {\n\t\t// unexpected, but impact is that maybe some import is not colored\n\t\treturn\n\t}\n\t// expect that nm is x.PkgPath and that x.Name() is a component of it\n\tif x.PkgPath() != nm {\n\t\t// don't know how or what to color (if this can happen at all)\n\t\treturn\n\t}\n\t// this is not a precise test: imagine \"github.com/nasty/v/v2\"\n\tj := strings.LastIndex(nm, x.Name())\n\tif j == -1 {\n\t\t// name doesn't show up, for whatever reason, so nothing to report\n\t\treturn\n\t}\n\tstart := d.Path.Pos() + 1 + token.Pos(j) // skip the initial quote\n\te.token(start, len(x.Name()), tokNamespace, nil)\n}\n\n// log unexpected state\nfunc (e *encoded) unexpected(msg string) {\n\tif semDebug {\n\t\tpanic(msg)\n\t}\n\tevent.Error(e.ctx, e.strStack(), errors.New(msg))\n}\n\n// SemType returns a string equivalent of the type, for gopls semtok\nfunc SemType(n int) string {\n\ttokTypes := SemanticTypes()\n\ttokMods := SemanticModifiers()\n\tif n >= 0 && n < len(tokTypes) {\n\t\treturn tokTypes[n]\n\t}\n\treturn fmt.Sprintf(\"?%d[%d,%d]?\", n, len(tokTypes), len(tokMods))\n}\n\n// SemMods returns the []string equivalent of the mods, for gopls semtok.\nfunc SemMods(n int) []string {\n\ttokMods := SemanticModifiers()\n\tmods := []string{}\n\tfor i := 0; i < len(tokMods); i++ {\n\t\tif (n & (1 << uint(i))) != 0 {\n\t\t\tmods = append(mods, tokMods[i])\n\t\t}\n\t}\n\treturn mods\n}\n\nfunc (e *encoded) maps() (map[tokenType]int, map[string]int) {\n\ttmap := make(map[tokenType]int)\n\tmmap := make(map[string]int)\n\tfor i, t := range e.tokTypes {\n\t\ttmap[tokenType(t)] = i\n\t}\n\tfor i, m := range e.tokMods {\n\t\tmmap[m] = 1 << uint(i) // go 1.12 compatibility\n\t}\n\treturn tmap, mmap\n}\n\n// SemanticTypes to use in case there is no client, as in the command line, or tests\nfunc SemanticTypes() []string {\n\treturn semanticTypes[:]\n}\n\n// SemanticModifiers to use in case there is no client.\nfunc SemanticModifiers() []string {\n\treturn semanticModifiers[:]\n}\n\nvar (\n\tsemanticTypes = [...]string{\n\t\t\"namespace\", \"type\", \"class\", \"enum\", \"interface\",\n\t\t\"struct\", \"typeParameter\", \"parameter\", \"variable\", \"property\", \"enumMember\",\n\t\t\"event\", \"function\", \"method\", \"macro\", \"keyword\", \"modifier\", \"comment\",\n\t\t\"string\", \"number\", \"regexp\", \"operator\",\n\t}\n\tsemanticModifiers = [...]string{\n\t\t\"declaration\", \"definition\", \"readonly\", \"static\",\n\t\t\"deprecated\", \"abstract\", \"async\", \"modification\", \"documentation\", \"defaultLibrary\",\n\t}\n)\n","uri":"file:///Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/semantic.go","version":1}} | |
[Trace - 20:52:09.413 PM] Sending response 'workspace/configuration - (1)' in 0ms. | |
Result: [{"hints":{"assignVariableTypes":true,"compositeLiteralFields":true,"compositeLiteralTypes":true,"constantValues":true,"functionTypeParameters":true,"parameterNames":true,"rangeVariableTypes":true},"hoverKind":"Structured","semanticTokens":true}] | |
[Trace - 20:52:09.414 PM] Sending request 'textDocument/inlayHint - (2)'. | |
Params: {"range":{"end":{"character":0,"line":925},"start":{"character":0,"line":797}},"textDocument":{"uri":"file:///Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/semantic.go"}} | |
[Trace - 20:52:09.441 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 go env for /Users/ben/Development/YouCompleteMe/golang-tools\n(root /Users/ben/Development/YouCompleteMe/golang-tools)\n(go version go version go1.19 darwin/arm64)\n(valid build configuration = true)\n(build flags: [])\nGOSUMDB=sum.golang.org\nGOMODCACHE=/Users/ben/go/pkg/mod\nGONOPROXY=\nGOPRIVATE=\nGOFLAGS=-modcacherw\nGOINSECURE=\nGOMOD=/Users/ben/Development/YouCompleteMe/golang-tools/go.mod\nGOPATH=/Users/ben/go\nGONOSUMDB=\nGOCACHE=/Users/ben/Library/Caches/go-build\nGOROOT=/opt/homebrew/Cellar/go/1.19/libexec\nGOWORK=\nGOPROXY=https://proxy.golang.org,direct\nGO111MODULE=\n\n"} | |
[Trace - 20:52:09.751 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 go/packages.Load #1\n\tsnapshot=0\n\tdirectory=/Users/ben/Development/YouCompleteMe/golang-tools\n\tquery=[builtin golang.org/x/tools/...]\n\tpackages=571\n"} | |
[Trace - 20:52:09.754 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 go/packages.Load #1: updating metadata for 610 packages\n"} | |
[Trace - 20:52:09.861 PM] Received notification 'window/showMessage'. | |
Params: {"type":3,"message":"Finished loading packages."} | |
[Trace - 20:52:09.861 PM] Received request 'client/registerCapability - (2)'. | |
Params: {"registrations":[{"id":"workspace/didChangeWatchedFiles-0","method":"workspace/didChangeWatchedFiles","registerOptions":{"watchers":[{"globPattern":"**/*.{go,mod,sum,work}","kind":7},{"globPattern":"{/Users/ben/Development/YouCompleteMe/golang-tools/benchmark,/Users/ben/Development/YouCompleteMe/golang-tools/benchmark/parse,/Users/ben/Development/YouCompleteMe/golang-tools/blog,/Users/ben/Development/YouCompleteMe/golang-tools/blog/atom,/Users/ben/Development/YouCompleteMe/golang-tools/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/auth,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/auth/authtest,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/auth/cookieauth,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/auth/gitauth,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/auth/netrcauth,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/benchcmp,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/bundle,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/callgraph,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/compilebench,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/cover,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/digraph,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/eg,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/file2fuzz,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/fiximports,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/getgo,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/getgo/server,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/go-contrib-init,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/godex,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/godoc,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/goimports,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/gomvpkg,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/gorename,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/gotype,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/goyacc,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/guru,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/guru/serial,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/html2article,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/present,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/present2md,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/signature-fuzzer,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/signature-fuzzer/fuzz-driver,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/signature-fuzzer/fuzz-runner,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/signature-fuzzer/internal,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/signature-fuzzer/internal/fuzz-generator,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/splitdwarf,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/splitdwarf/internal,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/splitdwarf/internal/macho,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/ssadump,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/stress,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/stringer,/Users/ben/Development/YouCompleteMe/golang-tools/cmd/toolstash,/Users/ben/Development/YouCompleteMe/golang-tools/container,/Users/ben/Development/YouCompleteMe/golang-tools/container/intsets,/Users/ben/Development/YouCompleteMe/golang-tools/copyright,/Users/ben/Development/YouCompleteMe/golang-tools/cover,/Users/ben/Development/YouCompleteMe/golang-tools/go,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/analysistest,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/internal,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/internal/analysisflags,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/internal/checker,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/internal/facts,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/multichecker,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/asmdecl,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/assign,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/atomic,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/atomicalign,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/bools,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/buildssa,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/buildtag,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/cgocall,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/composite,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/copylock,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/ctrlflow,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/deepequalerrors,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/errorsas,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/fieldalignment,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/fieldalignment/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/fieldalignment/cmd/fieldalignment,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/findcall,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/findcall/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/findcall/cmd/findcall,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/framepointer,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/httpresponse,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/ifaceassert,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/ifaceassert/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/ifaceassert/cmd/ifaceassert,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/inspect,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/internal,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/internal/analysisutil,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/loopclosure,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/lostcancel,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/lostcancel/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/lostcancel/cmd/lostcancel,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/nilfunc,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/nilness,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/nilness/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/nilness/cmd/nilness,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/pkgfact,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/printf,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/reflectvaluecompare,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/shadow,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/shadow/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/shadow/cmd/shadow,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/shift,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/sigchanyzer,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/sortslice,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/stdmethods,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/stringintconv,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/stringintconv/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/stringintconv/cmd/stringintconv,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/structtag,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/testinggoroutine,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/tests,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/timeformat,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/unmarshal,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/unmarshal/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/unmarshal/cmd/unmarshal,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/unreachable,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/unsafeptr,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/unusedresult,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/unusedwrite,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/passes/usesgenerics,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/singlechecker,/Users/ben/Development/YouCompleteMe/golang-tools/go/analysis/unitchecker,/Users/ben/Development/YouCompleteMe/golang-tools/go/ast,/Users/ben/Development/YouCompleteMe/golang-tools/go/ast/astutil,/Users/ben/Development/YouCompleteMe/golang-tools/go/ast/inspector,/Users/ben/Development/YouCompleteMe/golang-tools/go/buildutil,/Users/ben/Development/YouCompleteMe/golang-tools/go/callgraph,/Users/ben/Development/YouCompleteMe/golang-tools/go/callgraph/cha,/Users/ben/Development/YouCompleteMe/golang-tools/go/callgraph/rta,/Users/ben/Development/YouCompleteMe/golang-tools/go/callgraph/static,/Users/ben/Development/YouCompleteMe/golang-tools/go/callgraph/vta,/Users/ben/Development/YouCompleteMe/golang-tools/go/callgraph/vta/internal,/Users/ben/Development/YouCompleteMe/golang-tools/go/callgraph/vta/internal/trie,/Users/ben/Development/YouCompleteMe/golang-tools/go/cfg,/Users/ben/Development/YouCompleteMe/golang-tools/go/expect,/Users/ben/Development/YouCompleteMe/golang-tools/go/gccgoexportdata,/Users/ben/Development/YouCompleteMe/golang-tools/go/gcexportdata,/Users/ben/Development/YouCompleteMe/golang-tools/go/internal,/Users/ben/Development/YouCompleteMe/golang-tools/go/internal/cgo,/Users/ben/Development/YouCompleteMe/golang-tools/go/internal/gccgoimporter,/Users/ben/Development/YouCompleteMe/golang-tools/go/internal/gcimporter,/Users/ben/Development/YouCompleteMe/golang-tools/go/internal/packagesdriver,/Users/ben/Development/YouCompleteMe/golang-tools/go/internal/pkgbits,/Users/ben/Development/YouCompleteMe/golang-tools/go/loader,/Users/ben/Development/YouCompleteMe/golang-tools/go/packages,/Users/ben/Development/YouCompleteMe/golang-tools/go/packages/gopackages,/Users/ben/Development/YouCompleteMe/golang-tools/go/packages/packagestest,/Users/ben/Development/YouCompleteMe/golang-tools/go/pointer,/Users/ben/Development/YouCompleteMe/golang-tools/go/ssa,/Users/ben/Development/YouCompleteMe/golang-tools/go/ssa/interp,/Users/ben/Development/YouCompleteMe/golang-tools/go/ssa/ssautil,/Users/ben/Development/YouCompleteMe/golang-tools/go/types,/Users/ben/Development/YouCompleteMe/golang-tools/go/types/objectpath,/Users/ben/Development/YouCompleteMe/golang-tools/go/types/typeutil,/Users/ben/Development/YouCompleteMe/golang-tools/go/vcs,/Users/ben/Development/YouCompleteMe/golang-tools/godoc,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/analysis,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/redirect,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/static,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/util,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/vfs,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/vfs/gatefs,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/vfs/httpfs,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/vfs/mapfs,/Users/ben/Development/YouCompleteMe/golang-tools/godoc/vfs/zipfs,/Users/ben/Development/YouCompleteMe/golang-tools/imports,/Users/ben/Development/YouCompleteMe/golang-tools/internal,/Users/ben/Development/YouCompleteMe/golang-tools/internal/analysisinternal,/Users/ben/Development/YouCompleteMe/golang-tools/internal/apidiff,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/core,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/export,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/export/eventtest,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/export/metric,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/export/ocagent,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/export/ocagent/wire,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/export/prometheus,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/keys,/Users/ben/Development/YouCompleteMe/golang-tools/internal/event/label,/Users/ben/Development/YouCompleteMe/golang-tools/internal/fakenet,/Users/ben/Development/YouCompleteMe/golang-tools/internal/fastwalk,/Users/ben/Development/YouCompleteMe/golang-tools/internal/gocommand,/Users/ben/Development/YouCompleteMe/golang-tools/internal/gopathwalk,/Users/ben/Development/YouCompleteMe/golang-tools/internal/imports,/Users/ben/Development/YouCompleteMe/golang-tools/internal/jsonrpc2,/Users/ben/Development/YouCompleteMe/golang-tools/internal/jsonrpc2/servertest,/Users/ben/Development/YouCompleteMe/golang-tools/internal/jsonrpc2_v2,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/embeddirective,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/fillreturns,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/fillstruct,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/infertypeargs,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/nonewvars,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/noresultvalues,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/simplifycompositelit,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/simplifyrange,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/simplifyslice,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/stubmethods,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/undeclaredname,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/unusedparams,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/unusedvariable,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/analysis/useany,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/browser,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/bug,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/cache,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/cmd,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/cmd/test,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/command,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/command/commandmeta,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/command/gen,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/debug,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/debug/log,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/debug/tag,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/diff,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/diff/difftest,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/diff/lcs,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/diff/myers,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/fake,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/fuzzy,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/helper,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/lsppos,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/lsprpc,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/mod,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/progress,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/protocol,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/regtest,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/safetoken,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/snippet,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/source,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/source/completion,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/template,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/tests,/Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/work,/Users/ben/Development/YouCompleteMe/golang-tools/internal/memoize,/Users/ben/Development/YouCompleteMe/golang-tools/internal/packagesinternal,/Users/ben/Development/YouCompleteMe/golang-tools/internal/persistent,/Users/ben/Development/YouCompleteMe/golang-tools/internal/proxydir,/Users/ben/Development/YouCompleteMe/golang-tools/internal/span,/Users/ben/Development/YouCompleteMe/golang-tools/internal/stack,/Users/ben/Development/YouCompleteMe/golang-tools/internal/stack/gostacks,/Users/ben/Development/YouCompleteMe/golang-tools/internal/stack/stacktest,/Users/ben/Development/YouCompleteMe/golang-tools/internal/testenv,/Users/ben/Development/YouCompleteMe/golang-tools/internal/tool,/Users/ben/Development/YouCompleteMe/golang-tools/internal/typeparams,/Users/ben/Development/YouCompleteMe/golang-tools/internal/typeparams/genericfeatures,/Users/ben/Development/YouCompleteMe/golang-tools/internal/typesinternal,/Users/ben/Development/YouCompleteMe/golang-tools/internal/xcontext,/Users/ben/Development/YouCompleteMe/golang-tools/playground,/Users/ben/Development/YouCompleteMe/golang-tools/playground/socket,/Users/ben/Development/YouCompleteMe/golang-tools/present,/Users/ben/Development/YouCompleteMe/golang-tools/refactor,/Users/ben/Development/YouCompleteMe/golang-tools/refactor/eg,/Users/ben/Development/YouCompleteMe/golang-tools/refactor/importgraph,/Users/ben/Development/YouCompleteMe/golang-tools/refactor/rename,/Users/ben/Development/YouCompleteMe/golang-tools/refactor/satisfy,/Users/ben/Development/YouCompleteMe/golang-tools/txtar}","kind":7}]}}]} | |
[Trace - 20:52:09.865 PM] Sending response 'client/registerCapability - (2)' in 4ms. | |
Result: | |
[Trace - 20:52:09.865 PM] Received request 'workspace/configuration - (3)'. | |
Params: {"items":[{"section":"gopls"}]} | |
[Trace - 20:52:09.866 PM] Sending response 'workspace/configuration - (3)' in 0ms. | |
Result: [{"hints":{"assignVariableTypes":true,"compositeLiteralFields":true,"compositeLiteralTypes":true,"constantValues":true,"functionTypeParameters":true,"parameterNames":true,"rangeVariableTypes":true},"hoverKind":"Structured","semanticTokens":true}] | |
[Trace - 20:52:09.867 PM] Received request 'workspace/configuration - (4)'. | |
Params: {"items":[{"scopeUri":"file:///Users/ben/Development/YouCompleteMe/golang-tools","section":"gopls"}]} | |
[Trace - 20:52:09.867 PM] Sending response 'workspace/configuration - (4)' in 0ms. | |
Result: [{"hints":{"assignVariableTypes":true,"compositeLiteralFields":true,"compositeLiteralTypes":true,"constantValues":true,"functionTypeParameters":true,"parameterNames":true,"rangeVariableTypes":true},"hoverKind":"Structured","semanticTokens":true}] | |
[Trace - 20:52:09.978 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 discovered missing identifiers: map[bracketPair:true]\n\tpackage=\"vendor/golang.org/x/text/unicode/bidi\"\n"} | |
[Trace - 20:52:09.979 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 discovered missing identifiers: map[encOpts:true encodeState:true]\n\tpackage=\"encoding/json\"\n"} | |
[Trace - 20:52:09.984 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 discovered missing identifiers: map[message:true]\n\tpackage=\"internal/profile\"\n"} | |
[Trace - 20:52:09.988 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 discovered missing identifiers: map[_Ctype___darwin_socklen_t:true _Ctype_uchar:true]\n\tpackage=\"net\"\n"} | |
[Trace - 20:52:09.990 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 discovered missing identifiers: map[nistPoint:true]\n\tpackage=\"crypto/elliptic\"\n"} | |
[Trace - 20:52:09.994 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:09 discovered missing identifiers: map[graphNode:true term:true]\n\tpackage=\"go/types\"\n"} | |
[Trace - 20:52:10.002 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:10 falling back to safe trimming due to type errors: [] or still-missing identifiers: map[_Ctype___uint32_t:true]\n\tpackage=\"net\"\n"} | |
[Trace - 20:52:10.036 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:10 discovered missing identifiers: map[abbrev:true]\n\tpackage=\"debug/dwarf\"\n"} | |
[Trace - 20:52:10.050 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:10 falling back to safe trimming due to type errors: [/opt/homebrew/Cellar/go/1.19/libexec/src/os/user/cgo_lookup_unix.go:195:19: int not declared by package C /opt/homebrew/Cellar/go/1.19/libexec/src/os/user/cgo_lookup_unix.go:198:27: cannot convert C._SC_GETPW_R_SIZE_MAX (untyped int constant 71) to bufferKind /opt/homebrew/Cellar/go/1.19/libexec/src/os/user/cgo_lookup_unix.go:199:27: cannot convert C._SC_GETGR_R_SIZE_MAX (untyped int constant 70) to bufferKind] or still-missing identifiers: map[_Ctype___darwin_gid_t:true _Ctype___darwin_uid_t:true _Ctype_long:true]\n\tpackage=\"os/user\"\n"} | |
[Trace - 20:52:10.094 PM] Received response 'textDocument/inlayHint - (2)' in 680ms. | |
Result: [{"position":{"line":800,"character":14},"label":[{"value":"msg:"}],"kind":2,"paddingRight":true},{"position":{"line":800,"character":26},"label":[{"value":"format:"}],"kind":2,"paddingRight":true},{"position":{"line":800,"character":45},"label":[{"value":"a...:"}],"kind":2,"paddingRight":true},{"position":{"line":800,"character":73},"label":[{"value":"p:"}],"kind":2,"paddingRight":true},{"position":{"line":800,"character":80},"label":[{"value":"adjusted:"}],"kind":2,"paddingRight":true},{"position":{"line":810,"character":5},"label":[{"value":"span.Span"}],"kind":1,"paddingLeft":true},{"position":{"line":810,"character":10},"label":[{"value":"error"}],"kind":1,"paddingLeft":true},{"position":{"line":810,"character":37},"label":[{"value":"r:"}],"kind":2,"paddingRight":true},{"position":{"line":812,"character":20},"label":[{"value":"format:"}],"kind":2,"paddingRight":true},{"position":{"line":812,"character":52},"label":[{"value":"a...:"}],"kind":2,"paddingRight":true},{"position":{"line":821,"character":12},"label":[{"value":"x:"}],"kind":2,"paddingRight":true},{"position":{"line":821,"character":21},"label":[{"value":"less:"}],"kind":2,"paddingRight":true},{"position":{"line":827,"character":8},"label":[{"value":"map[tokenType]int"}],"kind":1,"paddingLeft":true},{"position":{"line":827,"character":16},"label":[{"value":"map[string]int"}],"kind":1,"paddingLeft":true},{"position":{"line":830,"character":2},"label":[{"value":"[]uint32"}],"kind":1,"paddingLeft":true},{"position":{"line":833,"character":6},"label":[{"value":"int"}],"kind":1,"paddingLeft":true},{"position":{"line":834,"character":6},"label":[{"value":"semItem"}],"kind":1,"paddingLeft":true},{"position":{"line":835,"character":5},"label":[{"value":"int"}],"kind":1,"paddingLeft":true},{"position":{"line":835,"character":9},"label":[{"value":"bool"}],"kind":1,"paddingLeft":true},{"position":{"line":856,"character":6},"label":[{"value":"int"}],"kind":1,"paddingLeft":true},{"position":{"line":857,"character":7},"label":[{"value":"int"}],"kind":1,"paddingLeft":true},{"position":{"line":857,"character":10},"label":[{"value":"string"}],"kind":1,"paddingLeft":true},{"position":{"line":871,"character":4},"label":[{"value":"string"}],"kind":1,"paddingLeft":true},{"position":{"line":873,"character":11},"label":[{"value":"start:"}],"kind":2,"paddingRight":true},{"position":{"line":873,"character":25},"label":[{"value":"leng:"}],"kind":2,"paddingRight":true},{"position":{"line":873,"character":34},"label":[{"value":"typ:"}],"kind":2,"paddingRight":true},{"position":{"line":873,"character":48},"label":[{"value":"mods:"}],"kind":2,"paddingRight":true},{"position":{"line":877,"character":4},"label":[{"value":"string"}],"kind":1,"paddingLeft":true},{"position":{"line":882,"character":3},"label":[{"value":"string"}],"kind":1,"paddingLeft":true},{"position":{"line":884,"character":2},"label":[{"value":"source.Package"}],"kind":1,"paddingLeft":true},{"position":{"line":884,"character":7},"label":[{"value":"error"}],"kind":1,"paddingLeft":true},{"position":{"line":884,"character":27},"label":[{"value":"pkgPath:"}],"kind":2,"paddingRight":true},{"position":{"line":895,"character":2},"label":[{"value":"int"}],"kind":1,"paddingLeft":true},{"position":{"line":895,"character":24},"label":[{"value":"s:"}],"kind":2,"paddingRight":true},{"position":{"line":895,"character":28},"label":[{"value":"substr:"}],"kind":2,"paddingRight":true},{"position":{"line":900,"character":6},"label":[{"value":"token.Pos"}],"kind":1,"paddingLeft":true},{"position":{"line":901,"character":16},"label":[{"value":"leng:"}],"kind":2,"paddingRight":true},{"position":{"line":901,"character":31},"label":[{"value":"typ:"}],"kind":2,"paddingRight":true},{"position":{"line":901,"character":45},"label":[{"value":"mods:"}],"kind":2,"paddingRight":true},{"position":{"line":909,"character":13},"label":[{"value":"ctx:"}],"kind":2,"paddingRight":true},{"position":{"line":909,"character":20},"label":[{"value":"message:"}],"kind":2,"paddingRight":true},{"position":{"line":909,"character":34},"label":[{"value":"err:"}],"kind":2,"paddingRight":true},{"position":{"line":909,"character":45},"label":[{"value":"text:"}],"kind":2,"paddingRight":true},{"position":{"line":914,"character":9},"label":[{"value":"[]string"}],"kind":1,"paddingLeft":true},{"position":{"line":915,"character":8},"label":[{"value":"[]string"}],"kind":1,"paddingLeft":true},{"position":{"line":919,"character":20},"label":[{"value":"format:"}],"kind":2,"paddingRight":true},{"position":{"line":919,"character":35},"label":[{"value":"a...:"}],"kind":2,"paddingRight":true},{"position":{"line":924,"character":8},"label":[{"value":"[]string"}],"kind":1,"paddingLeft":true}] | |
[Trace - 20:52:10.143 PM] Received notification 'textDocument/publishDiagnostics'. | |
Params: {"uri":"file:///Users/ben/Development/YouCompleteMe/golang-tools/internal/lsp/semantic.go","version":1,"diagnostics":[]} | |
[Trace - 20:52:10.170 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:10 discovered missing identifiers: map[markdown:true]\n\tpackage=\"github.com/yuin/goldmark\"\n"} | |
[Trace - 20:52:10.285 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:10 discovered missing identifiers: map[sparseEntry:true]\n\tpackage=\"archive/tar\"\n"} | |
[Trace - 20:52:10.512 PM] Received notification 'window/logMessage'. | |
Params: {"type":3,"message":"2022/08/18 20:52:10 discovered missing identifiers: map[parser:true]\n\tpackage=\"golang.org/x/net/html\"\n"} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment