xxpxxxxp / intellij-plugin-golangci-lint

GolangCI-Lint integration for IDEA
GNU General Public License v3.0
223 stars 14 forks source link

如何设置Go Linter使用的PATH环境变量? #130

Closed zync-mzy closed 1 year ago

zync-mzy commented 1 year ago

背景

macOS升级到Ventura版本之后,系统自带的/usr/bin/diff输出改变了,导致goimports会报错,进而导致Go Linter执行失败。 有一个解决方法是brew install diffutils安装另一个diff,路径是/opt/homebrew/bin/diff,但是从Go Linter的执行日志(如下)来看,/opt/homebrew/bin并不在PATH里面,导致无法使用新安装的diff。

2022-11-29 11:38:52,640 [90845894]   WARN - go-linter - Debug command: cd /Users/zync/Git/insurance-hub/insurance-order && export PATH=/opt/homebrew/Cellar/go@1.16/1.16.15/libexec/bin:/usr/bin:/bin:/usr/sbin:/sbin && export GOPATH= && export GO111MODULE=on && '/Users/zync/go/bin/golangci-lint' 'run' '--out-format' 'json' '--allow-parallel-runners' '-j' '3' '--issues-exit-code' '1' '--max-issues-per-linter' '0' '--max-same-issues' '0' '-c' '/Users/zync/Git/insurance-hub/insurance-order/.golangci.yml' 'src/payment/integrate/impl'

问题

  1. Go Linter的PATH是从哪取的?我的系统没有任何一个PATH是日志中这样的
  2. 我如何修改Go Linter的PATH?
xxpxxxxp commented 1 year ago

Hi @zync-mzy , 插件使用的PATH包含两部分:

  1. IDE里设置的$GOROOT/bin, GOROOT就是这里设置的,这是为了保证golangci-lint执行中使用的go一定是跟IDE一样的

    image
  2. System GOPATH,也就是后面这段 /usr/bin:/bin:/usr/sbin:/sbin ,据我所知Goland会起一个独立的python进程尝试获取.bashrc/.zshrc等配置文件里设置的PATH。也就是这部分导致了你diff的问题

解决方法可能有:

  1. 在你的.bashrc等配置文件里把 /opt/homebrew/bin/diff 加到现有的PATH前面
  2. brew link -f diffutils 强制用新的 diff 替换掉系统自带的
zync-mzy commented 1 year ago

@xxpxxxxp 感谢你及时的回复和解决建议!

在你的.bashrc等配置文件里把 /opt/homebrew/bin/diff 加到现有的PATH前面

但是我在自己的终端里面,echo $PATH展示的内容也并不是/usr/bin:/bin:/usr/sbin:/sbin,包括我在Goland自带的终端里打印出来的PATH也不是,所以我就非常困惑,不知道该怎么设置了

brew link -f diffutils 强制用新的 diff 替换掉系统自带的

这个只是把/opt/homebrew/Cellar/diffutils/3.8的二进制软链到/opt/homebrew/bin/下面,并无法解决我的问题


不知道你是否还有别的建议?附上我在独立终端和Goland终端的输出

# Goland Terminal
$ echo $PATH
/opt/homebrew/Cellar/go@1.16/1.16.15/libexec/bin:/Users/zync/go/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/zync/go/bin

# iterm2
$ echo $PATH
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/zync/go/bin
xxpxxxxp commented 1 year ago

有个简单粗暴的方法,从iterm2里启动Goland,这样它就会继承iterm2里的PATH https://medium.com/@shaunthomas999/how-to-launch-intellij-idea-from-command-line-ba10443cc1a9#:~:text=Go%20to%20%27Tools%27%20menu%20in,I%20choose%20idea%20as%20command.

zync-mzy commented 1 year ago

这个方法对我来说非常🉑️ 感谢!