Add textlint for Asciidoc and add it to Fixers (#2193)
* Add textlint for asciidoc * Add textlint --fix
This commit is contained in:
parent
721183116e
commit
fabebb3a47
9 changed files with 145 additions and 2 deletions
|
@ -101,7 +101,7 @@ formatting.
|
||||||
| ASM | [gcc](https://gcc.gnu.org) |
|
| ASM | [gcc](https://gcc.gnu.org) |
|
||||||
| Ansible | [ansible-lint](https://github.com/willthames/ansible-lint) |
|
| Ansible | [ansible-lint](https://github.com/willthames/ansible-lint) |
|
||||||
| API Blueprint | [drafter](https://github.com/apiaryio/drafter) |
|
| 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/)|
|
| 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) |
|
| 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/) |
|
| BibTeX | [bibclean](http://ftp.math.utah.edu/pub/bibclean/) |
|
||||||
|
|
9
ale_linters/asciidoc/textlint.vim
Normal file
9
ale_linters/asciidoc/textlint.vim
Normal 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',
|
||||||
|
\})
|
|
@ -170,6 +170,11 @@ let s:default_registry = {
|
||||||
\ 'suggested_filetypes': ['rust'],
|
\ 'suggested_filetypes': ['rust'],
|
||||||
\ 'description': 'Fix Rust files with Rustfmt.',
|
\ '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': {
|
\ 'hackfmt': {
|
||||||
\ 'function': 'ale#fixers#hackfmt#Fix',
|
\ 'function': 'ale#fixers#hackfmt#Fix',
|
||||||
\ 'suggested_filetypes': ['hack'],
|
\ 'suggested_filetypes': ['hack'],
|
||||||
|
|
15
autoload/ale/fixers/textlint.vim
Normal file
15
autoload/ale/fixers/textlint.vim
Normal 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
|
|
@ -8,5 +8,11 @@ write-good *ale-asciidoc-write-good*
|
||||||
See |ale-write-good-options|
|
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:
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||||
|
|
|
@ -27,6 +27,7 @@ CONTENTS *ale-contents*
|
||||||
ansible-lint........................|ale-ansible-ansible-lint|
|
ansible-lint........................|ale-ansible-ansible-lint|
|
||||||
asciidoc..............................|ale-asciidoc-options|
|
asciidoc..............................|ale-asciidoc-options|
|
||||||
write-good..........................|ale-asciidoc-write-good|
|
write-good..........................|ale-asciidoc-write-good|
|
||||||
|
textlint............................|ale-asciidoc-textlint|
|
||||||
asm...................................|ale-asm-options|
|
asm...................................|ale-asm-options|
|
||||||
gcc.................................|ale-asm-gcc|
|
gcc.................................|ale-asm-gcc|
|
||||||
awk...................................|ale-awk-options|
|
awk...................................|ale-awk-options|
|
||||||
|
@ -407,7 +408,7 @@ Notes:
|
||||||
* ASM: `gcc`
|
* ASM: `gcc`
|
||||||
* Ansible: `ansible-lint`
|
* Ansible: `ansible-lint`
|
||||||
* API Blueprint: `drafter`
|
* API Blueprint: `drafter`
|
||||||
* AsciiDoc: `alex`!!, `proselint`, `redpen`, `write-good`, `vale`
|
* AsciiDoc: `alex`!!, `proselint`, `redpen`, `write-good`, `vale`, `textlint`
|
||||||
* Awk: `gawk`
|
* Awk: `gawk`
|
||||||
* Bash: `language-server`, `shell` (-n flag), `shellcheck`, `shfmt`
|
* Bash: `language-server`, `shell` (-n flag), `shellcheck`, `shfmt`
|
||||||
* BibTeX: `bibclean`
|
* BibTeX: `bibclean`
|
||||||
|
|
|
@ -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
|
42
test/fixers/test_textlint_fixer_callback.vader
Normal file
42
test/fixers/test_textlint_fixer_callback.vader
Normal 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(''))
|
0
test/markdown_files/testfile.md
Normal file
0
test/markdown_files/testfile.md
Normal file
Reference in a new issue