Improvements to GOPATH and PATH search for Go tools

This commit is contained in:
Luke Hoban 2015-11-20 08:15:03 -08:00
Родитель bf61793b34
Коммит 0f20bc67df
2 изменённых файлов: 29 добавлений и 9 удалений

Просмотреть файл

@ -102,9 +102,14 @@ The extension uses the following tools, installed in the current GOPATH. If any
- goreturns: `go get -u -v sourcegraph.com/sqs/goreturns`
- gorename: `go get -u -v golang.org/x/tools/cmd/gorename`
To install them just paste and run
To install them just paste and run:
```bash
go get -u -v github.com/nsf/gocode github.com/rogpeppe/godef github.com/golang/lint/golint github.com/lukehoban/go-find-references sourcegraph.com/sqs/goreturns golang.org/x/tools/cmd/gorename
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-find-references
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
```
And for debugging:

Просмотреть файл

@ -14,18 +14,33 @@ import { showGoStatus, hideGoStatus } from './goStatus'
var binPathCache : { [bin: string]: string;} = {}
export function getBinPath(binname) {
binname = correctBinname(binname)
if(binPathCache[binname]) return binPathCache[binname];
var workspaces = getGOPATHWorkspaces();
binname = correctBinname(binname);
var binpath: string;
// First search each GOPATH workspace's bin folder
var workspaces = getPathParts(process.env["GOPATH"]);
for(var i = 0; i < workspaces.length; i++) {
binpath = path.join(workspaces[i], "bin", binname);
if(fs.existsSync(binpath)) {
binPathCache[binname] = binpath;
return binpath;
}
}
console.log("Couldn't find a binary in any GOPATH workspaces: ", binname, " ", workspaces)
return path.join(process.env["GOPATH"], "bin", binname);
// Then search PATH parts
var pathparts = getPathParts(process.env["PATH"]);
for(var i = 0; i < pathparts.length; i++) {
binpath = path.join(pathparts[i], binname);
if(fs.existsSync(binpath)) {
binPathCache[binname] = binpath;
return binpath;
}
}
// Else return the binary name directly (this will likely always fail downstream)
binPathCache[binname] = binname;
return binname;
}
function correctBinname(binname) {
@ -35,7 +50,7 @@ function correctBinname(binname) {
return binname
}
function getGOPATHWorkspaces() {
function getPathParts(path: string) {
var seperator : string;
switch(os.platform()) {
case 'win32':
@ -48,7 +63,7 @@ function getGOPATHWorkspaces() {
seperator = ':';
}
var parts = process.env["GOPATH"].split(seperator);
var parts = path.split(seperator);
return parts;
}
@ -72,7 +87,7 @@ export function setupGoPathAndOfferToInstallTools() {
}
// Offer to install any missing tools
var tools = {
var tools: {[key:string]: string} = {
gorename: "golang.org/x/tools/cmd/gorename",
gocode: "github.com/nsf/gocode",
goreturns: "sourcegraph.com/sqs/goreturns",