summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <w0rp@users.noreply.github.com>2017-11-16 10:44:52 +0000
committerGitHub <noreply@github.com>2017-11-16 10:44:52 +0000
commit3ddb858881c7b18ec8dae03ab915e5bb453f0286 (patch)
treec2d2cd9c3ba58043b499407cdd80ab0e3e3b1b08
parentf90a2d54744d7bfe985b0cd48a00012afecdc754 (diff)
parente232ea07c23d3e6f1b6e621e896f27545e5b10c7 (diff)
downloadale-3ddb858881c7b18ec8dae03ab915e5bb453f0286.zip
Merge pull request #1137 from rhysd/redpen
Add Redpen support
-rw-r--r--README.md2
-rw-r--r--ale_linters/markdown/redpen.vim35
-rw-r--r--doc/ale.txt2
-rw-r--r--test/handler/test_redpen_handler.vader67
4 files changed, 104 insertions, 2 deletions
diff --git a/README.md b/README.md
index cf812aff..810b90e5 100644
--- a/README.md
+++ b/README.md
@@ -114,7 +114,7 @@ formatting.
| Lua | [luacheck](https://github.com/mpeterv/luacheck) |
| Mail | [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
| Make | [checkmake](https://github.com/mrtazz/checkmake) |
-| Markdown | [mdl](https://github.com/mivok/markdownlint), [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale), [remark-lint](https://github.com/wooorm/remark-lint) !!, [write-good](https://github.com/btford/write-good) |
+| Markdown | [mdl](https://github.com/mivok/markdownlint), [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale), [remark-lint](https://github.com/wooorm/remark-lint) !!, [write-good](https://github.com/btford/write-good), [redpen](http://redpen.cc/) |
| MATLAB | [mlint](https://www.mathworks.com/help/matlab/ref/mlint.html) |
| Nim | [nim check](https://nim-lang.org/docs/nimc.html) !! |
| nix | [nix-instantiate](http://nixos.org/nix/manual/#sec-nix-instantiate) |
diff --git a/ale_linters/markdown/redpen.vim b/ale_linters/markdown/redpen.vim
new file mode 100644
index 00000000..38fe2308
--- /dev/null
+++ b/ale_linters/markdown/redpen.vim
@@ -0,0 +1,35 @@
+" Author: rhysd https://rhysd.github.io
+" Description: Redpen, a proofreading tool (http://redpen.cc)
+
+function! ale_linters#markdown#redpen#HandleErrors(buffer, lines) abort
+ " Only one file was passed to redpen. So response array has only one
+ " element.
+ let l:res = json_decode(join(a:lines))[0]
+ let l:output = []
+ for l:err in l:res.errors
+ let l:item = {
+ \ 'text': l:err.message . ' (' . l:err.validator . ')',
+ \ 'type': 'W',
+ \}
+ if has_key(l:err, 'startPosition')
+ let l:item.lnum = l:err.startPosition.lineNum
+ let l:item.col = l:err.startPosition.offset
+ if has_key(l:err, 'endPosition')
+ let l:item.end_lnum = l:err.endPosition.lineNum
+ let l:item.end_col = l:err.endPosition.offset
+ endif
+ else
+ let l:item.lnum = l:err.lineNum
+ let l:item.col = l:err.sentenceStartColumnNum + 1
+ endif
+ call add(l:output, l:item)
+ endfor
+ return l:output
+endfunction
+
+call ale#linter#Define('markdown', {
+\ 'name': 'redpen',
+\ 'executable': 'redpen',
+\ 'command': 'redpen -r json %t',
+\ 'callback': 'ale_linters#markdown#redpen#HandleErrors',
+\})
diff --git a/doc/ale.txt b/doc/ale.txt
index 9947d091..8e2e595d 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -304,7 +304,7 @@ Notes:
* Lua: `luacheck`
* Mail: `proselint`, `vale`
* Make: `checkmake`
-* Markdown: `mdl`, `proselint`, `vale`, `remark-lint`, `write-good`
+* Markdown: `mdl`, `proselint`, `vale`, `remark-lint`, `write-good`, `redpen`
* MATLAB: `mlint`
* Nim: `nim check`!!
* nix: `nix-instantiate`
diff --git a/test/handler/test_redpen_handler.vader b/test/handler/test_redpen_handler.vader
new file mode 100644
index 00000000..d0782d90
--- /dev/null
+++ b/test/handler/test_redpen_handler.vader
@@ -0,0 +1,67 @@
+Before:
+ runtime! ale_linters/markdown/redpen.vim
+
+After:
+ call ale#linter#Reset()
+
+Execute(redpen handler should handle errors output):
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'col': 9,
+ \ 'end_lnum': 1,
+ \ 'end_col': 15,
+ \ 'text': 'Found possibly misspelled word "plugin". (Spelling)',
+ \ 'type': 'W',
+ \ },
+ \ {
+ \ 'lnum': 1,
+ \ 'col': 1,
+ \ 'text': 'Found possibly misspelled word "NeoVim". (Spelling)',
+ \ 'type': 'W',
+ \ },
+ \ ],
+ \ ale_linters#markdown#redpen#HandleErrors(bufnr(''), [
+ \ '[',
+ \ ' {',
+ \ ' "document": "test.md",',
+ \ ' "errors": [',
+ \ ' {',
+ \ ' "sentence": "ALE is a plugin for providing linting in NeoVim and Vim 8 while you edit your text files.",',
+ \ ' "endPosition": {',
+ \ ' "offset": 15,',
+ \ ' "lineNum": 1',
+ \ ' },',
+ \ ' "validator": "Spelling",',
+ \ ' "lineNum": 1,',
+ \ ' "sentenceStartColumnNum": 0,',
+ \ ' "message": "Found possibly misspelled word \"plugin\".",',
+ \ ' "startPosition": {',
+ \ ' "offset": 9,',
+ \ ' "lineNum": 1',
+ \ ' }',
+ \ ' },',
+ \ ' {',
+ \ ' "sentence": "ALE is a plugin for providing linting in NeoVim and Vim 8 while you edit your text files.",',
+ \ ' "validator": "Spelling",',
+ \ ' "lineNum": 1,',
+ \ ' "sentenceStartColumnNum": 0,',
+ \ ' "message": "Found possibly misspelled word \"NeoVim\"."',
+ \ ' }',
+ \ ' ]',
+ \ ' }',
+ \ ']',
+ \ ])
+
+Execute(redpen handler should no error output):
+ AssertEqual
+ \ [],
+ \ ale_linters#markdown#redpen#HandleErrors(bufnr(''), [
+ \ '[',
+ \ ' {',
+ \ ' "document": "test.md",',
+ \ ' "errors": []',
+ \ ' }',
+ \ ']',
+ \ ])