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) |
|
||||
| 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/) |
|
||||
|
|
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'],
|
||||
\ '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'],
|
||||
|
|
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|
|
||||
|
||||
|
||||
===============================================================================
|
||||
textlint *ale-asciidoc-textlint*
|
||||
|
||||
See |ale-text-textlint|
|
||||
|
||||
|
||||
===============================================================================
|
||||
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|
|
||||
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`
|
||||
|
|
|
@ -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