diff options
author | w0rp <w0rp@users.noreply.github.com> | 2017-12-18 10:11:57 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-18 10:11:57 +0000 |
commit | fdde8af894772d489bf8105d9d056ccfef31cd8b (patch) | |
tree | 8d5ba5c2f5274dd928b3fbf5ac4df0bdd684f711 | |
parent | 30c5bb37726df76a790b9bb25280cf0c9f885bc6 (diff) | |
parent | 96b90b45db5070c964adb14f1a0ac67c61571648 (diff) | |
download | ale-fdde8af894772d489bf8105d9d056ccfef31cd8b.zip |
Merge pull request #1232 from languitar/vale-json
Use JSON output with vale
-rw-r--r-- | ale_linters/mail/vale.vim | 4 | ||||
-rw-r--r-- | ale_linters/markdown/vale.vim | 4 | ||||
-rw-r--r-- | ale_linters/text/vale.vim | 4 | ||||
-rw-r--r-- | autoload/ale/handlers/vale.vim | 36 | ||||
-rw-r--r-- | test/handler/test_vale_handler.vader | 67 |
5 files changed, 109 insertions, 6 deletions
diff --git a/ale_linters/mail/vale.vim b/ale_linters/mail/vale.vim index 9b30bf65..e6dfd2ec 100644 --- a/ale_linters/mail/vale.vim +++ b/ale_linters/mail/vale.vim @@ -4,6 +4,6 @@ call ale#linter#Define('mail', { \ 'name': 'vale', \ 'executable': 'vale', -\ 'command': 'vale --output=line %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', +\ 'command': 'vale --output=JSON %t', +\ 'callback': 'ale#handlers#vale#Handle', \}) diff --git a/ale_linters/markdown/vale.vim b/ale_linters/markdown/vale.vim index 43b3d34a..838c4db2 100644 --- a/ale_linters/markdown/vale.vim +++ b/ale_linters/markdown/vale.vim @@ -4,6 +4,6 @@ call ale#linter#Define('markdown', { \ 'name': 'vale', \ 'executable': 'vale', -\ 'command': 'vale --output=line %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', +\ 'command': 'vale --output=JSON %t', +\ 'callback': 'ale#handlers#vale#Handle', \}) diff --git a/ale_linters/text/vale.vim b/ale_linters/text/vale.vim index 60bd799f..cf37c2f8 100644 --- a/ale_linters/text/vale.vim +++ b/ale_linters/text/vale.vim @@ -4,6 +4,6 @@ call ale#linter#Define('text', { \ 'name': 'vale', \ 'executable': 'vale', -\ 'command': 'vale --output=line %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', +\ 'command': 'vale --output=JSON %t', +\ 'callback': 'ale#handlers#vale#Handle', \}) diff --git a/autoload/ale/handlers/vale.vim b/autoload/ale/handlers/vale.vim new file mode 100644 index 00000000..c8420572 --- /dev/null +++ b/autoload/ale/handlers/vale.vim @@ -0,0 +1,36 @@ +" Author: Johannes Wienke <languitar@semipol.de> +" Description: output handler for the vale JSON format + +function! ale#handlers#vale#GetType(severity) abort + if a:severity is? 'warning' + return 'W' + endif + + return 'E' +endfunction + +function! ale#handlers#vale#Handle(buffer, lines) abort + try + let l:errors = json_decode(join(a:lines, '')) + catch + return [] + endtry + + if empty(l:errors) + return [] + endif + + let l:output = [] + for l:error in l:errors[keys(l:errors)[0]] + call add(l:output, { + \ 'lnum': l:error['Line'], + \ 'col': l:error['Span'][0], + \ 'end_col': l:error['Span'][1], + \ 'code': l:error['Check'], + \ 'text': l:error['Message'], + \ 'type': ale#handlers#vale#GetType(l:error['Severity']), + \}) + endfor + + return l:output +endfunction diff --git a/test/handler/test_vale_handler.vader b/test/handler/test_vale_handler.vader new file mode 100644 index 00000000..afc32db9 --- /dev/null +++ b/test/handler/test_vale_handler.vader @@ -0,0 +1,67 @@ +Execute(The vale handler should handle broken JSON): + AssertEqual + \ [], + \ ale#handlers#vale#Handle(bufnr(''), ["{asdf"]) + +Execute(The vale handler should handle am empty string response): + AssertEqual + \ [], + \ ale#handlers#vale#Handle(bufnr(''), []) + +Execute(The vale handler should handle an empty result): + AssertEqual + \ [], + \ ale#handlers#vale#Handle(bufnr(''), ["{}"]) + +Execute(The vale handler should handle a normal example): + AssertEqual + \ [ + \ { + \ 'lnum': 5, + \ 'col': 195, + \ 'end_col': 201, + \ 'type': 'W', + \ 'text': "Consider removing 'usually'", + \ 'code': 'vale.Hedging', + \ }, + \ { + \ 'lnum': 7, + \ 'col': 1, + \ 'end_col': 27, + \ 'type': 'E', + \ 'text': "'Documentation' is repeated!", + \ 'code': 'vale.Repetition', + \ }, + \ ], + \ ale#handlers#vale#Handle(bufnr(''), [ + \ '{', + \ ' "/home/languitar/src/autosuspend/README.md": [', + \ ' {', + \ ' "Check": "vale.Hedging",', + \ ' "Description": "",', + \ ' "Line": 5,', + \ ' "Link": "",', + \ " \"Message\": \"Consider removing 'usually'\",", + \ ' "Severity": "warning",', + \ ' "Span": [', + \ ' 195,', + \ ' 201', + \ ' ],', + \ ' "Hide": false', + \ ' },', + \ ' {', + \ ' "Check": "vale.Repetition",', + \ ' "Description": "",', + \ ' "Line": 7,', + \ ' "Link": "",', + \ " \"Message\": \"'Documentation' is repeated!\",", + \ ' "Severity": "error",', + \ ' "Span": [', + \ ' 1,', + \ ' 27', + \ ' ],', + \ ' "Hide": false', + \ ' }', + \ ' ]', + \ '}', + \ ]) |