ale icon indicating copy to clipboard operation
ale copied to clipboard

gopls doesn't show any errors in gopath mode

Open presmihaylov opened this issue 5 years ago • 2 comments

Information

VIM version NVIM v0.4.4 Build type: Release

Operating System: MacOS

What went wrong

gopls doesn't work when I make projects in my gopath. When I make them with a go module, everything is nice and dandy.

Reproducing the bug

cd /tmp
mkdir foo
cd foo
go mod init github.com/foo/bar
vim main.go

# add the following contents
package main

import "fmt"

func main() {
	fmt.Prinln("vim-go")
}

After a second, ALE nicely shows an error on the proper place: image

Do the same exercise but in gopath mode:

cd $GOPATH/src/github.com
mkdir -p foo/bar && cd foo/bar
vim main.go

# add the same content as before

This time, ALE doesn't print anything... image

However, if I explicitly run :GoDiagnostics as I have vim-go installed, I get the expected error in the quickfix window -> so it's not a gopls issue: image

ALEInfo & vimrc

:ALEInfo


 Current Filetype: go
Available Linters: ['bingo', 'gobuild', 'gofmt', 'golangci-lint', 'golint', 'gometalinter', 'gopls', 'gosimple', 'gotype', 'govet', 'golangserver', 'revive', 'staticcheck']
   Linter Aliases:
'gobuild' -> ['go build']
'govet' -> ['go vet']
  Enabled Linters: ['gofmt', 'golint', 'gopls']
  Ignored Linters: []
 Suggested Fixers: 
  'gofmt' - Fix Go files with go fmt.
  'goimports' - Fix Go files imports with goimports.
  'remove_trailing_lines' - Remove all blank lines at the end of a file.
  'trim_whitespace' - Remove all trailing whitespace characters at the end of every line.
 Linter Variables:

let g:ale_go_go_executable = 'go'
let g:ale_go_golangci_lint_executable = 'golangci-lint'
let g:ale_go_golangci_lint_options = '--enable-all'
let g:ale_go_golangci_lint_package = 0
let g:ale_go_golint_executable = 'golint'
let g:ale_go_golint_options = ''
let g:ale_go_gopls_executable = 'gopls'
let g:ale_go_gopls_options = '--mode stdio'
let g:ale_go_langserver_executable = 'go-langserver'
let g:ale_go_langserver_options = ''
 Global Variables:

let g:ale_cache_executable_check_failures = v:null
let g:ale_change_sign_column_color = 0
let g:ale_command_wrapper = ''
let g:ale_completion_delay = 100
let g:ale_completion_enabled = 1
let g:ale_completion_max_suggestions = 50
let g:ale_disable_lsp = 0
let g:ale_echo_cursor = 1
let g:ale_echo_msg_error_str = 'Error'
let g:ale_echo_msg_format = '%code: %%s'
let g:ale_echo_msg_info_str = 'Info'
let g:ale_echo_msg_warning_str = 'Warning'
let g:ale_enabled = 1
let g:ale_fix_on_save = 0
let g:ale_fixers = {'javascript': ['eslint']}
let g:ale_history_enabled = 1
let g:ale_history_log_output = 1
let g:ale_keep_list_window_open = 0
let g:ale_lint_delay = 200
let g:ale_lint_on_enter = 1
let g:ale_lint_on_filetype_changed = 1
let g:ale_lint_on_insert_leave = 1
let g:ale_lint_on_save = 1
let g:ale_lint_on_text_changed = 'normal'
let g:ale_linter_aliases = {}
let g:ale_linters = {'go': ['gofmt', 'golint', 'gopls'], 'typescript': ['tslint'], 'vue': ['eslint'], 'sh': [], 'bash': [], 'javascript': ['flow-language-server', 'eslint'], 'python': []}
let g:ale_linters_explicit = 1
let g:ale_linters_ignore = {}
let g:ale_list_vertical = 0
let g:ale_list_window_size = 10
let g:ale_loclist_msg_format = '%code: %%s'
let g:ale_lsp_root = {}
let g:ale_max_buffer_history_size = 20
let g:ale_max_signs = -1
let g:ale_maximum_file_size = v:null
let g:ale_open_list = 0
let g:ale_pattern_options = v:null
let g:ale_pattern_options_enabled = v:null
let g:ale_set_balloons = 0
let g:ale_set_highlights = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_set_signs = 1
let g:ale_sign_column_always = 0
let g:ale_sign_error = '!'
let g:ale_sign_info = '1'
let g:ale_sign_offset = 1000000
let g:ale_sign_style_error = '!'
let g:ale_sign_style_warning = '1'
let g:ale_sign_warning = '1'
let g:ale_sign_highlight_linenrs = 0
let g:ale_statusline_format = v:null
let g:ale_type_map = {}
let g:ale_use_global_executables = 1
let g:ale_virtualtext_cursor = 0
let g:ale_warn_about_trailing_blank_lines = 1
let g:ale_warn_about_trailing_whitespace = 1
  Command History:

(executable check - success) gofmt
(finished - exit code 0) ['/bin/zsh', '-c', '''gofmt'' -e ''/var/folders/tj/7m0xyx914_3c4wwcjf9g_b3h0000gn/T/nvimVHaSwP/2/main.go''']

<<<NO OUTPUT RETURNED>>>

(executable check - success) golint
(finished - exit code 0) ['/bin/zsh', '-c', '''golint'' ''/var/folders/tj/7m0xyx914_3c4wwcjf9g_b3h0000gn/T/nvimVHaSwP/3/main.go''']

<<<NO OUTPUT RETURNED>>>

Related .vimrc configuration for ALE:

let g:ale_linters = {
\   'sh': [],
\   'bash': [],
\   'python': [],
\   'javascript': ['flow-language-server', 'eslint'],
\   'typescript': ['tslint'],
\   'go': ['golint', 'gopls'],
\   'vue': ['eslint']
\}

let g:ale_fixers = {'javascript': ['eslint']}
let g:ale_sign_warning='!'
let g:ale_sign_error='!'

" only run explicit linters specified above
let g:ale_linters_explicit = 1
let g:ale_fix_on_save = 1

presmihaylov avatar Dec 04 '20 16:12 presmihaylov

This is because ALE is unable to find the root of the project when you create it inside GOPATH. When using go module the project contains a go.mod file that ALE uses to determine the root path.

See discussion here https://github.com/dense-analysis/ale/issues/2456 and here https://github.com/dense-analysis/ale/issues/2795

Possible solutions are:

  • Set g:ale_lsp_root. Check the ale help and the discussions above for details.
  • Add a .git directory to the root of the project.
  • Add a go.mod file to the root of the project.

hsanson avatar Aug 03 '21 14:08 hsanson

This is because ALE is unable to find the root of the project when you create it inside GOPATH. When using go module the project contains a go.mod file that ALE uses to determine the root path.

See discussion here #2456 and here #2795

Possible solutions are:

  • Set g:ale_lsp_root. Check the ale help and the discussions above for details.
  • Add a .git directory to the root of the project.
  • Add a go.mod file to the root of the project.

Thank you @hsanson. I just spent an hour trying to get gopls to work and all I had to do was add a go.mod file!

mikeboiko avatar Jun 10 '22 03:06 mikeboiko