8000 [pull] master from dense-analysis:master by pull[bot] · Pull Request #12 · bigshans/ale · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

[pull] master from dense-analysis:master #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Alread 8000 y on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 16 additions & 14 deletions ale_linters/go/golangci_lint.vim
Original file line number Diff line number Diff line change
Expand Up @@ -15,39 +15,41 @@ function! ale_linters#go#golangci_lint#GetCommand(buffer) abort
return ale#go#EnvString(a:buffer)
\ . '%e run '
\ . l:options
\ . ' --out-format=json'
\ . ' --show-stats=0'
endif

return ale#go#EnvString(a:buffer)
\ . '%e run '
\ . ale#Escape(l:filename)
\ . ' ' . l:options
endfunction

function! ale_linters#go#golangci_lint#GetMatches(lines) abort
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:?:?:?\s\*?(.+)\s+\((.+)\)$'

return ale#util#GetMatches(a:lines, l:pattern)
\ . ' --out-format=json'
\ . ' --show-stats=0'
endfunction

function! ale_linters#go#golangci_lint#Handler(buffer, lines) abort
let l:dir = expand('#' . a:buffer . ':p:h')
let l:output = []

for l:match in ale_linters#go#golangci_lint#GetMatches(a:lines)
if l:match[5] is# 'typecheck'
let l:matches = ale#util#FuzzyJSONDecode(a:lines, [])

if empty(l:matches)
return []
endif

for l:match in l:matches['Issues']
if l:match['FromLinter'] is# 'typecheck'
let l:msg_type = 'E'
else
let l:msg_type = 'W'
endif

" l:match[1] will already be an absolute path, output from
" golangci_lint
call add(l:output, {
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'filename': ale#path#GetAbsPath(l:dir, l:match['Pos']['Filename']),
\ 'lnum': l:match['Pos']['Line'] + 0,
\ 'col': l:match['Pos']['Column'] + 0,
\ 'type': l:msg_type,
\ 'text': l:match[4] . ' (' . l:match[5] . ')',
\ 'text': match['FromLinter'] . ' - ' . l:match['Text'],
\})
endfor

Expand Down
132 changes: 88 additions & 44 deletions test/handler/test_golangci_lint_handler.vader
Original file line number Diff line number Diff line change
Expand Up @@ -4,63 +4,107 @@ Before:
After:
call ale#linter#Reset()

Execute (The golangci-lint handler should handle names with spaces):
" We can't test Windows paths with the path resovling on Linux, but we can
" test the regex.
AssertEqual
\ [
\ [
\ 'C:\something\file with spaces.go',
\ '12',
\ '3',
\ 'expected ''package'', found ''IDENT'' gibberish',
\ 'staticcheck',
\ ],
\ ],
\ map(ale_linters#go#golangci_lint#GetMatches([
\ 'C:\something\file with spaces.go:12:3: expected ''package'', found ''IDENT'' gibberish (staticcheck)',
\ ]), 'v:val[1:5]')

Execute (The golangci-lint handler should handle paths correctly):
call ale#test#SetFilename('app/test.go')

let file = ale#path#GetAbsPath(expand('%:p:h'), 'test.go')

AssertEqual
\ [
\ {
\ 'lnum': 12,
\ 'col': 3,
\ 'text': 'expected ''package'', found ''IDENT'' gibberish (staticcheck)',
\ 'type': 'W',
\ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'),
\ },
\ ],
\ ale_linters#go#golangci_lint#Handler(bufnr(''), [
\ file . ':12:3: expected ''package'', found ''IDENT'' gibberish (staticcheck)',
\ ])

Execute (The golangci-lint handler should handle only typecheck lines as errors):
call ale#test#SetFilename('app/main.go')

AssertEqual
\ [
\ {
\ 'lnum': 30,
\ 'col': 5,
\ 'text': 'variable ''err'' is not used (typecheck)',
\ 'lnum': 1,
\ 'col': 0,
\ 'text': 'typecheck - found packages main (main.go) and validator (validation.go) in ',
\ 'type': 'E',
\ 'filename': ale#path#Simplify(expand('%:p:h') . '/main.go'),
\ },
\ {
\ 'lnum': 1,
\ 'col': 1,
\ 'text': 'typecheck - package validator_test; expected package main_test',
\ 'type': 'E',
\ 'filename': ale#path#Simplify(expand('%:p:h') . '/validation_encoder_test.go'),
\ },
\ {
\ 'lnum': 1,
\ 'col': 1,
\ 'text': 'typecheck - package validator_test; expected package main_test',
\ 'type': 'E',
\ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'),
\ 'filename': ale#path#Simplify(expand('%:p:h') . '/validation_error_test.go'),
\ },
\ {
\ 'lnum': 505,
\ 'col': 75,
\ 'text': 'Magic number: 404, in <argument> detected (gomnd)',
\ 'text': 'gomnd - Magic number: 404, in <argument> detected',
\ 'type': 'W',
\ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'),
\ 'filename': ale#path#Simplify(expand('%:p:h') . '/main.go'),
\ }
\ ],
\ ale_linters#go#golangci_lint#Handler(bufnr(''), [
\ ale#path#GetAbsPath(expand('%:p:h'), 'test.go') . ':30:5: variable ''err'' is not used (typecheck)',
\ ale#path#GetAbsPath(expand('%:p:h'), 'test.go') . ':505:75: Magic number: 404, in <argument> detected (gomnd)',
\ '{',
\ ' "Issues": [',
\ ' {',
\ ' "FromLinter": "typecheck",',
\ ' "Text": "found packages main (main.go) and validator (validation.go) in ",',
\ ' "Severity": "",',
\ ' "SourceLines": [',
\ ' "package main"',
\ ' ],',
\ ' "Pos": {',
\ ' "Filename": "main.go",',
\ ' "Offset": 0,',
\ ' "Line": 1,',
\ ' "Column": 0',
\ ' },',
\ ' "ExpectNoLint": false,',
\ ' "ExpectedNoLintLinter": ""',
\ ' },',
\ ' {',
\ ' "FromLinter": "typecheck",',
\ ' "Text": "package validator_test; expected package main_test",',
\ ' "Severity": "",',
\ ' "SourceLines": [',
\ ' "package validator_test"',
\ ' ],',
\ ' "Pos": {',
\ ' "Filename": "validation_encoder_test.go",',
\ ' "Offset": 0,',
\ ' "Line": 1,',
\ ' "Column": 1',
\ ' },',
\ ' "ExpectNoLint": false,',
\ ' "ExpectedNoLintLinter": ""',
\ ' },',
\ ' {',
\ ' "FromLinter": "typecheck",',
\ ' "Text": "package validator_test; expected package main_test",',
\ ' "Severity": "",',
\ ' "SourceLines": [',
\ ' "package validator_test"',
\ ' ],',
\ ' "Pos": {',
\ ' "Filename": "validation_error_test.go",',
\ ' "Offset": 0,',
\ ' "Line": 1,',
\ ' "Column": 1',
\ ' },',
\ ' "ExpectNoLint": false,',
\ ' "ExpectedNoLintLinter": ""',
\ ' },',
\ ' {',
\ ' "FromLinter": "gomnd",',
\ ' "Text": "Magic number: 404, in <argument> detected",',
\ ' "Severity": "",',
\ ' "SourceLines": [',
\ ' "package validator_test"',
\ ' ],',
\ ' "Pos": {',
\ ' "Filename": "main.go",',
\ ' "Offset": 0,',
\ ' "Line": 505,',
\ ' "Column": 75',
\ ' },',
\ ' "ExpectNoLint": false,',
\ ' "ExpectedNoLintLinter": ""',
\ ' }',
\ ' ]',
\ '}',
\ ])
14 changes: 9 additions & 5 deletions test/linter/test_golangci_lint.vader
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,38 @@ After:
Execute(The golangci-lint defaults should be correct):
AssertLinterCwd '%s:h',
AssertLinter 'golangci-lint',
\ ale#Escape('golangci-lint') . ' run '
\ ale#Escape('golangci-lint') . ' run --out-format=json --show-stats=0'

Execute(The golangci-lint callback should use a configured executable):
let b:ale_go_golangci_lint_executable = 'something else'

AssertLinter 'something else',
\ ale#Escape('something else')
\ . ' run '
\ . ' run --out-format=json --show-stats=0'

Execute(The golangci-lint callback should use configured options):
let b:ale_go_golangci_lint_options = '--foobar'

AssertLinter 'golangci-lint',
\ ale#Escape('golangci-lint')
\ . ' run '
\ . '--foobar'
\ . '--foobar '
\ . '--out-format=json '
\ . '--show-stats=0'

Execute(The golangci-lint callback should support environment variables):
let b:ale_go_go111module = 'on'

AssertLinter 'golangci-lint',
\ ale#Env('GO111MODULE', 'on')
\ . ale#Escape('golangci-lint')
\ . ' run '
\ . ' run '
\ . '--out-format=json '
\ . '--show-stats=0'

Execute(The golangci-lint `lint_package` option should use the correct command):
let b:ale_go_golangci_lint_package = 0
AssertLinter 'golangci-lint',
\ ale#Escape('golangci-lint')
\ . ' run ' . ale#Escape(expand('%' . ':t'))
\ . ' '
\ . ' --out-format=json --show-stats=0'
0