summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEddie Lebow <elebow@users.noreply.github.com>2019-08-13 00:15:53 -0400
committerEddie Lebow <elebow@users.noreply.github.com>2019-08-18 23:28:32 -0400
commit08a5bfcaa911afbd04d696b49a09eb83beef50bb (patch)
tree9585625858bc62857c29f4850e8ff7315d62cf84
parentdd1e1025b8a9b13cb7966bf2baa3e6b42a862857 (diff)
downloadale-08a5bfcaa911afbd04d696b49a09eb83beef50bb.zip
mdl: Use JSON output instead of parsing text
Also add test coverage for the mdl handler.
-rw-r--r--ale_linters/markdown/mdl.vim11
-rw-r--r--test/command_callback/test_markdown_mdl_command_callback.vader6
-rw-r--r--test/handler/test_mdl_handler.vader25
3 files changed, 33 insertions, 9 deletions
diff --git a/ale_linters/markdown/mdl.vim b/ale_linters/markdown/mdl.vim
index 305f5359..fd44de6e 100644
--- a/ale_linters/markdown/mdl.vim
+++ b/ale_linters/markdown/mdl.vim
@@ -17,18 +17,17 @@ function! ale_linters#markdown#mdl#GetCommand(buffer) abort
let l:options = ale#Var(a:buffer, 'markdown_mdl_options')
return ale#Escape(l:executable) . l:exec_args
- \ . (!empty(l:options) ? ' ' . l:options : '')
+ \ . ' -j' . (!empty(l:options) ? ' ' . l:options : '')
endfunction
function! ale_linters#markdown#mdl#Handle(buffer, lines) abort
- " matches: '(stdin):173: MD004 Unordered list style'
- let l:pattern = ':\(\d*\): \(.*\)$'
let l:output = []
- for l:match in ale#util#GetMatches(a:lines, l:pattern)
+ for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
call add(l:output, {
- \ 'lnum': l:match[1] + 0,
- \ 'text': l:match[2],
+ \ 'lnum': l:error['line'],
+ \ 'code': l:error['rule'] . '/' . join(l:error['aliases'], '/'),
+ \ 'text': l:error['description'],
\ 'type': 'W',
\})
endfor
diff --git a/test/command_callback/test_markdown_mdl_command_callback.vader b/test/command_callback/test_markdown_mdl_command_callback.vader
index e029bf9b..1ce4db1a 100644
--- a/test/command_callback/test_markdown_mdl_command_callback.vader
+++ b/test/command_callback/test_markdown_mdl_command_callback.vader
@@ -5,15 +5,15 @@ After:
call ale#assert#TearDownLinterTest()
Execute(The default command should be correct):
- AssertLinter 'mdl', ale#Escape('mdl')
+ AssertLinter 'mdl', ale#Escape('mdl') . ' -j'
Execute(The executable and options should be configurable):
let g:ale_markdown_mdl_executable = 'foo bar'
let g:ale_markdown_mdl_options = '--wat'
- AssertLinter 'foo bar', ale#Escape('foo bar') . ' --wat'
+ AssertLinter 'foo bar', ale#Escape('foo bar') . ' -j --wat'
Execute(Setting bundle appends 'exec mdl'):
let g:ale_markdown_mdl_executable = 'path to/bundle'
- AssertLinter 'path to/bundle', ale#Escape('path to/bundle') . ' exec mdl'
+ AssertLinter 'path to/bundle', ale#Escape('path to/bundle') . ' exec mdl -j'
diff --git a/test/handler/test_mdl_handler.vader b/test/handler/test_mdl_handler.vader
new file mode 100644
index 00000000..d01b52af
--- /dev/null
+++ b/test/handler/test_mdl_handler.vader
@@ -0,0 +1,25 @@
+Before:
+ runtime ale_linters/markdown/mdl.vim
+
+After:
+ call ale#linter#Reset()
+
+Execute(The mdl handler should parse output correctly):
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'code': 'MD002/first-header-h1',
+ \ 'text': 'First header should be a top level header',
+ \ 'type': 'W'
+ \ },
+ \ {
+ \ 'lnum': 18,
+ \ 'code': 'MD033/no-inline-html',
+ \ 'text': 'Inline HTML',
+ \ 'type': 'W'
+ \ }
+ \ ],
+ \ ale_linters#markdown#mdl#Handle(0, [
+ \ '[{"filename":"README.md","line":1,"rule":"MD002","aliases":["first-header-h1"],"description":"First header should be a top level header"},{"filename":"README.md","line":18,"rule":"MD033","aliases":["no-inline-html"],"description":"Inline HTML"}]'
+ \ ])