Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

x/tools/gopls: imports and go to definition mostly don't work #32360

Closed
natefinch opened this issue May 31, 2019 · 52 comments
Closed

x/tools/gopls: imports and go to definition mostly don't work #32360

natefinch opened this issue May 31, 2019 · 52 comments
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls.
Milestone

Comments

@natefinch
Copy link
Contributor

Please answer these questions before submitting your issue. Thanks!

What did you do?

add a line that uses a new import. Save.
or
click go to definition on basically anything

What did you expect to see?

import added
or
go to definition

What did you see instead?

no import added. Sometimes it'll format but not import. Most of the time it does neither.
or
doesn't go to definition, saying no definition found

Does this issue reproduce with the latest release (go1.12.5)?

yes

System details

go version go1.12.4 darwin/amd64
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/finchnat/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/finchnat"
GOPROXY=""
GORACE=""
GOROOT="/Users/finchnat/sdk/go1.12.4"
GOTMPDIR=""
GOTOOLDIR="/Users/finchnat/sdk/go1.12.4/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/finchnat/mcpp/go.mod"
GOROOT/bin/go version: go version go1.12.4 darwin/amd64
GOROOT/bin/go tool compile -V: compile version go1.12.4
uname -v: Darwin Kernel Version 17.7.0: Wed Apr 24 21:17:24 PDT 2019; root:xnu-4570.71.45~1/RELEASE_X86_64
ProductName:	Mac OS X
ProductVersion:	10.13.6
BuildVersion:	17G7024
lldb --version: lldb-1000.11.38.2
  Swift-4.2

$ gopls version
golang.org/x/tools/cmd/gopls
golang.org/x/tools@v0.0.0-20190528151238-d238219cc233 h1:Q8gfsz3A5sYwJeRvYP/nWvLYwU5af6MHYyS8QbI2x88=

"[go]": {
    "editor.snippetSuggestions": "none",
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
        "source.organizeImports": true
    },
},```
@gopherbot gopherbot added this to the Unreleased milestone May 31, 2019
@gopherbot gopherbot added the gopls Issues related to the Go language server, gopls. label May 31, 2019
@natefinch
Copy link
Contributor Author

For right now, imports are working in some files but not others. Go to definition is working. .... I haven't restarted VSCode since last night when imports and go to definition were both definitely broken.

¯\(ツ)

@natefinch
Copy link
Contributor Author

Also notably, restarting VSCode does not fix the problem for me.

@bmhatfield
Copy link

Note: I've been reporting and trying to gather data on Go To Definition not working with a specific example in #32209, though it's inconsistent in that a small project is fine, but a big project is not.

@natefinch
Copy link
Contributor Author

Awesome.... great debugging tip about showing gopls logs. Looks like it might be the same issue, I'm getting "no package found for x/y/z"

@natefinch
Copy link
Contributor Author

From my gopls log:

a ton of these:

[Error - 10:56:27 AM] unable to check package for file:///Users/finchnat/mcpp/data/household/gamesparks_test.go: parse: no package found for /Users/finchnat/mcpp/data/household/gamesparks_test.go

@natefinch
Copy link
Contributor Author

It's very weird... in two different files (both very small, like 30 lines) ... one imports correctly, one doesn't.... and yet in the one where it doesn't import, gopls isn't logging anything either.

@stamblerre
Copy link
Contributor

@natefinch: Are you able to attach a gopls log to this issue? Feel free to redact anything you need to. Are you using build tags in your files?

@stamblerre
Copy link
Contributor

@mdhender: Do you mind filing a separate issue? I would expect that your issue is likely related to the symlinks.

@natefinch
Copy link
Contributor Author

Here's logs from me opening the project, adding a line that should trigger goimports and saving (i.e. added _ = pq.NullTime{} - other parts of this project use pq, so it's not even a new import for the module).
Realized I was in a test file, so moved to a non-test file to try it out, did the same thing, added the line, saved. Nothing. Even waited several minutes in case something was slow, added a couple spaces and resaved. Still nothing.

[Info - 7:59:24 PM] #### Build info

golang.org/x/tools/cmd/gopls
golang.org/x/tools@v0.0.0-20190528151238-d238219cc233 h1:Q8gfsz3A5sYwJeRvYP/nWvLYwU5af6MHYyS8QbI2x88=
golang.org/x/sync@v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=

Go info

go version go1.12.4 darwin/amd64

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/finchnat/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/finchnat"
GOPROXY=""
GORACE=""
GOROOT="/Users/finchnat/sdk/go1.12.4"
GOTMPDIR=""
GOTOOLDIR="/Users/finchnat/sdk/go1.12.4/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/finchnat/mcpp/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/ch/4d1vgsv17jq0b3yfmnkl9thdk0jm7d/T/go-build539569301=/tmp/go-build -gno-record-gcc-switches -fno-common"

[Error - 8:00:00 PM] method "SetTraceNotification" not yet implemented
[Error - 8:00:00 PM] method "DidChangeConfiguration" not yet implemented
[Error - 8:00:00 PM] failed to run analyses for file:///Users/finchnat/mcpp/api/identity/key_server_test.go: analysis skipped due to errors in package: [/Users/finchnat/sdk/go1.12.4/src/os/user/lookup.go:62:9: undeclared name: listGroups /Users/finchnat/sdk/go1.12.4/src/os/user/lookup.go:57:9: undeclared name: lookupGroupId /Users/finchnat/sdk/go1.12.4/src/os/user/lookup.go:51:9: undeclared name: lookupGroup /Users/finchnat/sdk/go1.12.4/src/os/user/lookup.go:45:9: undeclared name: lookupUserId /Users/finchnat/sdk/go1.12.4/src/os/user/lookup.go:36:9: undeclared name: lookupUser /Users/finchnat/sdk/go1.12.4/src/os/user/lookup.go:15:41: undeclared name: current]
[Error - 8:08:09 PM] Request textDocument/hover failed.
Message: no identifier found
Code: 0
[Error - 8:08:14 PM] Request textDocument/hover failed.
Message: no identifier found
Code: 0
[Error - 8:08:36 PM] failed to run analyses for file:///Users/finchnat/mcpp/api/identity/key_server_test.go: failed prerequisites: printf@github.com/Mattel/mcpp/data/keys: failed prerequisites: printf@crypto/x509: failed prerequisites: printf@net: analysis skipped due to errors in package: [/Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:324:23: undeclared name: cgoLookupPTR /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:124:24: undeclared name: cgoLookupCNAME /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:108:23: undeclared name: cgoLookupPort /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:96:24: undeclared name: cgoLookupIP /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:81:24: undeclared name: cgoLookupHost]
[Error - 8:08:37 PM] failed to run analyses for file:///Users/finchnat/mcpp/api/identity/key_server_test.go: failed prerequisites: printf@github.com/Mattel/mcpp/data/keys: failed prerequisites: printf@crypto/x509: failed prerequisites: printf@net: analysis skipped due to errors in package: [/Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:324:23: undeclared name: cgoLookupPTR /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:124:24: undeclared name: cgoLookupCNAME /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:108:23: undeclared name: cgoLookupPort /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:96:24: undeclared name: cgoLookupIP /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:81:24: undeclared name: cgoLookupHost]
[Error - 8:08:55 PM] failed to run analyses for file:///Users/finchnat/mcpp/api/identity/key_server_test.go: failed prerequisites: printf@github.com/Mattel/mcpp/data/keys: failed prerequisites: printf@crypto/x509: failed prerequisites: printf@net: analysis skipped due to errors in package: [/Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:324:23: undeclared name: cgoLookupPTR /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:124:24: undeclared name: cgoLookupCNAME /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:108:23: undeclared name: cgoLookupPort /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:96:24: undeclared name: cgoLookupIP /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:81:24: undeclared name: cgoLookupHost]
unable to parse defer or go from *ast.BadStmt: no defer or go statement found
[Error - 8:08:56 PM] Request textDocument/codeAction failed.
Message: /Users/finchnat/mcpp/api/identity/key_server_test.go:29:2: illegal character U+005C ''
Code: 0
[Error - 8:08:56 PM] failed to run analyses for file:///Users/finchnat/mcpp/api/identity/key_server_test.go: failed prerequisites: printf@github.com/Mattel/mcpp/data/keys: failed prerequisites: printf@crypto/x509: failed prerequisites: printf@net: analysis skipped due to errors in package: [/Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:324:23: undeclared name: cgoLookupPTR /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:124:24: undeclared name: cgoLookupCNAME /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:108:23: undeclared name: cgoLookupPort /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:96:24: undeclared name: cgoLookupIP /Users/finchnat/sdk/go1.12.4/src/net/lookup_unix.go:81:24: undeclared name: cgoLookupHost]
[Info - 8:09:00 PM] no signature help for file:///Users/finchnat/mcpp/api/identity/key_server_test.go:28:9 : cannot find an enclosing function
[Error - 8:09:00 PM] Request textDocument/codeAction failed.
Message: /Users/finchnat/mcpp/api/identity/key_server_test.go:29:9: expected operand, found '.' (and 1 more errors)
Code: 0
[Info - 8:09:01 PM] no completions found for file:///Users/finchnat/mcpp/api/identity/key_server_test.go:28:8: cannot resolve pq
[Error - 8:09:01 PM] Request textDocument/codeAction failed.
Message: /Users/finchnat/mcpp/api/identity/key_server_test.go:30:5: expected ';', found ':='
Code: 0
[Info - 8:09:04 PM] no completions found for file:///Users/finchnat/mcpp/api/identity/key_server_test.go:28:9: cannot resolve pq
[Error - 8:09:32 PM] Request textDocument/hover failed.
Message: no room in queue
Code: -32000
[Error - 8:09:35 PM] Request textDocument/documentLink failed.
Message: no room in queue
Code: -32000
[Error - 8:09:35 PM] Request textDocument/codeAction failed.
Message: no room in queue
Code: -32000
[Error - 8:09:37 PM] Request textDocument/codeAction failed.
Message: no room in queue
Code: -32000
[Error - 8:09:43 PM] Request textDocument/documentLink failed.
Message: no room in queue
Code: -32000
[Error - 8:09:43 PM] Request textDocument/codeAction failed.
Message: no room in queue
Code: -32000
[Info - 8:09:44 PM] no completions found for file:///Users/finchnat/mcpp/api/identity/key_server_test.go:28:11: cannot resolve pq
[Error - 8:09:55 PM] Request textDocument/hover failed.
Message: no identifier found
Code: 0
[Info - 8:09:55 PM] no completions found for file:///Users/finchnat/mcpp/api/identity/token_server.go:39:8: cannot resolve pq
[Error - 8:09:55 PM] Request textDocument/codeAction failed.
Message: /Users/finchnat/mcpp/api/identity/token_server.go:41:21: expected ';', found ':='
Code: 0

@ThisEndUp
Copy link

I had the same problem -- failure of go to definition -- with a program that I downloaded (okta-hosted-login) and set up as a module not on my GOPATH. It compiled and ran, but I neglected to run
go mod init [myrepository]
Once I did that, go to definition started working.

Maybe this will help someone else like me, new to go modules, figure this out more quickly than I did!

@stamblerre
Copy link
Contributor

@natefinch: Can you try updating to the latest version of gopls? The "no room in queue" error was a bug that we recently fixed. Also, the last line of your log indicates that there is a parse error in your code, in which case gopls will not organize imports. Are you able to share the contents of the file or a small portion of the contents in which goimports did not run?

@stamblerre
Copy link
Contributor

@ThisEndUp: Thanks for the report. It's true that gopls will not work outside of $GOPATH unless you have initialized a module. We will work to make that more clear to the users.

@SteelPhase: Just to confirm - you replaced the actual name of the imported package with "package" everywhere in your example code and your logs?

@SteelPhase
Copy link

SteelPhase commented Jun 3, 2019

yes i did. I removed the log, as it wasn't representing the actual issue.

I think my issue can be better represented by this https://gist.github.com/SteelPhase/89e1057214050d694c085c0c6fb9a970

@stamblerre
Copy link
Contributor

@SteelPhase: Do you mind opening a new issue? Your case seems to be different from @natefinch's.

@SteelPhase
Copy link

I originally thought they were the same, but I resolved my issue by updating editor.codeActionsOnSaveTimeout to a higher value in vscode.

@stamblerre
Copy link
Contributor

Added the info to the wiki, thanks @SteelPhase! (https://github.com/golang/go/wiki/gopls#vscode)
@natefinch: May be worth trying this out, since it fits with your experience of goimports only working some percentage of the time. I don't see the cancellations in the logs you shared above, but even so, it's worth ruling it out.

@natefinch
Copy link
Contributor Author

That seems to have done it (though I have to set it higher than 3000 for it to be reliable).
It takes about 4-6 seconds to add an import in our main project. In smaller projects it takes less time. Note that this project is a hair under 80,000 LOC, so it's not like it's huge.

I updated gopls and ironically now I'm getting the no room in queue error. Maybe I was getting it before and it just wasn't being printed out, I don't know.

The parse error is weird. Like, the code compiles fine before I add one little line that doesn't change whether or not it compiles. (that's what I was just adding _ = pq.NullTime{} to ensure it'll compile after I add the line).

@SteelPhase
Copy link

SteelPhase commented Jun 4, 2019

I can corfirm having to set it higher than the 3000ms I was using previously as well. On windows, and a different project with module support enabled
organize imports took significantly longer.

[Trace - 11:41:14 PM] Received response 'textDocument/codeAction - (9)' in 6463ms.

go list -json appears to give a decent representation of the things my code is touching.

{
        "Dir": "A:\\Projects\\gvs\\VanguardAI\\pkg\\commands",
        "ImportPath": "github.com/SteelPhase/VanguardAI/pkg/commands",
        "Name": "commands",
        "Module": {
                "Path": "github.com/SteelPhase/VanguardAI",
                "Main": true,
                "Dir": "A:\\Projects\\gvs\\VanguardAI",
                "GoMod": "A:\\Projects\\gvs\\VanguardAI\\go.mod",
                "GoVersion": "1.12"
        },
        "Match": [
                "."
        ],
        "Stale": true,
        "StaleReason": "stale dependency: github.com/bwmarrin/discordgo",
        "GoFiles": [
                "commands.go"
        ],
        "Imports": [
                "github.com/bwmarrin/discordgo"
        ],
        "Deps": [
                "bufio",
                "bytes",
                "compress/flate",
                "compress/gzip",
                "compress/zlib",
                "container/list",
                "context",
                "crypto",
                "crypto/aes",
                "crypto/cipher",
                "crypto/des",
                "crypto/dsa",
                "crypto/ecdsa",
                "crypto/elliptic",
                "crypto/hmac",
                "crypto/internal/randutil",
                "crypto/internal/subtle",
                "crypto/md5",
                "crypto/rand",
                "crypto/rc4",
                "crypto/rsa",
                "crypto/sha1",
                "crypto/sha256",
                "crypto/sha512",
                "crypto/subtle",
                "crypto/tls",
                "crypto/x509",
                "crypto/x509/pkix",
                "encoding",
                "encoding/asn1",
                "encoding/base64",
                "encoding/binary",
                "encoding/hex",
                "encoding/json",
                "encoding/pem",
                "errors",
                "fmt",
                "github.com/bwmarrin/discordgo",
                "github.com/gorilla/websocket",
                "golang.org/x/crypto/internal/subtle",
                "golang.org/x/crypto/nacl/secretbox",
                "golang.org/x/crypto/poly1305",
                "golang.org/x/crypto/salsa20/salsa",
                "hash",
                "hash/adler32",
                "hash/crc32",
                "image",
                "image/color",
                "image/internal/imageutil",
                "image/jpeg",
                "image/png",
                "internal/bytealg",
                "internal/cpu",
                "internal/fmtsort",
                "internal/nettrace",
                "internal/poll",
                "internal/race",
                "internal/singleflight",
                "internal/syscall/windows",
                "internal/syscall/windows/registry",
                "internal/syscall/windows/sysdll",
                "internal/testlog",
                "internal/x/crypto/chacha20poly1305",
                "internal/x/crypto/cryptobyte",
                "internal/x/crypto/cryptobyte/asn1",
                "internal/x/crypto/curve25519",
                "internal/x/crypto/hkdf",
                "internal/x/crypto/internal/chacha20",
                "internal/x/crypto/poly1305",
                "internal/x/net/dns/dnsmessage",
                "internal/x/net/http/httpguts",
                "internal/x/net/http/httpproxy",
                "internal/x/net/http2/hpack",
                "internal/x/net/idna",
                "internal/x/text/secure/bidirule",
                "internal/x/text/transform",
                "internal/x/text/unicode/bidi",
                "internal/x/text/unicode/norm",
                "io",
                "io/ioutil",
                "log",
                "math",
                "math/big",
                "math/bits",
                "math/rand",
                "mime",
                "mime/multipart",
                "mime/quotedprintable",
                "net",
                "net/http",
                "net/http/httptrace",
                "net/http/internal",
                "net/textproto",
                "net/url",
                "os",
                "path",
                "path/filepath",
                "reflect",
                "regexp",
                "regexp/syntax",
                "runtime",
                "runtime/internal/atomic",
                "runtime/internal/math",
                "runtime/internal/sys",
                "sort",
                "strconv",
                "strings",
                "sync",
                "sync/atomic",
                "syscall",
                "time",
                "unicode",
                "unicode/utf16",
                "unicode/utf8",
                "unsafe"
        ]
}

@stamblerre
Copy link
Contributor

@natefinch and @SteelPhase : Can you time goimports on the command line and report if it is the same or faster than gopls's import organization? If there are cases where gopls is significantly slower than goimports, that's definitely a gopls bug.

Also, @natefinch, could you provide a repro case for code that compiles, but where gopls reports a parse error? I have not seen that happen before.

@anjmao
Copy link

anjmao commented Jun 7, 2019

I have the same issue with newest gopls. Go to definition doesn't work most of the time. Example https://github.com/gohugoio/hugo/blob/master/minifiers/minifiers.go#L66

image

@jbrodriguez
Copy link

jbrodriguez commented Jun 7, 2019

I'm not getting go to definitions either and this is the log

[Info  - 5:40:28 AM] Build info
----------
no module information, gopls not built in module mode

Go info
-------
go version go1.12.4 darwin/amd64

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/johndoe/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Volumes/Home/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/Cellar/go/1.12.4/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.12.4/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/w9/7tlszcbs3msddknxvpp64gwc0000gn/T/go-build049672644=/tmp/go-build -gno-record-gcc-switches -fno-common"

[Error - 5:40:29 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:30 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:30 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:30 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:31 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:31 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:32 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:32 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:32 AM] Request textDocument/codeAction failed.
  Message: no file information for file:///Volumes/Home/code/dexol/daemon/services/api/api.go
  Code: 0 
[Error - 5:40:33 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:33 AM] unable to check package for file:///Volumes/Home/code/dexol/daemon/services/api/api.go: /Volumes/Home/code/dexol/daemon/services/api/api.go: no packages found
[Error - 5:40:33 AM] Request textDocument/documentLink failed.
  Message: no AST for file:///Volumes/Home/code/dexol/daemon/services/api/api.go
  Code: 0 

I can't figure out why it says no module information, gopls not built in module mode, since my project does have go.mod, go.sum, although they're not at the root of the git repo.

@SteelPhase
Copy link

That message is specifically related to gopls. Gopls will print out no module information, gopls not built in module mode when gopls version is run. It should not affect anything negatively.

@gopherbot
Copy link

Change https://golang.org/cl/181317 mentions this issue: internal/lsp: improve error handling while parsing

gopherbot pushed a commit to golang/tools that referenced this issue Jun 11, 2019
If the context is canceled (or times out) during parsing, we were
previously caching the package with no *ast.Files. Any further LSP
queries against that package would fail because the package is already
loaded, but none of the files are mapped to the package. Fix by
propagating non-parse errors as "fatal" errors in
parseFiles. typeCheck will propagate these errors and not cache the
package.

I also fixed the package cache to not cache errors loading
packages. If you get an error like "context canceled" then none of the
package's files are mapped to the package. This prevents the package
from ever getting unmapped when its files are updated. I also added a
retry mechanism where if the current request is not canceled but the
package failed to load due to a previous request being canceled, this
request can try loading the package again.

Updates golang/go#32354, golang/go#32360

Change-Id: I466ddb8d336aeecf6e50f9f6d040787a86a60ca0
GitHub-Last-Rev: 5f1e7ef
GitHub-Pull-Request: #110
Reviewed-on: https://go-review.googlesource.com/c/tools/+/181317
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
@muirdm
Copy link

muirdm commented Jun 12, 2019

Can people check if the errors still happen on master?

@anjmao
Copy link

anjmao commented Jun 12, 2019

@muirrn Hi, I just tried master version and and at least for me go to definition is working fine 👍

@gopherbot
Copy link

Change https://golang.org/cl/183718 mentions this issue: internal/jsonrpc2: change the concurrency strategy

@bmhatfield
Copy link

bmhatfield commented Jun 27, 2019

I'm not sure I understand why this was closed.

My intention is not to be rude, because things have certainly improved. Unfortunately, I still don't get any pre-import autocompletion in VSCode, auto-import doesn't happen unless there's no errors in the file (which is super difficult to do without autocomplete of the thing I am trying to import), VSCode intermittently reports weird type errors that aren't real (which go away if I restart VSCode), and things are generally very sluggish (often taking 30-60s to show output in VSCode).

I have been regularly updating to the current gopls, including this morning, and my experience feels like we're still short of imports and go-to-definition working correctly.

Edit:
Here's a (slightly redacted) screenshot from right now (which I had to wait for gopls for 90s for before I could take it) where two packages that previously used to auto-import are stuck as undefined symbols:

Screen Shot 2019-06-27 at 11 06 22 AM

(context coming from stdlib, assert coming from within my project, both previously auto-imported fine)

@natefinch
Copy link
Contributor Author

Sorry, I missed the request to recheck this, but the experience is still very poor.

This still regularly fails for me with the tip of gopls when adding a line that should add an import.

add _, _ = uuid.NewV4() to many files, and gopls will often fail.... this is with codeActionsOnSaveTimeout set to 30000 (30 seconds).

oddly, sometimes I go back to the same file and add a space at the end of the file and resave, and gopls adds the import almost instantly. I don't know what the difference is.

@stamblerre
Copy link
Contributor

@bmhatfield: We don't yet support pre-import autocomplete (#31906), but imports and go-to-definition should certainly be working. Are you seeing more problems with definitions past the issue you filed about the module cache? Do you mind filing a separate issue for the type errors that aren't real? Imports should be added no matter what state the file is in (formatting fails only if a file fails contains parse errors).

@natefinch: It seems like in your case, gopls is getting stuck in some broken state. What kinds of errors do you see in the logs when this happens?

I will re-open this issue, but with the statement that, due to the high frequency of changes to gopls, most of the information collected at the beginning of the discussion is not likely to apply to the issues seen right now. We also are in the process of rewriting the cache layer, so hopefully many of these problems will be resolved through that rewrite.

@stamblerre stamblerre reopened this Jun 27, 2019
@natefinch
Copy link
Contributor Author

natefinch commented Jun 27, 2019

[Info  - 11:28:34 AM] Build info
----------
golang.org/x/tools/cmd/gopls v0.1.0-cmd.gopls
    golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25 h1:waeaOEG3M5B3aL+j+hqXDXpBOqBEYHVNApmp5na1jwQ=
    golang.org/x/sync@v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=

Go info
-------
go version go1.12.4 darwin/amd64

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/finchnat/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/finchnat"
GOPROXY=""
GORACE=""
GOROOT="/Users/finchnat/sdk/go1.12.4"
GOTMPDIR=""
GOTOOLDIR="/Users/finchnat/sdk/go1.12.4/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/finchnat/mcpp/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/ch/4d1vgsv17jq0b3yfmnkl9thdk0jm7d/T/go-build719393068=/tmp/go-build -gno-record-gcc-switches -fno-common"

[Error - 11:29:29 AM] AST for /Users/finchnat/mcpp/untitled:Untitled-1 has an invalid position
[Error - 11:29:30 AM] unable to check package for file:///Users/finchnat/mcpp/-: go/packages.Load: no packages found for /Users/finchnat/mcpp/-
[Error - 11:29:30 AM] Could not find tokens for diagnostic: file:///Users/finchnat/mcpp/-
[Error - 11:40:34 AM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 
[Error - 11:40:38 AM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 
[Error - 12:50:19 PM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 
panic: interface conversion: types.Object is nil, not *types.Func

goroutine 5347 [running]:
golang.org/x/tools/go/analysis/passes/printf.maybePrintfWrapper(0xc008501cc0, 0x1762b20, 0xc004b0fc20, 0x0)
	/Users/finchnat/pkg/mod/golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25/go/analysis/passes/printf/printf.go:115 +0x30c
golang.org/x/tools/go/analysis/passes/printf.findPrintfLike(0xc0051c1ea0, 0x10, 0x15dd100, 0x1d6, 0x1d7)
	/Users/finchnat/pkg/mod/golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25/go/analysis/passes/printf/printf.go:154 +0xf2
golang.org/x/tools/go/analysis/passes/printf.run(0xc0051c1ea0, 0xc004b29d00, 0xc000028350, 0x4, 0x10)
	/Users/finchnat/pkg/mod/golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25/go/analysis/passes/printf/printf.go:83 +0x2b
golang.org/x/tools/internal/lsp/source.(*Action).execOnce(0xc009c56a80, 0x1764520, 0xc0096da080, 0xc000210b00, 0xc00ab4d6c8, 0x10)
	/Users/finchnat/pkg/mod/golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25/internal/lsp/source/analysis.go:166 +0x82a
golang.org/x/tools/internal/lsp/source.(*Action).exec.func1()
	/Users/finchnat/pkg/mod/golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25/internal/lsp/source/analysis.go:100 +0x4e
sync.(*Once).Do(0xc009c56a80, 0xc00ab4d708)
	/Users/finchnat/sdk/go1.12.4/src/sync/once.go:44 +0xb3
golang.org/x/tools/internal/lsp/source.(*Action).exec(0xc009c56a80, 0x1764520, 0xc0096da080, 0xc000210b00, 0x0, 0xc00ab4d790)
	/Users/finchnat/pkg/mod/golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25/internal/lsp/source/analysis.go:99 +0x8b
golang.org/x/tools/internal/lsp/source.execAll.func1(0x8, 0x16afb88)
	/Users/finchnat/pkg/mod/golang.org/x/tools@v0.0.0-20190618233249-04b924abaa25/internal/lsp/source/analysis.go:91 +0x48
golang.org/x/sync/errgroup.(*Group).Go.func1(0xc008a19ef0, 0xc003a47920)
	/Users/finchnat/pkg/mod/golang.org/x/sync@v0.0.0-20190423024810-112230192c58/errgroup/errgroup.go:57 +0x57
created by golang.org/x/sync/errgroup.(*Group).Go
	/Users/finchnat/pkg/mod/golang.org/x/sync@v0.0.0-20190423024810-112230192c58/errgroup/errgroup.go:54 +0x66
[Info  - 12:50:30 PM] Connection to server got closed. Server will restart.
[Error - 12:50:30 PM] Request textDocument/codeAction failed.
Error: Connection got disposed.
	at Object.dispose (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/main.js:876:25)
	at Object.dispose (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-languageclient/lib/client.js:57:35)
	at LanguageClient.handleConnectionClosed (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-languageclient/lib/client.js:2036:42)
	at LanguageClient.handleConnectionClosed (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-languageclient/lib/main.js:127:15)
	at closeHandler (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-languageclient/lib/client.js:2023:18)
	at CallbackList.invoke (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
	at Emitter.fire (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/events.js:120:36)
	at closeHandler (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/main.js:226:26)
	at CallbackList.invoke (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/events.js:62:39)
	at Emitter.fire (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/events.js:120:36)
	at StreamMessageReader.fireClose (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/messageReader.js:111:27)
	at Socket.listen.readable.on (/Users/finchnat/.vscode/extensions/ms-vscode.go-0.11.0/node_modules/vscode-jsonrpc/lib/messageReader.js:151:46)
	at Socket.emit (events.js:187:15)
	at Pipe.Socket._destroy._handle.close [as _onclose] (net.js:596:12)
[Info  - 12:50:33 PM] Build info
----------
version v0.1.0-cmd.gopls, built in $GOPATH mode

Go info
-------
go version go1.12.4 darwin/amd64

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/finchnat/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/finchnat"
GOPROXY=""
GORACE=""
GOROOT="/Users/finchnat/sdk/go1.12.4"
GOTMPDIR=""
GOTOOLDIR="/Users/finchnat/sdk/go1.12.4/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/finchnat/mcpp/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/ch/4d1vgsv17jq0b3yfmnkl9thdk0jm7d/T/go-build665288222=/tmp/go-build -gno-record-gcc-switches -fno-common"

[Error - 12:50:40 PM] unable to check package for file:///Users/finchnat/mcpp/untitled:Untitled-1: go/packages.Load: no packages found for /Users/finchnat/mcpp/untitled:Untitled-1
[Error - 12:50:42 PM] unable to check package for file:///Users/finchnat/mcpp/untitled:Untitled-1: go/packages.Load: no packages found for /Users/finchnat/mcpp/untitled:Untitled-1
[Error - 12:51:07 PM] Request textDocument/codeAction failed.
  Message: /Users/finchnat/mcpp/data/policy_store.go:21:2: expected statement, found '='
  Code: 0 
[Info  - 12:51:11 PM] no completions found for file:///Users/finchnat/mcpp/data/policy_store.go:20:10: cannot resolve uuid
[Error - 12:51:11 PM] Request textDocument/codeAction failed.
  Message: /Users/finchnat/mcpp/data/policy_store.go:22:2: expected selector or type assertion, found 'return' (and 1 more errors)
  Code: 0 
[Info  - 12:51:11 PM] no completions found for file:///Users/finchnat/mcpp/data/policy_store.go:20:11: cannot resolve uuid
[Info  - 12:51:12 PM] no completions found for file:///Users/finchnat/mcpp/data/policy_store.go:20:12: cannot resolve uuid
[Info  - 12:51:12 PM] no completions found for file:///Users/finchnat/mcpp/data/policy_store.go:20:13: cannot resolve uuid
[Info  - 12:51:12 PM] no completions found for file:///Users/finchnat/mcpp/data/policy_store.go:20:14: cannot resolve uuid
[Info  - 12:52:29 PM] no completions found for file:///Users/finchnat/mcpp/data/policy_store.go:20:14: cannot resolve uuid
[Info  - 12:52:33 PM] no signature help for file:///Users/finchnat/mcpp/data/policy_store.go:20:17 : cannot find an enclosing function
[Info  - 12:52:35 PM] no signature help for file:///Users/finchnat/mcpp/data/policy_store.go:20:9 : cannot find an enclosing function
[Info  - 12:52:36 PM] no signature help for file:///Users/finchnat/mcpp/data/policy_store.go:20:5 : cannot find an enclosing function
[Info  - 12:52:38 PM] no signature help for file:///Users/finchnat/mcpp/data/policy_store.go:20:3 : cannot find an enclosing function
[Error - 12:52:40 PM] no highlight for /Users/finchnat/mcpp/data/policy_store.go:21:3: /Users/finchnat/mcpp/data/policy_store.go:21:3 is not an identifier
[Info  - 12:52:40 PM] no signature help for file:///Users/finchnat/mcpp/data/policy_store.go:20:2 : cannot find an enclosing function
[Info  - 12:52:44 PM] no signature help for file:///Users/finchnat/mcpp/data/policy_store.go:20:4 : cannot find an enclosing function
[Info  - 12:52:44 PM] no signature help for file:///Users/finchnat/mcpp/data/policy_store.go:20:5 : cannot find an enclosing function
[Error - 12:52:49 PM] Request textDocument/hover failed.
  Message: no object for ident uuid
  Code: 0 
[Error - 12:54:05 PM] Request textDocument/hover failed.
  Message: no object for ident uuid
  Code: 0 
[Error - 12:54:07 PM] Request textDocument/hover failed.
  Message: no object for ident NewV4
  Code: 0 
[Error - 1:55:43 PM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 

@stamblerre
Copy link
Contributor

Thanks for the logs! Seems like a lot is going on, in particular, that gopls is getting sent files without a .go extension. In this example, are you creating a new file? Also, can you add -rpc.trace to your "go.languageServerFlags" VSCode setting? That will give more detailed logs. Here, it's only the errors that were logged.

@stamblerre
Copy link
Contributor

Also, it looks like you're using a version of gopls from 6/18/2019 - do you mind upgrading to the latest on master? We made a significant number of changes recently and we will probably tag a new version soon.

@natefinch
Copy link
Contributor Author

That's weird, I ran this after running go get -u golang.org/x/tools/cmd/gopls

I'll repro again and hope to get a better log with rpc.trace

@stamblerre
Copy link
Contributor

To get from master you will have to do go get -u golang.org/x/tools/gopls@master - we began versioning gopls so that won't get the latest changes from tip.

@bmhatfield
Copy link

I didn't notice the @master thing - I will do that as well and check how things are working for me as well.

@natefinch
Copy link
Contributor Author

Tried it again on master, looks like maybe it's just timing out?

[Trace - 4:37:37 PM] Received response 'textDocument/documentLink - (46)' in 33564ms.

[Trace - 3:59:13 PM] Sending request 'initialize - (0)'.
Params: {"processId":44866,"rootPath":"/Users/finchnat/archimedes","rootUri":"file:///Users/finchnat/archimedes","capabilities":{"workspace":{"applyEdit":true,"workspaceEdit":{"documentChanges":true},"didChangeConfiguration":{"dynamicRegistration":true},"didChangeWatchedFiles":{"dynamicRegistration":true},"symbol":{"dynamicRegistration":true,"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]}},"executeCommand":{"dynamicRegistration":true},"configuration":true,"workspaceFolders":true},"textDocument":{"publishDiagnostics":{"relatedInformation":true},"synchronization":{"dynamicRegistration":true,"willSave":true,"willSaveWaitUntil":true,"didSave":true},"completion":{"dynamicRegistration":true,"contextSupport":true,"completionItem":{"snippetSupport":true,"commitCharactersSupport":true,"documentationFormat":["markdown","plaintext"],"deprecatedSupport":true,"preselectSupport":true},"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]}},"hover":{"dynamicRegistration":true,"contentFormat":["markdown","plaintext"]},"signatureHelp":{"dynamicRegistration":true,"signatureInformation":{"documentationFormat":["markdown","plaintext"]}},"definition":{"dynamicRegistration":true},"references":{"dynamicRegistration":true},"documentHighlight":{"dynamicRegistration":true},"documentSymbol":{"dynamicRegistration":true,"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]},"hierarchicalDocumentSymbolSupport":true},"codeAction":{"dynamicRegistration":true,"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}}},"codeLens":{"dynamicRegistration":true},"formatting":{"dynamicRegistration":true},"rangeFormatting":{"dynamicRegistration":true},"onTypeFormatting":{"dynamicRegistration":true},"rename":{"dynamicRegistration":true},"documentLink":{"dynamicRegistration":true},"typeDefinition":{"dynamicRegistration":true},"implementation":{"dynamicRegistration":true},"colorProvider":{"dynamicRegistration":true},"foldingRange":{"dynamicRegistration":true,"rangeLimit":5000,"lineFoldingOnly":true}}},"initializationOptions":{"funcSnippetEnabled":false,"gocodeCompletionEnabled":true},"trace":"off","workspaceFolders":[{"uri":"file:///Users/finchnat/archimedes","name":"archimedes"}]}


[Trace - 3:59:14 PM] Received response 'initialize - (0)' in 1092ms.
Params: {"capabilities":{"textDocumentSync":{"openClose":true,"change":2,"save":{}},"hoverProvider":true,"completionProvider":{"triggerCharacters":["."]},"signatureHelpProvider":{"triggerCharacters":["(",","]},"definitionProvider":true,"referencesProvider":true,"documentHighlightProvider":true,"documentSymbolProvider":true,"codeActionProvider":true,"documentFormattingProvider":true,"renameProvider":true,"documentLinkProvider":{},"typeDefinitionProvider":true,"workspace":{"workspaceFolders":{"supported":true,"changeNotifications":"workspace/didChangeWorkspaceFolders"}}},"custom":null}


[Trace - 3:59:14 PM] Sending notification 'initialized'.
Params: {}


[Trace - 3:59:14 PM] Received request 'client/registerCapability - (1)'.
Params: {"registrations":[{"id":"workspace/didChangeConfiguration","method":"workspace/didChangeConfiguration"},{"id":"workspace/didChangeWorkspaceFolders","method":"workspace/didChangeWorkspaceFolders"}]}


[Trace - 3:59:14 PM] Sending response 'client/registerCapability - (1)' in 2ms.
Params: {}


[Trace - 3:59:14 PM] Received request 'workspace/configuration - (2)'.
Params: {"items":[{"scopeUri":"file:///Users/finchnat/archimedes","section":"gopls"}]}


[Trace - 3:59:14 PM] Sending response 'workspace/configuration - (2)' in 1ms.
Params: [null]


[Trace - 3:59:18 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"Build info\n----------\ngolang.org/x/tools/gopls v0.1.0\n    golang.org/x/tools/gopls@v0.0.0-20190627182818-9947fec5c3ab h1:ZLA7T3BdcYvpyHqYHyEIVb2sEqIJCS7kF/3MO79M/hE=\n    golang.org/x/sync@v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=\n    golang.org/x/tools@v0.0.0-20190627182818-9947fec5c3ab h1:uOzhX2fm3C4BmBwW2a7lnJQD7qel2+4uhmTc8czKBCU=\n\nGo info\n-------\ngo version go1.12.4 darwin/amd64\n\nGOARCH=\"amd64\"\nGOBIN=\"\"\nGOCACHE=\"/Users/finchnat/Library/Caches/go-build\"\nGOEXE=\"\"\nGOFLAGS=\"\"\nGOHOSTARCH=\"amd64\"\nGOHOSTOS=\"darwin\"\nGOOS=\"darwin\"\nGOPATH=\"/Users/finchnat\"\nGOPROXY=\"\"\nGORACE=\"\"\nGOROOT=\"/Users/finchnat/sdk/go1.12.4\"\nGOTMPDIR=\"\"\nGOTOOLDIR=\"/Users/finchnat/sdk/go1.12.4/pkg/tool/darwin_amd64\"\nGCCGO=\"gccgo\"\nCC=\"clang\"\nCXX=\"clang++\"\nCGO_ENABLED=\"1\"\nGOMOD=\"/Users/finchnat/archimedes/go.mod\"\nCGO_CFLAGS=\"-g -O2\"\nCGO_CPPFLAGS=\"\"\nCGO_CXXFLAGS=\"-g -O2\"\nCGO_FFLAGS=\"-g -O2\"\nCGO_LDFLAGS=\"-g -O2\"\nPKG_CONFIG=\"pkg-config\"\nGOGCCFLAGS=\"-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/ch/4d1vgsv17jq0b3yfmnkl9thdk0jm7d/T/go-build487934962=/tmp/go-build -gno-record-gcc-switches -fno-common\"\n"}


[Info  - 3:59:18 PM] Build info
----------
golang.org/x/tools/gopls v0.1.0
    golang.org/x/tools/gopls@v0.0.0-20190627182818-9947fec5c3ab h1:ZLA7T3BdcYvpyHqYHyEIVb2sEqIJCS7kF/3MO79M/hE=
    golang.org/x/sync@v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
    golang.org/x/tools@v0.0.0-20190627182818-9947fec5c3ab h1:uOzhX2fm3C4BmBwW2a7lnJQD7qel2+4uhmTc8czKBCU=

Go info
-------
go version go1.12.4 darwin/amd64

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/finchnat/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/finchnat"
GOPROXY=""
GORACE=""
GOROOT="/Users/finchnat/sdk/go1.12.4"
GOTMPDIR=""
GOTOOLDIR="/Users/finchnat/sdk/go1.12.4/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/finchnat/archimedes/go.mod"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/ch/4d1vgsv17jq0b3yfmnkl9thdk0jm7d/T/go-build487934962=/tmp/go-build -gno-record-gcc-switches -fno-common"

[Trace - 3:59:18 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","languageId":"go","version":1,"text":"package auth\n\n/*\nThis file copied from github.com/volatiletech/authboss/auth/\n*/\n\nimport (\n\t\"context\"\n\t\"database/sql\"\n\t\"net/http\"\n\t\"net/url\"\n\n\t\"golang.org/x/crypto/bcrypt\"\n\n\t\"github.com/Mattel/archimedes\"\n\t\"github.com/Mattel/archimedes/db/gnorm/loginredirects\"\n\t\"github.com/volatiletech/authboss\"\n)\n\nconst (\n\t// PageLogin is for identifying the login page for parsing & validation\n\tPageLogin = \"login\"\n\n\t// RedirectURIParam is the url parameter\n\tRedirectURIParam = \"redir\"\n\n\t// AttemptsRemain represents the number of failed authentications that are\n\t// still allowed before a user's account becomes locked for the configured\n\t// duration.\n\tAttemptsRemain = \"attempts_remain\"\n)\n\n// Auth module\ntype Auth struct {\n\t*authboss.Authboss\n\tDB *sql.DB\n}\n\n// Init module\nfunc (a *Auth) Init(ab *authboss.Authboss) (err error) {\n\ta.Authboss = ab\n\n\tif err = a.Authboss.Config.Core.ViewRenderer.Load(PageLogin); err != nil {\n\t\treturn err\n\t}\n\n\ta.Authboss.Config.Core.Router.Get(\"/login\", a.Authboss.Core.ErrorHandler.Wrap(a.LoginGet))\n\ta.Authboss.Config.Core.Router.Post(\"/login\", a.Authboss.Core.ErrorHandler.Wrap(a.LoginPost))\n\n\treturn nil\n}\n\n// LoginGet simply displays the login form\nfunc (a *Auth) LoginGet(w http.ResponseWriter, r *http.Request) error {\n\t// This is the Archimedes addition to the Authboss login handler.\n\t// We need to pass on the redirect handler so we can redirect the user later.\n\tdata := authboss.HTMLData{}\n\tif red, ok := r.URL.Query()[RedirectURIParam]; ok && len(red) > 0 {\n\t\tdata[RedirectURIParam] = red[0]\n\t}\n\treturn a.Core.Responder.Respond(w, r, http.StatusOK, PageLogin, data)\n}\n\n// LoginPost attempts to validate the credentials passed in\n// to log in a user.\nfunc (a *Auth) LoginPost(w http.ResponseWriter, r *http.Request) error {\n\tlogger := a.RequestLogger(r)\n\n\tvalidatable, err := a.Authboss.Core.BodyReader.Read(PageLogin, r)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tpostRedirs := r.URL.Query()[RedirectURIParam]\n\tvar postRedirect string\n\tif len(postRedirs) > 0 {\n\t\tpostRedirect = postRedirs[0]\n\t}\n\n\tif postRedirect != \"\" {\n\t\tlogger.Infof(\"postRedirect: %s\", postRedirect)\n\t\tu, err := url.Parse(postRedirect)\n\t\tif err != nil {\n\t\t\tlogger.Infof(\"failed to parse post login redirect: %v\", err)\n\t\t\tdata := authboss.HTMLData{\n\t\t\t\tauthboss.DataErr:     archimedes.InvalidRedirectErr.Error(),\n\t\t\t\tarchimedes.ErrorCode: archimedes.InvalidRedirectErr.Code,\n\t\t\t}\n\t\t\treturn a.Authboss.Core.Responder.Respond(w, r, http.StatusBadRequest, PageLogin, data)\n\t\t}\n\t\t_, err = loginredirects.One(r.Context(), a.DB, loginredirects.RedirectCol.Equals(u.Path))\n\t\tif err != nil {\n\t\t\tlogger.Infof(\"unrecognized redirect: %v\", u)\n\t\t\tdata := authboss.HTMLData{\n\t\t\t\tauthboss.DataErr:     archimedes.InvalidRedirectErr.Error(),\n\t\t\t\tarchimedes.ErrorCode: archimedes.InvalidRedirectErr.Code,\n\t\t\t}\n\t\t\treturn a.Authboss.Core.Responder.Respond(w, r, http.StatusBadRequest, PageLogin, data)\n\t\t}\n\t}\n\n\t// Skip validation since all the validation happens during the database lookup and\n\t// password check.\n\tcreds := authboss.MustHaveUserValues(validatable)\n\tpid := creds.GetPID()\n\tpidUser, err := a.Authboss.Storage.Server.Load(r.Context(), pid)\n\tif err == authboss.ErrUserNotFound {\n\t\tlogger.Infof(\"failed to load user requested by pid: %s\", pid)\n\t\tdata := authboss.HTMLData{\n\t\t\tauthboss.DataErr:     archimedes.BadUserOrPasswordErr.Error(),\n\t\t\tRedirectURIParam:     postRedirect,\n\t\t\tarchimedes.ErrorCode: archimedes.BadUserOrPasswordErr.Code,\n\t\t}\n\t\treturn a.Authboss.Core.Responder.Respond(w, r, http.StatusOK, PageLogin, data)\n\t} else if err != nil {\n\t\treturn err\n\t}\n\n\tauthUser := authboss.MustBeAuthable(pidUser)\n\tpassword := authUser.GetPassword()\n\n\tr = r.WithContext(context.WithValue(r.Context(), authboss.CTXKeyUser, pidUser))\n\n\tvar handled bool\n\terr = bcrypt.CompareHashAndPassword([]byte(password), []byte(creds.GetPassword()))\n\tif err != nil {\n\t\thandled, err = a.Authboss.Events.FireAfter(authboss.EventAuthFail, w, r)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t} else if handled {\n\t\t\treturn nil\n\t\t}\n\n\t\tlockableUser := authboss.MustBeLockable(pidUser)\n\t\tattempts := lockableUser.GetAttemptCount()\n\t\tattemptsRemain := a.Authboss.Config.Modules.LockAfter - attempts\n\n\t\tlogger.Infof(\"user %s failed to log in\", pid)\n\t\tdata := authboss.HTMLData{\n\t\t\tauthboss.DataErr:     archimedes.BadUserOrPasswordErr.Error(),\n\t\t\tAttemptsRemain:       attemptsRemain,\n\t\t\tarchimedes.ErrorCode: archimedes.BadUserOrPasswordErr.Code,\n\t\t}\n\t\treturn a.Authboss.Core.Responder.Respond(w, r, http.StatusOK, PageLogin, data)\n\t}\n\n\tr = r.WithContext(context.WithValue(r.Context(), authboss.CTXKeyValues, validatable))\n\n\thandled, err = a.Events.FireBefore(authboss.EventAuth, w, r)\n\tif err != nil {\n\t\treturn err\n\t} else if handled {\n\t\treturn nil\n\t}\n\n\tlogger.Infof(\"user %s logged in\", pid)\n\tauthboss.PutSession(w, authboss.SessionKey, pid)\n\tauthboss.DelSession(w, authboss.SessionHalfAuthKey)\n\n\thandled, err = a.Authboss.Events.FireAfter(authboss.EventAuth, w, r)\n\tif err != nil {\n\t\treturn err\n\t} else if handled {\n\t\treturn nil\n\t}\n\n\tro := authboss.RedirectOptions{\n\t\tCode: http.StatusTemporaryRedirect,\n\t}\n\tif postRedirect != \"\" {\n\t\tro.RedirectPath = postRedirect\n\t} else {\n\t\tro.RedirectPath = a.Authboss.Paths.AuthLoginOK\n\t}\n\treturn a.Authboss.Core.Redirector.Redirect(w, r, ro)\n}\n"}}


[Trace - 3:59:18 PM] Sending request 'textDocument/documentSymbol - (1)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 3:59:49 PM] Sending request 'textDocument/codeAction - (2)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":43,"character":12},"end":{"line":43,"character":12}},"context":{"diagnostics":[]}}


[Trace - 3:59:49 PM] Received response 'textDocument/documentSymbol - (1)' in 34897ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":50,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":53,"character":0},"end":{"line":61,"character":1}},"selectionRange":{"start":{"line":53,"character":15},"end":{"line":53,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":65,"character":0},"end":{"line":175,"character":1}},"selectionRange":{"start":{"line":65,"character":15},"end":{"line":65,"character":24}}}]}]


[Trace - 3:59:49 PM] Received response 'textDocument/codeAction - (2)' in 34901ms.
Params: {}


[Trace - 3:59:49 PM] Sending request 'textDocument/documentLink - (3)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 3:59:49 PM] Received response 'textDocument/documentLink - (3)' in 34909ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 3:59:49 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[]}


[Trace - 3:59:49 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 3:59:49 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 3:59:50 PM] Sending request 'textDocument/documentLink - (4)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 3:59:50 PM] Received response 'textDocument/documentLink - (4)' in 0ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:15:37 PM] Sending request 'textDocument/hover - (5)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":26,"character":39}}


[Error - 4:15:37 PM] send textDocument/hover#5 no identifier found


[Error - 4:15:37 PM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 
[Trace - 4:15:38 PM] Sending request 'textDocument/hover - (6)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":26,"character":48}}


[Error - 4:15:38 PM] send textDocument/hover#6 no identifier found


[Error - 4:15:38 PM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 
[Trace - 4:15:41 PM] Sending request 'textDocument/codeAction - (7)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":28,"character":13},"end":{"line":28,"character":13}},"context":{"diagnostics":[]}}


[Trace - 4:15:41 PM] Received response 'textDocument/codeAction - (7)' in 2ms.
Params: {}


[Trace - 4:15:42 PM] Sending request 'textDocument/hover - (8)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":27,"character":66}}


[Error - 4:15:42 PM] send textDocument/hover#8 no identifier found


[Error - 4:15:42 PM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 
[Trace - 4:36:46 PM] Sending request 'textDocument/documentLink - (9)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:46 PM] Received response 'textDocument/documentLink - (9)' in 0ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:36:46 PM] Sending request 'textDocument/codeAction - (10)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":0}},"context":{"diagnostics":[]}}


[Trace - 4:36:46 PM] Received response 'textDocument/codeAction - (10)' in 3ms.
Params: {}


[Trace - 4:36:46 PM] Sending request 'textDocument/codeAction - (11)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":28,"character":13},"end":{"line":28,"character":13}},"context":{"diagnostics":[]}}


[Trace - 4:36:46 PM] Received response 'textDocument/codeAction - (11)' in 3ms.
Params: {}


[Trace - 4:36:49 PM] Sending request 'textDocument/hover - (12)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":20,"character":61}}


[Error - 4:36:49 PM] send textDocument/hover#12 no identifier found


[Error - 4:36:49 PM] Request textDocument/hover failed.
  Message: no identifier found
  Code: 0 
[Trace - 4:36:51 PM] Sending request 'textDocument/codeAction - (13)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":39,"character":56},"end":{"line":39,"character":56}},"context":{"diagnostics":[]}}


[Trace - 4:36:51 PM] Received response 'textDocument/codeAction - (13)' in 3ms.
Params: {}


[Trace - 4:36:51 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":2},"contentChanges":[{"range":{"start":{"line":39,"character":56},"end":{"line":39,"character":56}},"rangeLength":0,"text":"\n\t"}]}


[Trace - 4:36:51 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":3},"contentChanges":[{"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":1}},"rangeLength":0,"text":"\\"}]}


[Trace - 4:36:51 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"failed to run analyses for file:///Users/finchnat/archimedes/auth/auth.go: context canceled"}


[Trace - 4:36:51 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:51 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:51 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":1}},"severity":1,"source":"LSP","message":"expected statement, found 'ILLEGAL'"}]}


[Trace - 4:36:51 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:51 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[]}


[Trace - 4:36:51 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:52 PM] Sending request 'textDocument/codeAction - (14)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":40,"character":2},"end":{"line":40,"character":2}},"context":{"diagnostics":[]}}


[Error - 4:36:52 PM] send textDocument/codeAction#14 /Users/finchnat/archimedes/auth/auth.go:41:2: illegal character U+005C '\'


[Error - 4:36:52 PM] Request textDocument/codeAction failed.
  Message: /Users/finchnat/archimedes/auth/auth.go:41:2: illegal character U+005C '\'
  Code: 0 
[Trace - 4:36:52 PM] Sending request 'textDocument/documentSymbol - (15)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:52 PM] Received response 'textDocument/documentSymbol - (15)' in 0ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":51,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":54,"character":0},"end":{"line":62,"character":1}},"selectionRange":{"start":{"line":54,"character":15},"end":{"line":54,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":66,"character":0},"end":{"line":176,"character":1}},"selectionRange":{"start":{"line":66,"character":15},"end":{"line":66,"character":24}}}]}]


[Trace - 4:36:52 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":4},"contentChanges":[{"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":2}},"rangeLength":1,"text":""}]}


[Trace - 4:36:52 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[]}


[Trace - 4:36:52 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:52 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:52 PM] Sending request 'textDocument/documentSymbol - (16)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:52 PM] Received response 'textDocument/documentSymbol - (16)' in 0ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":51,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":54,"character":0},"end":{"line":62,"character":1}},"selectionRange":{"start":{"line":54,"character":15},"end":{"line":54,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":66,"character":0},"end":{"line":176,"character":1}},"selectionRange":{"start":{"line":66,"character":15},"end":{"line":66,"character":24}}}]}]


[Trace - 4:36:52 PM] Sending request 'textDocument/documentLink - (17)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:52 PM] Received response 'textDocument/documentLink - (17)' in 0ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:36:53 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":5},"contentChanges":[{"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":1}},"rangeLength":0,"text":"_"}]}


[Trace - 4:36:53 PM] Sending request 'textDocument/completion - (18)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":2},"context":{"triggerKind":1}}


[Trace - 4:36:53 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":2}},"severity":1,"source":"LSP","message":"cannot use _ as value or type"}]}


[Trace - 4:36:53 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:53 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:53 PM] Received response 'textDocument/completion - (18)' in 2ms.
Params: {"isIncomplete":false,"items":[]}


[Trace - 4:36:53 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":6},"contentChanges":[{"range":{"start":{"line":40,"character":2},"end":{"line":40,"character":2}},"rangeLength":0,"text":","}]}


[Trace - 4:36:53 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:53 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:53 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":41,"character":14},"end":{"line":41,"character":16}},"severity":1,"source":"LSP","message":"cannot assign 1 values to 2 variables"}]}


[Trace - 4:36:54 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":7},"contentChanges":[{"range":{"start":{"line":40,"character":3},"end":{"line":40,"character":3}},"rangeLength":0,"text":" "}]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":41,"character":14},"end":{"line":41,"character":16}},"severity":1,"source":"LSP","message":"cannot assign 1 values to 2 variables"}]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:54 PM] Sending request 'textDocument/signatureHelp - (19)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":4}}


[Trace - 4:36:54 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"no signature help for file:///Users/finchnat/archimedes/auth/auth.go:40:4 : cannot find an enclosing function"}


[Info  - 4:36:54 PM] no signature help for file:///Users/finchnat/archimedes/auth/auth.go:40:4 : cannot find an enclosing function
[Trace - 4:36:54 PM] Received response 'textDocument/signatureHelp - (19)' in 0ms.
Params: {}


[Trace - 4:36:54 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":8},"contentChanges":[{"range":{"start":{"line":40,"character":4},"end":{"line":40,"character":4}},"rangeLength":0,"text":"-"}]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":41,"character":14},"end":{"line":41,"character":16}},"severity":1,"source":"LSP","message":"cannot assign 1 values to 2 variables"}]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:54 PM] Sending request 'textDocument/codeAction - (20)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"context":{"diagnostics":[]}}


[Trace - 4:36:54 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":9},"contentChanges":[{"range":{"start":{"line":40,"character":4},"end":{"line":40,"character":5}},"rangeLength":1,"text":""}]}


[Trace - 4:36:54 PM] Received response 'textDocument/codeAction - (20)' in 3ms.
Params: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///Users/finchnat/archimedes/auth/auth.go":[{"range":{"start":{"line":40,"character":0},"end":{"line":41,"character":0}},"newText":""},{"range":{"start":{"line":41,"character":0},"end":{"line":42,"character":0}},"newText":""},{"range":{"start":{"line":42,"character":0},"end":{"line":42,"character":0}},"newText":"\t_, -a.Authboss = ab\n"}]}}}]


[Trace - 4:36:54 PM] Sending notification '$/cancelRequest'.
Params: {"id":20}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":41,"character":14},"end":{"line":41,"character":16}},"severity":1,"source":"LSP","message":"cannot assign 1 values to 2 variables"}]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:54 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":10},"contentChanges":[{"range":{"start":{"line":40,"character":4},"end":{"line":40,"character":4}},"rangeLength":0,"text":"_"}]}


[Trace - 4:36:54 PM] Sending request 'textDocument/completion - (21)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":5},"context":{"triggerKind":1}}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":1}},"severity":1,"source":"LSP","message":"expected 1 expression"}]}


[Trace - 4:36:54 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:54 PM] Received response 'textDocument/completion - (21)' in 4ms.
Params: {"isIncomplete":false,"items":[{"label":"a","kind":6,"detail":"*Auth","preselect":true,"sortText":"00000","filterText":"a","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"a"}},{"label":"ab","kind":6,"detail":"*authboss.Authboss","sortText":"00001","filterText":"ab","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"ab"}},{"label":"err","kind":6,"detail":"error","sortText":"00002","filterText":"err","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"err"}},{"label":"archimedes","kind":9,"detail":"\"github.com/Mattel/archimedes\"","sortText":"00003","filterText":"archimedes","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"archimedes"}},{"label":"authboss","kind":9,"detail":"\"github.com/volatiletech/authboss\"","sortText":"00004","filterText":"authboss","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"authboss"}},{"label":"bcrypt","kind":9,"detail":"\"golang.org/x/crypto/bcrypt\"","sortText":"00005","filterText":"bcrypt","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"bcrypt"}},{"label":"context","kind":9,"detail":"\"context\"","sortText":"00006","filterText":"context","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"context"}},{"label":"http","kind":9,"detail":"\"net/http\"","sortText":"00007","filterText":"http","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"http"}},{"label":"loginredirects","kind":9,"detail":"\"github.com/Mattel/archimedes/db/gnorm/loginredirects\"","sortText":"00008","filterText":"loginredirects","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"loginredirects"}},{"label":"sql","kind":9,"detail":"\"database/sql\"","sortText":"00009","filterText":"sql","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"sql"}},{"label":"url","kind":9,"detail":"\"net/url\"","sortText":"00010","filterText":"url","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"url"}},{"label":"AttemptsRemain","kind":21,"detail":"string","sortText":"00011","filterText":"AttemptsRemain","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"AttemptsRemain"}},{"label":"Auth","kind":22,"detail":"struct{...}","sortText":"00012","filterText":"Auth","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"Auth"}},{"label":"AuthbossWrapper","kind":22,"detail":"struct{...}","sortText":"00013","filterText":"AuthbossWrapper","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"AuthbossWrapper"}},{"label":"Config","kind":22,"detail":"struct{...}","sortText":"00014","filterText":"Config","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"Config"}},{"label":"ExtraConfig","kind":22,"detail":"struct{...}","sortText":"00015","filterText":"ExtraConfig","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"ExtraConfig"}},{"label":"MailConfig","kind":22,"detail":"struct{...}","sortText":"00016","filterText":"MailConfig","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"MailConfig"}},{"label":"New(c Config)","kind":3,"detail":"(*AuthbossWrapper, error)","sortText":"00017","filterText":"New","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"New(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"NewRouter(pathPrefix string)","kind":3,"detail":"*Router","sortText":"00018","filterText":"NewRouter","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"NewRouter(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"PageLogin","kind":21,"detail":"string","sortText":"00019","filterText":"PageLogin","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"PageLogin"}},{"label":"RedirectURIParam","kind":21,"detail":"string","sortText":"00020","filterText":"RedirectURIParam","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"RedirectURIParam"}},{"label":"Router","kind":22,"detail":"struct{...}","sortText":"00021","filterText":"Router","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"Router"}},{"label":"errorHandler","kind":22,"detail":"struct{...}","sortText":"00022","filterText":"errorHandler","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"errorHandler"}},{"label":"logger","kind":22,"detail":"struct{...}","sortText":"00023","filterText":"logger","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"logger"}},{"label":"append(slice []Type, elems ...Type)","kind":3,"detail":"[]Type","sortText":"00024","filterText":"append","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"append(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"bool","kind":25,"sortText":"00025","filterText":"bool","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"bool"}},{"label":"byte","kind":25,"sortText":"00026","filterText":"byte","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"byte"}},{"label":"cap(v Type)","kind":3,"detail":"int","sortText":"00027","filterText":"cap","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"cap(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"close(c chan\u003c- Type)","kind":3,"sortText":"00028","filterText":"close","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"close(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"complex(r float64, i float64)","kind":3,"detail":"complex128","sortText":"00029","filterText":"complex","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"complex(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"complex128","kind":25,"sortText":"00030","filterText":"complex128","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"complex128"}},{"label":"complex64","kind":25,"sortText":"00031","filterText":"complex64","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"complex64"}},{"label":"copy(dst []Type, src []Type)","kind":3,"detail":"int","sortText":"00032","filterText":"copy","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"copy(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"delete(m map[Type]Type1, key Type)","kind":3,"sortText":"00033","filterText":"delete","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"delete(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"error","kind":8,"sortText":"00034","filterText":"error","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"error"}},{"label":"false","kind":21,"sortText":"00035","filterText":"false","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"false"}},{"label":"float32","kind":25,"sortText":"00036","filterText":"float32","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"float32"}},{"label":"float64","kind":25,"sortText":"00037","filterText":"float64","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"float64"}},{"label":"imag(c complex128)","kind":3,"detail":"float64","sortText":"00038","filterText":"imag","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"imag(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"int","kind":25,"sortText":"00039","filterText":"int","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"int"}},{"label":"int16","kind":25,"sortText":"00040","filterText":"int16","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"int16"}},{"label":"int32","kind":25,"sortText":"00041","filterText":"int32","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"int32"}},{"label":"int64","kind":25,"sortText":"00042","filterText":"int64","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"int64"}},{"label":"int8","kind":25,"sortText":"00043","filterText":"int8","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"int8"}},{"label":"iota","kind":21,"sortText":"00044","filterText":"iota","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"iota"}},{"label":"len(v Type)","kind":3,"detail":"int","sortText":"00045","filterText":"len","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"len(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"make(t Type, size ...int)","kind":3,"detail":"Type","sortText":"00046","filterText":"make","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"make(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"new(Type)","kind":3,"detail":"*Type","sortText":"00047","filterText":"new","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"new(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"nil","kind":6,"sortText":"00048","filterText":"nil","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"nil"}},{"label":"panic(v interface{})","kind":3,"sortText":"00049","filterText":"panic","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"panic(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"print(args ...Type)","kind":3,"sortText":"00050","filterText":"print","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"print(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"println(args ...Type)","kind":3,"sortText":"00051","filterText":"println","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"println(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"real(c complex128)","kind":3,"detail":"float64","sortText":"00052","filterText":"real","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"real(${1})"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"recover()","kind":3,"detail":"interface{}","sortText":"00053","filterText":"recover","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"recover()"},"command":{"title":"","command":"editor.action.triggerParameterHints"}},{"label":"rune","kind":25,"sortText":"00054","filterText":"rune","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"rune"}},{"label":"string","kind":25,"sortText":"00055","filterText":"string","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"string"}},{"label":"true","kind":21,"sortText":"00056","filterText":"true","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"true"}},{"label":"uint","kind":25,"sortText":"00057","filterText":"uint","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"uint"}},{"label":"uint16","kind":25,"sortText":"00058","filterText":"uint16","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"uint16"}},{"label":"uint32","kind":25,"sortText":"00059","filterText":"uint32","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"uint32"}},{"label":"uint64","kind":25,"sortText":"00060","filterText":"uint64","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"uint64"}},{"label":"uint8","kind":25,"sortText":"00061","filterText":"uint8","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"uint8"}},{"label":"uintptr","kind":25,"sortText":"00062","filterText":"uintptr","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"newText":"uintptr"}}]}


[Trace - 4:36:54 PM] Sending request 'textDocument/documentLink - (22)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:54 PM] Received response 'textDocument/documentLink - (22)' in 0ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:36:54 PM] Sending request 'textDocument/codeAction - (23)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"context":{"diagnostics":[]}}


[Error - 4:36:54 PM] send textDocument/codeAction#23 /Users/finchnat/archimedes/auth/auth.go:41:2: expected 1 expression


[Error - 4:36:54 PM] Request textDocument/codeAction failed.
  Message: /Users/finchnat/archimedes/auth/auth.go:41:2: expected 1 expression
  Code: 0 
[Trace - 4:36:54 PM] Sending request 'textDocument/documentSymbol - (24)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:54 PM] Received response 'textDocument/documentSymbol - (24)' in 0ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":51,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":54,"character":0},"end":{"line":62,"character":1}},"selectionRange":{"start":{"line":54,"character":15},"end":{"line":54,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":66,"character":0},"end":{"line":176,"character":1}},"selectionRange":{"start":{"line":66,"character":15},"end":{"line":66,"character":24}}}]}]


[Trace - 4:36:55 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":11},"contentChanges":[{"range":{"start":{"line":40,"character":5},"end":{"line":40,"character":5}},"rangeLength":0,"text":" "}]}


[Trace - 4:36:55 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:55 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:55 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":1},"end":{"line":40,"character":1}},"severity":1,"source":"LSP","message":"expected 1 expression"}]}


[Trace - 4:36:56 PM] Sending request 'textDocument/documentSymbol - (25)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:56 PM] Received response 'textDocument/documentSymbol - (25)' in 0ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":51,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":54,"character":0},"end":{"line":62,"character":1}},"selectionRange":{"start":{"line":54,"character":15},"end":{"line":54,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":66,"character":0},"end":{"line":176,"character":1}},"selectionRange":{"start":{"line":66,"character":15},"end":{"line":66,"character":24}}}]}]


[Trace - 4:36:56 PM] Sending request 'textDocument/documentLink - (26)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:56 PM] Received response 'textDocument/documentLink - (26)' in 0ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:36:57 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":12},"contentChanges":[{"range":{"start":{"line":40,"character":6},"end":{"line":40,"character":6}},"rangeLength":0,"text":"="}]}


[Trace - 4:36:57 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":41,"character":12},"end":{"line":41,"character":12}},"severity":1,"source":"LSP","message":"expected '==', found '='"}]}


[Trace - 4:36:57 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:57 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:57 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":13},"contentChanges":[{"range":{"start":{"line":40,"character":7},"end":{"line":40,"character":7}},"rangeLength":0,"text":" "}]}


[Trace - 4:36:57 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":41,"character":12},"end":{"line":41,"character":12}},"severity":1,"source":"LSP","message":"expected '==', found '='"}]}


[Trace - 4:36:57 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:57 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":14},"contentChanges":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":8}},"rangeLength":0,"text":"u"}]}


[Trace - 4:36:58 PM] Sending request 'textDocument/completion - (27)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":9},"context":{"triggerKind":1}}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"severity":1,"source":"LSP","message":"undeclared name: u"}]}


[Trace - 4:36:58 PM] Received response 'textDocument/completion - (27)' in 5ms.
Params: {"isIncomplete":false,"items":[{"label":"url","kind":9,"detail":"\"net/url\"","sortText":"00010","filterText":"url","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"newText":"url"}},{"label":"uint","kind":25,"sortText":"00057","filterText":"uint","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"newText":"uint"}},{"label":"uint16","kind":25,"sortText":"00058","filterText":"uint16","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"newText":"uint16"}},{"label":"uint32","kind":25,"sortText":"00059","filterText":"uint32","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"newText":"uint32"}},{"label":"uint64","kind":25,"sortText":"00060","filterText":"uint64","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"newText":"uint64"}},{"label":"uint8","kind":25,"sortText":"00061","filterText":"uint8","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"newText":"uint8"}},{"label":"uintptr","kind":25,"sortText":"00062","filterText":"uintptr","insertTextFormat":2,"textEdit":{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":9}},"newText":"uintptr"}}]}


[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":15},"contentChanges":[{"range":{"start":{"line":40,"character":9},"end":{"line":40,"character":9}},"rangeLength":0,"text":"u"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":10}},"severity":1,"source":"LSP","message":"undeclared name: uu"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":16},"contentChanges":[{"range":{"start":{"line":40,"character":10},"end":{"line":40,"character":10}},"rangeLength":0,"text":"i"}]}


[Trace - 4:36:58 PM] Sending request 'textDocument/completion - (28)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":11},"context":{"triggerKind":1}}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":11}},"severity":1,"source":"LSP","message":"undeclared name: uui"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received response 'textDocument/completion - (28)' in 5ms.
Params: {"isIncomplete":false,"items":[]}


[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":17},"contentChanges":[{"range":{"start":{"line":40,"character":11},"end":{"line":40,"character":11}},"rangeLength":0,"text":"d"}]}


[Trace - 4:36:58 PM] Sending request 'textDocument/completion - (29)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":12},"context":{"triggerKind":1}}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":12}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:36:58 PM] Received response 'textDocument/completion - (29)' in 5ms.
Params: {"isIncomplete":false,"items":[]}


[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":18},"contentChanges":[{"range":{"start":{"line":40,"character":12},"end":{"line":40,"character":12}},"rangeLength":0,"text":"."}]}


[Trace - 4:36:58 PM] Sending request 'textDocument/completion - (30)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":13},"context":{"triggerKind":2,"triggerCharacter":"."}}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"no completions found for file:///Users/finchnat/archimedes/auth/auth.go:40:13: cannot resolve uuid"}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":41,"character":12},"end":{"line":41,"character":12}},"severity":1,"source":"LSP","message":"expected '==', found '='"}]}


[Trace - 4:36:58 PM] Received response 'textDocument/completion - (30)' in 5ms.
Params: {"isIncomplete":false,"items":[]}


[Info  - 4:36:58 PM] no completions found for file:///Users/finchnat/archimedes/auth/auth.go:40:13: cannot resolve uuid
[Trace - 4:36:58 PM] Sending request 'textDocument/documentLink - (31)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:36:58 PM] Received response 'textDocument/documentLink - (31)' in 0ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":19},"contentChanges":[{"range":{"start":{"line":40,"character":13},"end":{"line":40,"character":13}},"rangeLength":0,"text":"N"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":14}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Sending request 'textDocument/completion - (32)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":14},"context":{"triggerKind":1}}


[Trace - 4:36:58 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"no completions found for file:///Users/finchnat/archimedes/auth/auth.go:40:14: cannot resolve uuid"}


[Trace - 4:36:58 PM] Received response 'textDocument/completion - (32)' in 0ms.
Params: {"isIncomplete":false,"items":[]}


[Info  - 4:36:58 PM] no completions found for file:///Users/finchnat/archimedes/auth/auth.go:40:14: cannot resolve uuid
[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":20},"contentChanges":[{"range":{"start":{"line":40,"character":14},"end":{"line":40,"character":14}},"rangeLength":0,"text":"e"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":15}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:58 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":21},"contentChanges":[{"range":{"start":{"line":40,"character":15},"end":{"line":40,"character":15}},"rangeLength":0,"text":"w"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":16}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:36:58 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:36:59 PM] Sending request 'textDocument/codeAction - (33)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":40,"character":16},"end":{"line":40,"character":16}},"context":{"diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":16}},"message":"undeclared name: uuid","severity":1,"source":"LSP"}]}}


[Trace - 4:37:32 PM] Received response 'textDocument/codeAction - (33)' in 33421ms.
Params: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///Users/finchnat/archimedes/auth/auth.go":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":0}},"newText":"\t\"github.com/google/uuid\"\n"}]}}},{"title":"Organize All Imports","kind":"quickfix","edit":{"changes":{"file:///Users/finchnat/archimedes/auth/auth.go":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":0}},"newText":"\t\"github.com/google/uuid\"\n"}]}}}]


[Trace - 4:37:32 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":22},"contentChanges":[{"range":{"start":{"line":40,"character":16},"end":{"line":40,"character":16}},"rangeLength":0,"text":"V"}]}


[Trace - 4:37:32 PM] Sending notification '$/cancelRequest'.
Params: {"id":33}


[Trace - 4:37:32 PM] Sending request 'textDocument/completion - (34)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":17},"context":{"triggerKind":1}}


[Trace - 4:37:32 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":17}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:37:32 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:37:32 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:37:32 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"no completions found for file:///Users/finchnat/archimedes/auth/auth.go:40:17: cannot resolve uuid"}


[Trace - 4:37:32 PM] Received response 'textDocument/completion - (34)' in 33371ms.
Params: {"isIncomplete":false,"items":[]}


[Trace - 4:37:32 PM] Sending request 'textDocument/codeAction - (35)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":40,"character":17},"end":{"line":40,"character":17}},"context":{"diagnostics":[]}}


[Info  - 4:37:32 PM] no completions found for file:///Users/finchnat/archimedes/auth/auth.go:40:17: cannot resolve uuid
[Trace - 4:37:33 PM] Received response 'textDocument/codeAction - (35)' in 34264ms.
Params: {}


[Trace - 4:37:33 PM] Sending request 'textDocument/documentSymbol - (36)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:37:33 PM] Received response 'textDocument/documentSymbol - (36)' in 34166ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":51,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":54,"character":0},"end":{"line":62,"character":1}},"selectionRange":{"start":{"line":54,"character":15},"end":{"line":54,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":66,"character":0},"end":{"line":176,"character":1}},"selectionRange":{"start":{"line":66,"character":15},"end":{"line":66,"character":24}}}]}]


[Trace - 4:37:33 PM] Sending request 'textDocument/documentLink - (37)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:37:33 PM] Received response 'textDocument/documentLink - (37)' in 33961ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:37:33 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":23},"contentChanges":[{"range":{"start":{"line":40,"character":17},"end":{"line":40,"character":17}},"rangeLength":0,"text":"4"}]}


[Trace - 4:37:33 PM] Sending notification '$/cancelRequest'.
Params: {"id":35}


[Trace - 4:37:33 PM] Sending request 'textDocument/codeAction - (38)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":40,"character":18},"end":{"line":40,"character":18}},"context":{"diagnostics":[]}}


[Trace - 4:37:33 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":18}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:37:33 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:37:33 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:37:34 PM] Received response 'textDocument/codeAction - (38)' in 34471ms.
Params: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///Users/finchnat/archimedes/auth/auth.go":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":0}},"newText":"\t\"github.com/gofrs/uuid\"\n"}]}}}]


[Trace - 4:37:34 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":24},"contentChanges":[{"range":{"start":{"line":40,"character":18},"end":{"line":40,"character":18}},"rangeLength":0,"text":"()"}]}


[Trace - 4:37:34 PM] Sending notification '$/cancelRequest'.
Params: {"id":38}


[Trace - 4:37:34 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":25},"contentChanges":[{"range":{"start":{"line":40,"character":19},"end":{"line":40,"character":20}},"rangeLength":1,"text":")"}]}


[Trace - 4:37:34 PM] Sending request 'textDocument/signatureHelp - (39)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":20}}


[Trace - 4:37:34 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":18}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:37:34 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:37:34 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:37:34 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":18}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:37:34 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"no signature help for file:///Users/finchnat/archimedes/auth/auth.go:40:20 : cannot find an enclosing function"}


[Trace - 4:37:34 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:37:34 PM] Received response 'textDocument/signatureHelp - (39)' in 34255ms.
Params: {}


[Trace - 4:37:34 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:37:34 PM] Sending request 'textDocument/codeAction - (40)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":40,"character":20},"end":{"line":40,"character":20}},"context":{"diagnostics":[]}}


[Info  - 4:37:34 PM] no signature help for file:///Users/finchnat/archimedes/auth/auth.go:40:20 : cannot find an enclosing function
[Trace - 4:37:35 PM] Received response 'textDocument/codeAction - (40)' in 35219ms.
Params: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///Users/finchnat/archimedes/auth/auth.go":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":0}},"newText":"\t\"github.com/gofrs/uuid\"\n"}]}}}]


[Trace - 4:37:35 PM] Sending notification '$/cancelRequest'.
Params: {"id":36}


[Trace - 4:37:35 PM] Sending request 'textDocument/documentSymbol - (41)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:37:35 PM] Received response 'textDocument/documentSymbol - (41)' in 35117ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":54,"character":0},"end":{"line":62,"character":1}},"selectionRange":{"start":{"line":54,"character":15},"end":{"line":54,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":66,"character":0},"end":{"line":176,"character":1}},"selectionRange":{"start":{"line":66,"character":15},"end":{"line":66,"character":24}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":51,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}}]}]


[Trace - 4:37:35 PM] Sending request 'textDocument/documentLink - (42)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:37:35 PM] Received response 'textDocument/documentLink - (42)' in 34829ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:37:35 PM] Sending notification 'textDocument/didChange'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":26},"contentChanges":[{"range":{"start":{"line":40,"character":20},"end":{"line":40,"character":20}},"rangeLength":0,"text":" "}]}


[Trace - 4:37:35 PM] Sending notification '$/cancelRequest'.
Params: {"id":40}


[Trace - 4:37:35 PM] Sending notification '$/cancelRequest'.
Params: {"id":39}


[Trace - 4:37:35 PM] Sending request 'textDocument/signatureHelp - (43)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"position":{"line":40,"character":21}}


[Trace - 4:37:35 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/auth.go","diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":18}},"severity":1,"source":"LSP","message":"undeclared name: uuid"}]}


[Trace - 4:37:35 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/authboss.go","diagnostics":[]}


[Trace - 4:37:35 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"no signature help for file:///Users/finchnat/archimedes/auth/auth.go:40:21 : cannot find an enclosing function"}


[Trace - 4:37:35 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///Users/finchnat/archimedes/auth/router.go","diagnostics":[]}


[Trace - 4:37:35 PM] Received response 'textDocument/signatureHelp - (43)' in 33370ms.
Params: {}


[Trace - 4:37:35 PM] Sending notification '$/cancelRequest'.
Params: {"id":41}


[Trace - 4:37:35 PM] Sending request 'textDocument/documentSymbol - (44)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:37:35 PM] Received response 'textDocument/documentSymbol - (44)' in 33137ms.
Params: [{"name":"PageLogin","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":21,"character":1},"end":{"line":21,"character":10}}},{"name":"RedirectURIParam","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":24,"character":1},"end":{"line":24,"character":17}}},{"name":"AttemptsRemain","detail":"untyped string","kind":14,"range":{"start":{"line":19,"character":0},"end":{"line":30,"character":1}},"selectionRange":{"start":{"line":29,"character":1},"end":{"line":29,"character":15}}},{"name":"Auth","detail":"struct{...}","kind":23,"range":{"start":{"line":33,"character":5},"end":{"line":36,"character":1}},"selectionRange":{"start":{"line":33,"character":5},"end":{"line":33,"character":9}},"children":[{"name":"Authboss","detail":"*authboss.Authboss","kind":8,"range":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}},"selectionRange":{"start":{"line":34,"character":1},"end":{"line":34,"character":19}}},{"name":"DB","detail":"*sql.DB","kind":8,"range":{"start":{"line":35,"character":1},"end":{"line":35,"character":11}},"selectionRange":{"start":{"line":35,"character":1},"end":{"line":35,"character":3}}},{"name":"Init","detail":"(ab *authboss.Authboss)","kind":6,"range":{"start":{"line":39,"character":0},"end":{"line":51,"character":1}},"selectionRange":{"start":{"line":39,"character":15},"end":{"line":39,"character":19}}},{"name":"LoginGet","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":54,"character":0},"end":{"line":62,"character":1}},"selectionRange":{"start":{"line":54,"character":15},"end":{"line":54,"character":23}}},{"name":"LoginPost","detail":"(w http.ResponseWriter, r *http.Request)","kind":6,"range":{"start":{"line":66,"character":0},"end":{"line":176,"character":1}},"selectionRange":{"start":{"line":66,"character":15},"end":{"line":66,"character":24}}}]}]


[Trace - 4:37:35 PM] Sending request 'textDocument/codeAction - (45)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"},"range":{"start":{"line":0,"character":0},"end":{"line":177,"character":0}},"context":{"diagnostics":[{"range":{"start":{"line":40,"character":8},"end":{"line":40,"character":16}},"message":"undeclared name: uuid","severity":1,"source":"LSP"}]}}


[Info  - 4:37:35 PM] no signature help for file:///Users/finchnat/archimedes/auth/auth.go:40:21 : cannot find an enclosing function
[Trace - 4:37:37 PM] Received response 'textDocument/codeAction - (45)' in 33729ms.
Params: [{"title":"Organize Imports","kind":"source.organizeImports","edit":{"changes":{"file:///Users/finchnat/archimedes/auth/auth.go":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":0}},"newText":"\t\"github.com/gofrs/uuid\"\n"},{"range":{"start":{"line":40,"character":0},"end":{"line":41,"character":0}},"newText":""},{"range":{"start":{"line":41,"character":0},"end":{"line":41,"character":0}},"newText":"\t_, _ = uuid.NewV4()\n"}]}}},{"title":"Organize All Imports","kind":"quickfix","edit":{"changes":{"file:///Users/finchnat/archimedes/auth/auth.go":[{"range":{"start":{"line":16,"character":0},"end":{"line":16,"character":0}},"newText":"\t\"github.com/gofrs/uuid\"\n"},{"range":{"start":{"line":40,"character":0},"end":{"line":41,"character":0}},"newText":""},{"range":{"start":{"line":41,"character":0},"end":{"line":41,"character":0}},"newText":"\t_, _ = uuid.NewV4()\n"}]}}}]


[Trace - 4:37:37 PM] Sending request 'textDocument/documentLink - (46)'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go"}}


[Trace - 4:37:37 PM] Received response 'textDocument/documentLink - (46)' in 33564ms.
Params: [{"range":{"start":{"line":7,"character":1},"end":{"line":7,"character":10}},"target":"https://godoc.org/context"},{"range":{"start":{"line":8,"character":1},"end":{"line":8,"character":15}},"target":"https://godoc.org/database/sql"},{"range":{"start":{"line":9,"character":1},"end":{"line":9,"character":11}},"target":"https://godoc.org/net/http"},{"range":{"start":{"line":10,"character":1},"end":{"line":10,"character":10}},"target":"https://godoc.org/net/url"},{"range":{"start":{"line":12,"character":1},"end":{"line":12,"character":29}},"target":"https://godoc.org/golang.org/x/crypto/bcrypt"},{"range":{"start":{"line":14,"character":1},"end":{"line":14,"character":31}},"target":"https://godoc.org/github.com/Mattel/archimedes"},{"range":{"start":{"line":15,"character":1},"end":{"line":15,"character":55}},"target":"https://godoc.org/github.com/Mattel/archimedes/db/gnorm/loginredirects"},{"range":{"start":{"line":16,"character":1},"end":{"line":16,"character":35}},"target":"https://godoc.org/github.com/volatiletech/authboss"}]


[Trace - 4:37:37 PM] Sending notification '$/cancelRequest'.
Params: {"id":45}


[Trace - 4:37:37 PM] Sending notification 'textDocument/didSave'.
Params: {"textDocument":{"uri":"file:///Users/finchnat/archimedes/auth/auth.go","version":26}}

@stamblerre
Copy link
Contributor

My best guess from these logs is that this 33-35 second latency number is about the cost of go/packages and type-checking your project. You can see this latency at start up, and then it comes back when an import is added (which is when gopls will re-run go/packages.Load again). That probably does cause timeouts and messes everything up. I'm quite shocked that it would take this long, but I'm not sure of another explanation. What is the latency of running go list -e -json -compiled -test /absolute/path/to/project? You can also try out the gopackages command in golang.org/x/tools/go/packages/gopackages.

@stamblerre
Copy link
Contributor

Also, are you using cgo? go list may be very slow with projects using cgo.

@freeformz
Copy link

FWIW: I see a bunch of things on my 2015 work Mac Book Pro easily take 18 seconds on a relatively small project (just a few dozen files spread across ~3 or 4 packages).

@stamblerre
Copy link
Contributor

stamblerre commented Jun 27, 2019

@freeformz: Do you mind attaching those logs? And same questions - are you using build tags or cgo? Does go list take a long time?

@stamblerre
Copy link
Contributor

Also, this could be related: #32750.

@bmhatfield
Copy link

bmhatfield commented Jun 28, 2019

@stamblerre I am experiencing long delays on save (specifically when an import needs to be added) in VSCode (30-45s, I have a 60s timeout and sometimes it only completes half the needed imports), but based upon the commands you shared, it may be the result of a different problem:

go list -e -json -compiled -test $(pwd)/... 1.21s user 0.91s system 126% cpu 1.680 total

@stamblerre stamblerre changed the title x/tools/cmd/gopls: imports and go to definition mostly don't work x/tools/gopls: imports and go to definition mostly don't work Jul 2, 2019
@atombender
Copy link

With HEAD, which looks like it has a lot of refactoring of import code, it's worse than ever — just moving the cursor around triggers source.organizeImports, which takes 2-4 seconds each time.

Worse, this seems to accumulate — normal, light editing of code quickly saturates all cores for a while:

$ ps uxp 55743
USER   PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
alex 55743 531.3  1.9  4678876 325944   ??  R     1:45PM   5:36.08 /Users/alex/.go/bin/gopls -mode=stdio -rpc.trace
           ^^^^^ !

I also see this if I just do a few bogus changes like hitting the enter key repeatedly,

(Not sure if this is the right issue to report this on.)

@bmhatfield
Copy link

Chiming in here to say I've been staying reasonably current on gopls and things seem to be working much better for me now. I can't pinpoint the exact time things got better, but I haven't had a case of getting stuck importing and needing to resolve by hand for at least a week.

@thepudds
Copy link
Contributor

thepudds commented Aug 1, 2019

@bmhatfield for future reference, what exact version are you on right now?

@bmhatfield
Copy link

bmhatfield commented Aug 2, 2019

% gopls version
version v0.1.3-cmd.gopls, built in $GOPATH mode

(still not sure what $GOPATH mode means here, I am using modules)

EDIT: After poking around locally, it appears VSCode is building gopls from master. So I was on ed3277de, am on e9bb7d36 now

@stamblerre
Copy link
Contributor

Great, thank you for sharing.

I think this issue has become long enough that it's not worth leaving open. Please track improvements to imports speed here (#32750), and for other problems, please open a new issue.

@golang golang locked and limited conversation to collaborators Aug 1, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge gopls Issues related to the Go language server, gopls.
Projects
None yet
Development

No branches or pull requests