GoLint / GoType GoSublime не работает (без дубликатов)

Возникла проблема с включением / обнаружением GoSublime + Linters при тестировании Debian в Sublime 3. Я делал это с полдюжины раз на машинах с OSX и Windows без сбоев.

Консоль ST говорит:

SublimeLinter: debug mode: off 
SublimeLinter: annotations activated: <builtin> 
SublimeLinter: WARNING: golint deactivated, cannot locate 'golint' 
SublimeLinter: WARNING: gotype deactivated, cannot locate 'gotype' 
SublimeLinter: WARNING: govet deactivated, cannot locate 'go'

Интересно, как он говорит, что не может найти go поскольку я не заметил этого раньше, когда настраивал вещи с предыдущими ошибками (которые я исправил). Go есть, как показывает GoSublime:

GoSblime r13.12.26-3 sh: load env vars ['/bin/bash', '--login', '-c', 'echo "..."']: go version: ['/usr/local/go/bin/go', 'version'] -> `go version go1.3.1 linux/amd64
` -> `go1.3.1`: 0.043s
GoSublime r13.12.26-3: init mod(mg9)
SublimeLinter: debug mode: off 
SublimeLinter: json activated: <builtin> 
SublimeLinter: annotations activated: <builtin> 

** 2014-09-18 08:48:11.608847 **:
GoSublime init r13.12.26-3 (0.001s)
|   install margo: no
|   install state: done
| sublime.version: 3065
| sublime.channel: stable
|       about.ann: a14.02.25-1
|   about.version: r13.12.26-3
|         version: r13.12.26-3
|        platform: linux-x64
|            ~bin: ~/.config/sublime-text-3/Packages/User/GoSublime/linux-x64/bin
|       margo.exe: ~bin/gosublime.margo_r13.12.26-3_go1.3.1.exe (ok)
|          go.exe: /usr/local/go/bin/go (ok)
|      go.version: go1.3.1
|          GOROOT: /usr/local/go
|          GOPATH: ~/go
|           GOBIN: (not set) (should usually be `(not set)`)
|       set.shell: ['/bin/bash', '--login', '-c', '$CMD']
|       env.shell: /bin/bash
|       shell.cmd: ['/bin/bash', '--login', '-c', '${CMD}']
--------------------------------

GOBIN (не установлен) - еще одна интересная вещь, на которую, как я признаю, я раньше не обращал внимания в других системах.

Так что это проблема с конфигурацией плагина Linter, которая проксируется из плагина GoSublime, я бы мог представить? Я полагаю, что он настроен правильно, так как я копирую и вставляю каталоги, и они работают в терминале (сообщая, что нет typeo).

# GoSublime.sublime-settings (User)
{
    "env": { 
        "GOROOT": "/usr/local/go",
        "GOPATH": "$HOME/go",
        "PATH": "$PATH:$GOROOT/bin:$GOPATH/bin"
    }
}

Марго не жалуется, что больше не может найти ГОПАТУ; Итак, я правильно установил, и это обнаружено.

Я даже порылся в прекрасных настройках GoSublime сегодня, чтобы попытаться решить эту проблему, и нашел самородок о настройке команды оболочки, которую я могу указать для bash; Итак, теперь у меня есть это:

"shell": ["/bin/bash", "--login", "-c", "$CMD"],
"env": { 
    "GOROOT": "/usr/local/go",
    "GOPATH": "$HOME/go",
    "PATH": "$PATH:$GOROOT/bin:$GOPATH/bin"
},

Но это тоже не помогло.

Используя следующее:

Debian Testing (all updated packages)
i3 Window Manager (though I don't think this worked with Gnome)
Go 1.3.1 (built from source release, located at /usr/local/go)
SublimeText 3 3065 (registered)
GoSublime (latest as of posting)
go get github.com/golang/lint (and working in terminal) 
go get code.google.com/p/go.tools/cmd/gotype (works in terminal)
go vet (working in terminal)

Все пути настроены правильно.

# i3wm
exec GOPATH="$HOME/go"
exec GOROOT="/usr/local/go"
exec PATH="$PATH:$GOROOT/bin:$GOPATH/bin"

# .bashrc
export GOPATH="$HOME/go"
export GOROOT="/usr/local/go"
PATH="$PATH:$GOROOT/bin:$GOPATH/bin"

Они отлично работают, и я могу запускать команды Go, устанавливать пакеты и т. Д. Как с терминала, так и с i3 (написание некоторых пользовательских строк состояния в Go).

GoType и GoLint также установлены, и я могу запустить их из bash.

Общий SublimeLinter загружен с правильными линтерами.

reloading plugin SublimeLinter-annotations.linter
SublimeLinter: annotations linter loaded 
reloading plugin SublimeLinter-contrib-golint.linter
SublimeLinter: golint linter loaded 
reloading plugin SublimeLinter-contrib-gotype.linter
SublimeLinter: gotype linter loaded 
reloading plugin SublimeLinter-contrib-govet.linter
SublimeLinter: govet linter loaded 
reloading plugin SublimeLinter-json.linter
SublimeLinter: json linter loaded 
reloading plugin sublimelint.commands
reloading plugin sublimelint.sublimelint

Но все же я продолжаю получать эти ошибки, как уже упоминалось в начале.

Заранее спасибо!

1 ответ

Решение

Я починил это. Проблема была в незнании bash конфигурационные файлы. Я нашел подробности на странице SublimeLinter для устранения неисправностей пользовательских линтеров.

http://www.sublimelinter.com/en/latest/troubleshooting.html

Включив Debug, я увидел, что расширенный PATH, который использовал SublimeLinter, не включал в себя какие-либо из моих пользовательских настроек PATH.

Короткий ответ:

  • переместить все ваши GO переменные к .bash_profile файл
  • переместить все ваши PATH переменные к тому же .bash_profile файл
  • добавить строку в ваш .bashrc файл для выполнения .bash_profile файл для интерактивных терминалов

(Более длинный ответ ниже, для пользователей Linux)

При запуске терминала это "интерактивная" оболочка bash. Баш читает .bashrc только файл, который я правильно настроил. У меня не было .bash_profile Как мой .bashrc отлично работал для интерактивных оболочек со всеми моими настройками.

Но из SublimeLinter он загружает оболочку bash "login", которая не является интерактивной. В Linux это только загружает .bash_profile файл - не .bashrc файл.

Исправление:

  • Добавьте это к вершине вашего .bashrc файл:

    источник ~/.bash_profile

  • Переместите переменные GO и изменения PATH (и FYI, ВСЕ ДРУГИЕ записи пути, которые вы изменили в этом файле.bashrc) в новый .bash_profile файл. Убедитесь, что удалили их из.bashrc.

Готово. Закройте Sublime и снова откройте. Путь теперь выбран правильно.

Это работает, потому что source ~/.bash_profile файл читается на каждом интерактивном терминале, который вы открываете, потому что там используется файл.bashrc. Но только для сеансов входа в систему, например, от SublimeLinter, только .bash_profile используется - ваш.bashrc не выполняется.

Итак, вы хотите указать свои собственные переменные GO (GOROOT, GOPATH и т. Д.) В вашем .bash_profile только не в.bashrc. Но, чтобы прочитать этот файл.bash_profile из интерактивных оболочек (например, терминалов), вы должны выполнить этот.bash_profile. Мы делаем это с первой строкой, добавляемой вверху вашего файла.bashrc: source ~/.bash_profile, Это запускает скрипт профиля, который всасывает ваши пользовательские переменные GO, а также все ваши пользовательские переменные PATH.

(для OSX) Смотрите первую ссылку выше в этом комментарии.

Вы можете прочитать больше о файлах bash здесь: http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html

Другие вопросы по тегам