summaryrefslogtreecommitdiff
path: root/ale_linters
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2016-09-15 20:20:41 +0100
committerw0rp <devw0rp@gmail.com>2016-09-15 20:20:41 +0100
commit8cc28cdfbd34dd76bd1cd392747c266be7833494 (patch)
treec136f8753293246f8d837607268250eab41c8820 /ale_linters
parentd3047c9cf643cb80418b394c6cf16bc9dcec916d (diff)
downloadale-8cc28cdfbd34dd76bd1cd392747c266be7833494.zip
Add support for Bash and other shells. Add support for reading from stderr, and for generating the executable from functions. Both were needed to support shell linting.
Diffstat (limited to 'ale_linters')
-rw-r--r--ale_linters/javascript/eslint.vim1
-rw-r--r--ale_linters/python/flake8.vim1
-rw-r--r--ale_linters/sh/shell.vim75
3 files changed, 77 insertions, 0 deletions
diff --git a/ale_linters/javascript/eslint.vim b/ale_linters/javascript/eslint.vim
index 96dfef9b..43e32c9b 100644
--- a/ale_linters/javascript/eslint.vim
+++ b/ale_linters/javascript/eslint.vim
@@ -43,6 +43,7 @@ function! ale_linters#javascript#eslint#Handle(buffer, lines)
endfunction
call ALEAddLinter('javascript', {
+\ 'name': 'eslint',
\ 'executable': 'eslint',
\ 'command': 'eslint -f unix --stdin',
\ 'callback': 'ale_linters#javascript#eslint#Handle',
diff --git a/ale_linters/python/flake8.vim b/ale_linters/python/flake8.vim
index 437bc01d..19dfc22e 100644
--- a/ale_linters/python/flake8.vim
+++ b/ale_linters/python/flake8.vim
@@ -45,6 +45,7 @@ function! ale_linters#python#flake8#Handle(buffer, lines)
endfunction
call ALEAddLinter('python', {
+\ 'name': 'flake8',
\ 'executable': 'flake8',
\ 'command': 'flake8 -',
\ 'callback': 'ale_linters#python#flake8#Handle',
diff --git a/ale_linters/sh/shell.vim b/ale_linters/sh/shell.vim
new file mode 100644
index 00000000..6c93933a
--- /dev/null
+++ b/ale_linters/sh/shell.vim
@@ -0,0 +1,75 @@
+if exists('g:loaded_ale_linters_sh_shell')
+ finish
+endif
+
+let g:loaded_ale_linters_sh_shell = 1
+
+" This option can be changed to change the default shell when the shell
+" cannot be taken from the hashbang line.
+if !exists('g:ale_linters_sh_shell_default_shell')
+ let g:ale_linters_sh_shell_default_shell = 'bash'
+endif
+
+function! ale_linters#sh#shell#GetExecutable(buffer)
+ let shell = g:ale_linters_sh_shell_default_shell
+
+ let banglines = getbufline(a:buffer, 1)
+
+ " Take the shell executable from the hashbang, if we can.
+ if len(banglines) == 1
+ let bangmatch = matchlist(banglines[0], '^#!\([^ ]\+\)')
+
+ if len(bangmatch) > 0
+ let shell = bangmatch[1]
+ endif
+ endif
+
+ return shell
+endfunction
+
+function! ale_linters#sh#shell#GetCommand(buffer)
+ return ale_linters#sh#shell#GetExecutable(a:buffer) . ' -n'
+endfunction
+
+function! ale_linters#sh#shell#Handle(buffer, lines)
+ " Matches patterns line the following:
+ "
+ " bash: line 13: syntax error near unexpected token `d'
+ " sh: 11: Syntax error: "(" unexpected
+ let pattern = '^[^:]\+: \%(line \|\)\(\d\+\): \(.\+\)'
+ let output = []
+
+ for line in a:lines
+ let l:match = matchlist(line, pattern)
+
+ if len(l:match) == 0
+ continue
+ endif
+
+ let line = l:match[1] + 0
+ let column = 1
+ let text = l:match[2]
+ let type = 'E'
+
+ " vcol is Needed to indicate that the column is a character.
+ call add(output, {
+ \ 'bufnr': a:buffer,
+ \ 'lnum': line,
+ \ 'vcol': 0,
+ \ 'col': column,
+ \ 'text': text,
+ \ 'type': type,
+ \ 'nr': -1,
+ \})
+ endfor
+
+ return output
+endfunction
+
+call ALEAddLinter('sh', {
+\ 'name': 'shell',
+\ 'output_stream': 'stderr',
+\ 'executable_callback': 'ale_linters#sh#shell#GetExecutable',
+\ 'command_callback': 'ale_linters#sh#shell#GetCommand',
+\ 'callback': 'ale_linters#sh#shell#Handle',
+\})