saibing / bingo

Bingo is a Go language server that speaks Language Server Protocol.
MIT License
495 stars 25 forks source link

fail get importPath when opening project #184

Closed sillydong closed 5 years ago

sillydong commented 5 years ago

In usual case, when I open projects under gopath, I can get importPath, but when I open projects not under gopath and defined itself as gopath, I can not get importPath, instead it returnd "%s is out of GOPATH workspace %v"

directory structure ~ |-project |--bin |--pkg |--tools |--src |---pkg.sillydong.com |----app |----lib |----vendor

I used ${workspaceRoot} as its gopath(~/project)

I reviewed the code following

func (p *Project) getImportPath() string {
    for _, path := range gopaths {
        path = util.LowerDriver(filepath.ToSlash(path))
        srcDir := filepath.Join(path, "src")
        p.notifyLog(fmt.Sprintf("rootDir: %s", p.rootDir))
        p.notifyLog(fmt.Sprintf("srcDir: %s", srcDir))
        if strings.HasPrefix(p.rootDir, srcDir) && p.rootDir != srcDir {
            p.notifyLog(fmt.Sprintf("result: %s", filepath.ToSlash(p.rootDir[len(srcDir)+1:])))
            return filepath.ToSlash(p.rootDir[len(srcDir)+1:])
        }
    }

    return ""
}

rootDIr is ~/project srcDir is ~/project/src

thus I can not get importPath.

Is there any way to fix the importPath under this circumstance?

PS: GO111MODULE is off

saibing commented 5 years ago

@sillydong

I am very sorry that I have planned not continue to maintain this project.

please use gopls

sillydong commented 5 years ago

ok, thanks!

sillydong commented 5 years ago

Sorry but saibing/tools does not support issue.

I recently updated local saibing/tools source to the latest commit and reinstalled. After that, vscode starts to give out errors while starting gopls.

In OUTPUT info of gopls, the GOPATH is right but GOMOD is wrong. It seeks go.mod from the root directory of workspace.

~
|-project
|--go
|---bin
|---pkg
|---tools
|---src
|----pkg.sillydong.com
|-----app
|------cmd
|-------main.go
|-----lib
|-----vendor
|-----go.mod
|-----go.sum

.vscode/settings.json

{
    "go.gopath": "${workspaceRoot}/go",
}

OUTPUT of gopls

[Info  - 6:45:28 PM] #### Build info

golang.org/x/tools/cmd/gopls
    golang.org/x/tools@(devel)
    golang.org/x/sync@v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=

#### Go info

go version go1.12.1 darwin/amd64

GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/foo/Library/Caches/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/foo/Src/project/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/opt/go/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/opt/go/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD="/Users/foo/Src/project/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/jc/wjk1kxrs3vn541l6vf8x0_2c0000gn/T/go-build628197722=/tmp/go-build -gno-record-gcc-switches -fno-common"

2019/05/20 18:45:28 get token failed: go [list -f {{context.GOARCH}} {{context.Compiler}} -- unsafe]: exit status 1: go: cannot determine module path for source directory /Users/foo/Src/project (outside GOPATH, no import comments)

2019/05/20 18:45:28 get package failed: go [list -f {{context.GOARCH}} {{context.Compiler}} -- unsafe]: exit status 1: go: cannot determine module path for source directory /Users/foo/Src/project (outside GOPATH, no import comments)

2019/05/20 18:45:28 get ast file failed: go [list -f {{context.GOARCH}} {{context.Compiler}} -- unsafe]: exit status 1: go: cannot determine module path for source directory /Users/foo/Src/project (outside GOPATH, no import comments)

2019/05/20 18:45:28 get package failed: go [list -f {{context.GOARCH}} {{context.Compiler}} -- unsafe]: exit status 1: go: cannot determine module path for source directory /Users/foo/Src/project (outside GOPATH, no import comments)

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0x1357fc4]

goroutine 19 [running]:
golang.org/x/tools/internal/lsp/source.qualifier(0x0, 0x0, 0x0, 0x8)
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/lsp/source/completion_format.go:173 +0x34
golang.org/x/tools/internal/lsp/source.getSymbols(0xc000202800, 0x0, 0x176bb00, 0xc00017c000, 0xc00017c000, 0xc0000a2750, 0xc0000d2d80)
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/lsp/source/symbols.go:55 +0x143
golang.org/x/tools/internal/lsp/source.DocumentSymbols(0x17640a0, 0xc000037280, 0x176a160, 0xc0000d2d80, 0xc000242080, 0x76, 0x176a160)
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/lsp/source/symbols.go:47 +0xd9
golang.org/x/tools/internal/lsp.(*Server).documentSymbol(0xc0001c60e0, 0x17640a0, 0xc000037280, 0xc0001fc150, 0xc0001fc150, 0x0, 0x0, 0x0, 0xc0000ce1e0)
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/lsp/symbols.go:22 +0x138
golang.org/x/tools/internal/lsp.(*Server).DocumentSymbol(0xc0001c60e0, 0x17640a0, 0xc000037280, 0xc0001fc150, 0xc0001fc150, 0x0, 0x0, 0x0, 0x0)
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/lsp/server.go:198 +0x4d
golang.org/x/tools/internal/lsp/protocol.serverHandler.func1(0x17640a0, 0xc000037280, 0xc0001c6150, 0xc00000fe40)
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/lsp/protocol/tsserver.go:346 +0x4adb
golang.org/x/tools/internal/jsonrpc2.(*Conn).Run.func1(0xc000098360, 0xc0001c6150)
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/jsonrpc2/jsonrpc2.go:276 +0xda
created by golang.org/x/tools/internal/jsonrpc2.(*Conn).Run
    /Users/foo/Src/Go/src/github.com/saibing/tools/internal/jsonrpc2/jsonrpc2.go:270 +0xba
[Info  - 6:45:28 PM] Connection to server got closed. Server will restart.
[Error - 6:45:28 PM] Request textDocument/documentSymbol failed.
Error: Connection got disposed.
    at Object.dispose (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/main.js:876:25)
    at Object.dispose (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/client.js:57:35)
    at LanguageClient.handleConnectionClosed (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/client.js:2036:42)
    at LanguageClient.handleConnectionClosed (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/main.js:127:15)
    at closeHandler (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/client.js:2023:18)
    at CallbackList.invoke (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:120:36)
    at closeHandler (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/main.js:226:26)
    at CallbackList.invoke (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:120:36)
    at StreamMessageReader.fireClose (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/messageReader.js:111:27)
    at Socket.listen.readable.on (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/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)
[Error - 6:45:28 PM] Request textDocument/documentLink failed.
Error: Connection got disposed.
    at Object.dispose (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/main.js:876:25)
    at Object.dispose (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/client.js:57:35)
    at LanguageClient.handleConnectionClosed (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/client.js:2036:42)
    at LanguageClient.handleConnectionClosed (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/main.js:127:15)
    at closeHandler (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-languageclient/lib/client.js:2023:18)
    at CallbackList.invoke (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:120:36)
    at closeHandler (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/main.js:226:26)
    at CallbackList.invoke (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:62:39)
    at Emitter.fire (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/events.js:120:36)
    at StreamMessageReader.fireClose (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/node_modules/vscode-jsonrpc/lib/messageReader.js:111:27)
    at Socket.listen.readable.on (/Users/foo/.vscode/extensions/ms-vscode.go-0.10.2/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)
/Users/foo/Src/project/go/pkg/mod/github.com/bradfitz/gomemcache@v0.0.0-20190329173943-551aad21a668/go.mod
/Users/foo/Src/project/go/pkg/mod/github.com/gin-contrib/gzip@v0.0.1/go.mod
/Users/foo/Src/project/go/pkg/mod/github.com/jmoiron/sqlx@v1.2.0/go.mod
/Users/foo/Src/project/go/pkg/mod/github.com/lib/pq@v1.0.0/go.mod
/Users/foo/Src/project/go/pkg/mod/github.com/stretchr/testify@v1.3.0/go.mod
/Users/foo/Src/project/go/pkg/mod/github.com/ugorji/go/codec@v0.0.0-20181022190402-e5e69e061d4f/go.mod
/Users/foo/Src/project/go/pkg/mod/google.golang.org/appengine@v1.5.0/go.mod
/Users/foo/Src/project/go/pkg/mod/gopkg.in/yaml.v2@v2.2.1/go.mod
/Users/foo/Src/project/go/src/git.sillydong.com/go.mod
saibing commented 5 years ago

@sillydong

vscode needs to open the directory where the go.mod file is located, ie /Users/foo/Src/project/go/src/git.sillydong.com

sillydong commented 5 years ago

could it be configured?

saibing commented 5 years ago

@sillydong

I'm sorry, it cannot be configured