Add textlint for Asciidoc and add it to Fixers (#2193)

* Add textlint for asciidoc
* Add textlint --fix
This commit is contained in:
TANIGUCHI Masaya 2019-01-11 03:53:45 +09:00 committed by w0rp
parent 721183116e
commit fabebb3a47
9 changed files with 145 additions and 2 deletions

View File

@ -101,7 +101,7 @@ formatting.
| ASM | [gcc](https://gcc.gnu.org) |
| Ansible | [ansible-lint](https://github.com/willthames/ansible-lint) |
| API Blueprint | [drafter](https://github.com/apiaryio/drafter) |
| AsciiDoc | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [write-good](https://github.com/btford/write-good), [vale](https://github.com/ValeLint/vale) |
| AsciiDoc | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [write-good](https://github.com/btford/write-good), [vale](https://github.com/ValeLint/vale), [textlint](https://textlint.github.io/) |
| Awk | [gawk](https://www.gnu.org/software/gawk/)|
| Bash | [language-server](https://github.com/mads-hartmann/bash-language-server), shell [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/), [shfmt](https://github.com/mvdan/sh) |
| BibTeX | [bibclean](http://ftp.math.utah.edu/pub/bibclean/) |

View File

@ -0,0 +1,9 @@
" Author: TANIGUCHI Masaya <ta2gch@gmail.com>
" Description: textlint for AsciiDoc files
call ale#linter#Define('asciidoc', {
\ 'name': 'textlint',
\ 'executable_callback': 'ale#handlers#textlint#GetExecutable',
\ 'command_callback': 'ale#handlers#textlint#GetCommand',
\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput',
\})

View File

@ -170,6 +170,11 @@ let s:default_registry = {
\ 'suggested_filetypes': ['rust'],
\ 'description': 'Fix Rust files with Rustfmt.',
\ },
\ 'textlint': {
\ 'function': 'ale#fixers#textlint#Fix',
\ 'suggested_filetypes': ['text','markdown','asciidoc'],
\ 'description': 'Fix text files with textlint --fix',
\ },
\ 'hackfmt': {
\ 'function': 'ale#fixers#hackfmt#Fix',
\ 'suggested_filetypes': ['hack'],

View File

@ -0,0 +1,15 @@
" Author: TANIGUCHI Masaya <ta2gch@gmail.com>
" Description: Integration of textlint with ALE.
function! ale#fixers#textlint#Fix(buffer) abort
let l:executable = ale#handlers#textlint#GetExecutable(a:buffer)
let l:options = ale#Var(a:buffer, 'textlint_options')
return {
\ 'command': ale#Escape(l:executable)
\ . ' --fix'
\ . (empty(l:options) ? '' : ' ' . l:options)
\ . ' %t',
\ 'read_temporary_file': 1,
\}
endfunction

View File

@ -8,5 +8,11 @@ write-good *ale-asciidoc-write-good*
See |ale-write-good-options|
===============================================================================
textlint *ale-asciidoc-textlint*
See |ale-text-textlint|
===============================================================================
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:

View File

@ -27,6 +27,7 @@ CONTENTS *ale-contents*
ansible-lint........................|ale-ansible-ansible-lint|
asciidoc..............................|ale-asciidoc-options|
write-good..........................|ale-asciidoc-write-good|
textlint............................|ale-asciidoc-textlint|
asm...................................|ale-asm-options|
gcc.................................|ale-asm-gcc|
awk...................................|ale-awk-options|
@ -407,7 +408,7 @@ Notes:
* ASM: `gcc`
* Ansible: `ansible-lint`
* API Blueprint: `drafter`
* AsciiDoc: `alex`!!, `proselint`, `redpen`, `write-good`, `vale`
* AsciiDoc: `alex`!!, `proselint`, `redpen`, `write-good`, `vale`, `textlint`
* Awk: `gawk`
* Bash: `language-server`, `shell` (-n flag), `shellcheck`, `shfmt`
* BibTeX: `bibclean`

View File

@ -0,0 +1,65 @@
" Author: januswel, w0rp
Before:
" This is just one language for the linter.
call ale#assert#SetUpLinterTest('asciidoc', 'textlint')
" The configuration is shared between many languages.
Save g:ale_textlint_executable
Save g:ale_textlint_use_global
Save g:ale_textlint_options
let g:ale_textlint_executable = 'textlint'
let g:ale_textlint_use_global = 0
let g:ale_textlint_options = ''
unlet! b:ale_textlint_executable
unlet! b:ale_textlint_use_global
unlet! b:ale_textlint_options
After:
unlet! b:command_tail
unlet! b:ale_textlint_executable
unlet! b:ale_textlint_use_global
unlet! b:ale_textlint_options
call ale#assert#TearDownLinterTest()
Execute(The default command should be correct):
AssertLinter 'textlint',
\ ale#Escape('textlint') . ' -f json --stdin --stdin-filename %s'
Execute(The executable should be configurable):
let b:ale_textlint_executable = 'foobar'
AssertLinter 'foobar',
\ ale#Escape('foobar') . ' -f json --stdin --stdin-filename %s'
Execute(The options should be configurable):
let b:ale_textlint_options = '--something'
AssertLinter 'textlint',
\ ale#Escape('textlint') . ' --something -f json --stdin --stdin-filename %s'
Execute(The local executable from .bin should be used if available):
call ale#test#SetFilename('textlint_paths/with_bin_path/foo.txt')
AssertLinter
\ ale#path#Simplify(g:dir . '/textlint_paths/with_bin_path/node_modules/.bin/textlint'),
\ ale#Escape(ale#path#Simplify(g:dir . '/textlint_paths/with_bin_path/node_modules/.bin/textlint'))
\ . ' -f json --stdin --stdin-filename %s'
Execute(The local executable from textlint/bin should be used if available):
call ale#test#SetFilename('textlint_paths/with_textlint_bin_path/foo.txt')
if has('win32')
AssertLinter
\ ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'),
\ ale#Escape('node.exe') . ' ' . ale#Escape(ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'))
\ . ' -f json --stdin --stdin-filename %s'
else
AssertLinter
\ ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'),
\ ale#Escape(ale#path#Simplify(g:dir . '/textlint_paths/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'))
\ . ' -f json --stdin --stdin-filename %s'
endif

View File

@ -0,0 +1,42 @@
Before:
Save g:ale_textlint_executable
Save g:ale_textlint_options
Save g:ale_textlint_use_global
" Use an invalid global executable, so we don't match it.
let g:ale_textlint_executable = 'xxxinvalid'
let g:ale_textlint_options = ''
let g:ale_textlint_use_global = 0
call ale#test#SetDirectory('/testplugin/test/fixers')
After:
Restore
call ale#test#RestoreDirectory()
Execute(The textlint callback should return the correct default values):
call ale#test#SetFilename('../markdown_files/testfile.md')
AssertEqual
\ {
\ 'read_temporary_file': 1,
\ 'command': ale#Escape('xxxinvalid')
\ . ' --fix'
\ . ' %t',
\ },
\ ale#fixers#textlint#Fix(bufnr(''))
Execute(The textlint callback should include custom textlint options):
let g:ale_textlint_options = "--quiet"
call ale#test#SetFilename('../markdown_files/testfile.md')
AssertEqual
\ {
\ 'read_temporary_file': 1,
\ 'command': ale#Escape('xxxinvalid')
\ . ' --fix'
\ . ' ' . g:ale_textlint_options
\ . ' %t',
\ },
\ ale#fixers#textlint#Fix(bufnr(''))

View File