Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
e06060a31f
25 changed files with 315 additions and 39 deletions
|
@ -52,7 +52,7 @@ endfunction
|
|||
function! ale_linters#java#checkstyle#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'java_checkstyle_options')
|
||||
let l:config_option = ale#Var(a:buffer, 'java_checkstyle_config')
|
||||
let l:config = l:options !~# '\v(^| )-c' && !empty(l:config_option)
|
||||
let l:config = l:options !~# '\v(^| )-c ' && !empty(l:config_option)
|
||||
\ ? s:GetConfig(a:buffer, l:config_option)
|
||||
\ : ''
|
||||
|
||||
|
|
|
@ -20,25 +20,32 @@ endfunction
|
|||
function! ale_linters#java#eclipselsp#JarPath(buffer) abort
|
||||
let l:path = ale_linters#java#eclipselsp#TargetPath(a:buffer)
|
||||
|
||||
" Search jar file within repository path when manually built using mvn
|
||||
let l:repo_path = l:path . '/org.eclipse.jdt.ls.product/target/repository'
|
||||
let l:files = globpath(l:repo_path, '**/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.jar', 1, 1)
|
||||
if has('win32')
|
||||
let l:platform = 'win32'
|
||||
elseif has('macunix')
|
||||
let l:platform = 'macosx'
|
||||
else
|
||||
let l:platform = 'linux'
|
||||
endif
|
||||
|
||||
if len(l:files) == 1
|
||||
" Search jar file within repository path when manually built using mvn
|
||||
let l:files = globpath(l:path, '**/'.l:platform.'/**/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.jar', 1, 1)
|
||||
|
||||
if len(l:files) > 1
|
||||
return l:files[0]
|
||||
endif
|
||||
|
||||
" Search jar file within VSCode extensions folder.
|
||||
let l:files = globpath(l:path, '**/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.jar', 1, 1)
|
||||
let l:files = globpath(l:path, '**/'.l:platform.'/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.jar', 1, 1)
|
||||
|
||||
if len(l:files) == 1
|
||||
if len(l:files) > 1
|
||||
return l:files[0]
|
||||
endif
|
||||
|
||||
" Search jar file within system package path
|
||||
let l:files = globpath('/usr/share/java/jdtls/plugins', 'org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.jar', 1, 1)
|
||||
|
||||
if len(l:files) == 1
|
||||
if len(l:files) > 1
|
||||
return l:files[0]
|
||||
endif
|
||||
|
||||
|
@ -166,7 +173,8 @@ function! ale_linters#java#eclipselsp#RunWithVersionCheck(buffer) abort
|
|||
return ale#command#Run(
|
||||
\ a:buffer,
|
||||
\ l:command,
|
||||
\ function('ale_linters#java#eclipselsp#CommandWithVersion')
|
||||
\ function('ale_linters#java#eclipselsp#CommandWithVersion'),
|
||||
\ { 'output_stream': 'both' }
|
||||
\)
|
||||
endfunction
|
||||
|
||||
|
|
|
@ -6,5 +6,5 @@ call ale#linter#Define('kotlin', {
|
|||
\ 'executable': 'ktlint',
|
||||
\ 'command': function('ale#handlers#ktlint#GetCommand'),
|
||||
\ 'callback': 'ale#handlers#ktlint#Handle',
|
||||
\ 'lint_file': 1
|
||||
\ 'output_stream': 'stderr'
|
||||
\})
|
||||
|
|
|
@ -8,13 +8,15 @@ function! ale_linters#puppet#puppet#Handle(buffer, lines) abort
|
|||
" Error: Could not parse for environment production: Syntax error at ':' at /root/puppetcode/modules/nginx/manifests/init.pp:43:12
|
||||
" Error: Could not parse for environment production: Syntax error at '='; expected '}' at /root/puppetcode/modules/pancakes/manifests/init.pp:5"
|
||||
" Error: Could not parse for environment production: Syntax error at 'parameter1' (file: /tmp/modules/mariadb/manifests/slave.pp, line: 4, column: 5)
|
||||
let l:pattern = '^Error: .*: \(.\+\) \((file:\|at\) .\+\.pp\(, line: \|:\)\(\d\+\)\(, column: \|:\)\=\(\d*\)'
|
||||
" Error: Illegal attempt to assign to 'a Name'. Not an assignable reference (file: /tmp/modules/waffles/manifests/syrup.pp, line: 5, column: 11)
|
||||
" Error: Could not parse for environment production: Syntax error at end of input (file: /tmp/modules/bob/manifests/init.pp)
|
||||
let l:pattern = '^Error:\%(.*:\)\? \(.\+\) \((file:\|at\) .\+\.pp\(\(, line: \|:\)\(\d\+\)\(, column: \|:\)\=\(\d*\)\|)$\)'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
call add(l:output, {
|
||||
\ 'lnum': l:match[4] + 0,
|
||||
\ 'col': l:match[6] + 0,
|
||||
\ 'lnum': l:match[5] + 0,
|
||||
\ 'col': l:match[7] + 0,
|
||||
\ 'text': l:match[1],
|
||||
\})
|
||||
endfor
|
||||
|
|
43
ale_linters/sh/bashate.vim
Normal file
43
ale_linters/sh/bashate.vim
Normal file
|
@ -0,0 +1,43 @@
|
|||
" Author: hsanson <hsanson@gmail.com>
|
||||
" Description: Lints sh files using bashate
|
||||
" URL: https://github.com/openstack/bashate
|
||||
|
||||
call ale#Set('sh_bashate_executable', 'bashate')
|
||||
call ale#Set('sh_bashate_options', '')
|
||||
|
||||
function! ale_linters#sh#bashate#GetExecutable(buffer) abort
|
||||
return ale#Var(a:buffer, 'sh_bashate_executable')
|
||||
endfunction
|
||||
|
||||
function! ale_linters#sh#bashate#GetCommand(buffer) abort
|
||||
let l:options = ale#Var(a:buffer, 'sh_bashate_options')
|
||||
let l:executable = ale_linters#sh#bashate#GetExecutable(a:buffer)
|
||||
|
||||
return ale#Escape(l:executable) . ' ' . l:options . ' ' . '%t'
|
||||
endfunction
|
||||
|
||||
function! ale_linters#sh#bashate#Handle(buffer, lines) abort
|
||||
" Matches patterns line the following:
|
||||
"
|
||||
" /path/to/script/file:694:1: E003 Indent not multiple of 4
|
||||
let l:pattern = ':\(\d\+\):\(\d\+\): \(.*\)$'
|
||||
let l:output = []
|
||||
|
||||
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||
call add(l:output, {
|
||||
\ 'lnum': str2nr(l:match[1]),
|
||||
\ 'col': str2nr(l:match[2]),
|
||||
\ 'text': l:match[3],
|
||||
\})
|
||||
endfor
|
||||
|
||||
return l:output
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('sh', {
|
||||
\ 'name': 'bashate',
|
||||
\ 'output_stream': 'stdout',
|
||||
\ 'executable': function('ale_linters#sh#bashate#GetExecutable'),
|
||||
\ 'command': function('ale_linters#sh#bashate#GetCommand'),
|
||||
\ 'callback': 'ale_linters#sh#bashate#Handle',
|
||||
\})
|
20
ale_linters/zig/zls.vim
Normal file
20
ale_linters/zig/zls.vim
Normal file
|
@ -0,0 +1,20 @@
|
|||
" Author: CherryMan <skipper308@hotmail.ca>
|
||||
" Description: A language server for Zig
|
||||
|
||||
call ale#Set('zig_zls_executable', 'zls')
|
||||
call ale#Set('zig_zls_config', {})
|
||||
|
||||
function! ale_linters#zig#zls#GetProjectRoot(buffer) abort
|
||||
let l:build_rs = ale#path#FindNearestFile(a:buffer, 'build.zig')
|
||||
|
||||
return !empty(l:build_rs) ? fnamemodify(l:build_rs, ':h') : ''
|
||||
endfunction
|
||||
|
||||
call ale#linter#Define('zig', {
|
||||
\ 'name': 'zls',
|
||||
\ 'lsp': 'stdio',
|
||||
\ 'lsp_config': {b -> ale#Var(b, 'zig_zls_config')},
|
||||
\ 'executable': {b -> ale#Var(b, 'zig_zls_executable')},
|
||||
\ 'command': '%e',
|
||||
\ 'project_root': function('ale_linters#zig#zls#GetProjectRoot'),
|
||||
\})
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
function! ale#fixers#ktlint#Fix(buffer) abort
|
||||
return {
|
||||
\ 'command': ale#handlers#ktlint#GetCommand(a:buffer) . ' --format',
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'command': ale#handlers#ktlint#GetCommand(a:buffer) . ' --format'
|
||||
\}
|
||||
endfunction
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
" Author: w0rp <devw0rp@gmail.com>
|
||||
" Description: Functions for working with eslint, for checking or fixing files.
|
||||
|
||||
let s:executables = [
|
||||
\ 'node_modules/.bin/eslint_d',
|
||||
\ 'node_modules/eslint/bin/eslint.js',
|
||||
\ 'node_modules/.bin/eslint',
|
||||
\]
|
||||
let s:sep = has('win32') ? '\' : '/'
|
||||
|
||||
call ale#Set('javascript_eslint_options', '')
|
||||
|
@ -30,11 +35,7 @@ function! ale#handlers#eslint#FindConfig(buffer) abort
|
|||
endfunction
|
||||
|
||||
function! ale#handlers#eslint#GetExecutable(buffer) abort
|
||||
return ale#node#FindExecutable(a:buffer, 'javascript_eslint', [
|
||||
\ 'node_modules/.bin/eslint_d',
|
||||
\ 'node_modules/eslint/bin/eslint.js',
|
||||
\ 'node_modules/.bin/eslint',
|
||||
\])
|
||||
return ale#node#FindExecutable(a:buffer, 'javascript_eslint', s:executables)
|
||||
endfunction
|
||||
|
||||
" Given a buffer, return a command prefix string which changes directory
|
||||
|
@ -44,10 +45,19 @@ function! ale#handlers#eslint#GetCdString(buffer) abort
|
|||
" By default, the project root is simply the CWD of the running process.
|
||||
" https://github.com/eslint/rfcs/blob/master/designs/2018-simplified-package-loading/README.md
|
||||
" https://github.com/dense-analysis/ale/issues/2787
|
||||
" Identify project root from presence of node_modules dir.
|
||||
"
|
||||
" If eslint is installed in a directory which contains the buffer, assume
|
||||
" it is the ESLint project root. Otherwise, use nearest node_modules.
|
||||
" Note: If node_modules not present yet, can't load local deps anyway.
|
||||
let l:modules_dir = ale#path#FindNearestDirectory(a:buffer, 'node_modules')
|
||||
let l:project_dir = !empty(l:modules_dir) ? fnamemodify(l:modules_dir, ':h:h') : ''
|
||||
let l:executable = ale#node#FindNearestExecutable(a:buffer, s:executables)
|
||||
|
||||
if !empty(l:executable)
|
||||
let l:nmi = strridx(l:executable, 'node_modules')
|
||||
let l:project_dir = l:executable[0:l:nmi - 2]
|
||||
else
|
||||
let l:modules_dir = ale#path#FindNearestDirectory(a:buffer, 'node_modules')
|
||||
let l:project_dir = !empty(l:modules_dir) ? fnamemodify(l:modules_dir, ':h:h') : ''
|
||||
endif
|
||||
|
||||
return !empty(l:project_dir) ? ale#path#CdString(l:project_dir) : ''
|
||||
endfunction
|
||||
|
|
|
@ -13,7 +13,7 @@ function! ale#handlers#ktlint#GetCommand(buffer) abort
|
|||
return ale#Escape(l:executable)
|
||||
\ . (empty(l:options) ? '' : ' ' . l:options)
|
||||
\ . (empty(l:rulesets) ? '' : ' ' . l:rulesets)
|
||||
\ . ' %t'
|
||||
\ . ' --stdin'
|
||||
endfunction
|
||||
|
||||
function! ale#handlers#ktlint#GetRulesets(buffer) abort
|
||||
|
|
|
@ -12,6 +12,18 @@ function! ale#node#FindExecutable(buffer, base_var_name, path_list) abort
|
|||
return ale#Var(a:buffer, a:base_var_name . '_executable')
|
||||
endif
|
||||
|
||||
let l:nearest = ale#node#FindNearestExecutable(a:buffer, a:path_list)
|
||||
|
||||
if !empty(l:nearest)
|
||||
return l:nearest
|
||||
endif
|
||||
|
||||
return ale#Var(a:buffer, a:base_var_name . '_executable')
|
||||
endfunction
|
||||
|
||||
" Given a buffer number, a base variable name, and a list of paths to search
|
||||
" for in ancestor directories, detect the executable path for a Node program.
|
||||
function! ale#node#FindNearestExecutable(buffer, path_list) abort
|
||||
for l:path in a:path_list
|
||||
let l:executable = ale#path#FindNearestFile(a:buffer, l:path)
|
||||
|
||||
|
@ -20,7 +32,7 @@ function! ale#node#FindExecutable(buffer, base_var_name, path_list) abort
|
|||
endif
|
||||
endfor
|
||||
|
||||
return ale#Var(a:buffer, a:base_var_name . '_executable')
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
" Create a executable string which executes a Node.js script command with a
|
||||
|
|
|
@ -131,18 +131,26 @@ javalsp *ale-java-javalsp*
|
|||
|
||||
To enable Java LSP linter you need to download and build the vscode-javac
|
||||
language server from https://github.com/georgewfraser/java-language-server.
|
||||
Simply download the source code and then build a distribution:
|
||||
|
||||
scripts/link_mac.sh
|
||||
Before building the language server you need to install pre-requisites: npm,
|
||||
maven, and protobuf. You also need to have Java 13 and JAVA_HOME properly
|
||||
set.
|
||||
|
||||
or
|
||||
After downloading the source code and installing all pre-requisites you can
|
||||
build the language server with the included build.sh script:
|
||||
|
||||
scripts/link_windows.sh
|
||||
scripts/build.sh
|
||||
|
||||
This generates a dist/mac or dist/windows directory that contains the
|
||||
language server. To let ALE use this language server you need to set the
|
||||
This will create launch scripts for Linux, Mac, and Windows in the dist folder
|
||||
within the repo:
|
||||
|
||||
- lang_server_linux.sh
|
||||
- lang_server_mac.sh
|
||||
- lang_server_windows.sh
|
||||
|
||||
To let ALE use this language server you need to set the
|
||||
g:ale_java_javalsp_executable variable to the absolute path of the launcher
|
||||
executable in this directory.
|
||||
executable for your platform.
|
||||
|
||||
g:ale_java_javalsp_executable *g:ale_java_javalsp_executable*
|
||||
*b:ale_java_javalsp_executable*
|
||||
|
@ -152,7 +160,7 @@ g:ale_java_javalsp_executable *g:ale_java_javalsp_executable*
|
|||
This variable must be set to the absolute path of the language server launcher
|
||||
executable. For example:
|
||||
>
|
||||
let g:ale_java_javalsp_executable=/java-language-server/dist/mac/bin/launcher
|
||||
let g:ale_java_javalsp_executable=/java-language-server/dist/lang_server_linux.sh
|
||||
<
|
||||
|
||||
g:ale_java_javalsp_config *g:ale_java_javalsp_config*
|
||||
|
|
|
@ -2,6 +2,29 @@
|
|||
ALE Shell Integration *ale-sh-options*
|
||||
|
||||
|
||||
===============================================================================
|
||||
bashate *ale-sh-bashate*
|
||||
|
||||
g:ale_sh_bashate_executable *g:ale_sh_bashate_executable*
|
||||
*b:ale_sh_bashate_executable*
|
||||
Type: |String|
|
||||
Default: `'bashate'`
|
||||
|
||||
This variable sets executable used for bashate.
|
||||
|
||||
|
||||
g:ale_sh_bashate_options *g:ale_sh_bashate_options*
|
||||
*b:ale_sh_bashate_options*
|
||||
Type: |String|
|
||||
Default: `''`
|
||||
|
||||
With this variable we are able to pass extra arguments for bashate. For
|
||||
example to ignore the indentation rule:
|
||||
|
||||
>
|
||||
let g:ale_sh_shellcheck_options = '-i E003'
|
||||
<
|
||||
|
||||
===============================================================================
|
||||
sh-language-server *ale-sh-language-server*
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ Notes:
|
|||
* Awk
|
||||
* `gawk`
|
||||
* Bash
|
||||
* `bashate`
|
||||
* `language-server`
|
||||
* `shell` (-n flag)
|
||||
* `shellcheck`
|
||||
|
@ -511,3 +512,5 @@ Notes:
|
|||
* `yamllint`
|
||||
* YANG
|
||||
* `yang-lsp`
|
||||
* Zig
|
||||
* `zls`
|
||||
|
|
33
doc/ale-zig.txt
Normal file
33
doc/ale-zig.txt
Normal file
|
@ -0,0 +1,33 @@
|
|||
===============================================================================
|
||||
ALE Zig Integration *ale-zig-options*
|
||||
*ale-integration-zig*
|
||||
|
||||
===============================================================================
|
||||
Integration Information
|
||||
|
||||
Currently, the only supported linter for zig is zls.
|
||||
|
||||
===============================================================================
|
||||
zls *ale-zig-zls*
|
||||
|
||||
g:ale_zig_zls_executable *g:ale_zig_zls_executable*
|
||||
*b:ale_zig_zls_executable*
|
||||
Type: |String|
|
||||
Default: `'zls'`
|
||||
|
||||
This variable can be modified to change the executable path for `zls`.
|
||||
|
||||
|
||||
g:ale_zig_zls_config *g:ale_zig_zls_config*
|
||||
*b:ale_zig_zls_config*
|
||||
Type: |Dictionary|
|
||||
Default: `{}`
|
||||
|
||||
WARNING: As of writing, zls does not support receiving configuration
|
||||
from the client. This variable is a PLACEHOLDER until it does.
|
||||
|
||||
Dictionary with configuration settings for zls.
|
||||
|
||||
|
||||
===============================================================================
|
||||
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
|
@ -2601,6 +2601,7 @@ documented in additional help files.
|
|||
sasslint..............................|ale-scss-sasslint|
|
||||
stylelint.............................|ale-scss-stylelint|
|
||||
sh......................................|ale-sh-options|
|
||||
bashate...............................|ale-sh-bashate|
|
||||
sh-language-server....................|ale-sh-language-server|
|
||||
shell.................................|ale-sh-shell|
|
||||
shellcheck............................|ale-sh-shellcheck|
|
||||
|
@ -2677,6 +2678,8 @@ documented in additional help files.
|
|||
yamllint..............................|ale-yaml-yamllint|
|
||||
yang....................................|ale-yang-options|
|
||||
yang-lsp..............................|ale-yang-lsp|
|
||||
zig.....................................|ale-zig-options|
|
||||
zls...................................|ale-zig-zls|
|
||||
|
||||
|
||||
===============================================================================
|
||||
|
|
|
@ -41,6 +41,7 @@ formatting.
|
|||
* Awk
|
||||
* [gawk](https://www.gnu.org/software/gawk/)
|
||||
* Bash
|
||||
* [bashate](https://github.com/openstack/bashate)
|
||||
* [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/)
|
||||
|
@ -520,3 +521,5 @@ formatting.
|
|||
* [yamllint](https://yamllint.readthedocs.io/)
|
||||
* YANG
|
||||
* [yang-lsp](https://github.com/theia-ide/yang-lsp)
|
||||
* Zig
|
||||
* [zls](https://github.com/zigtools/zls)
|
||||
|
|
15
test/command_callback/test_bashate_command_callback.vader
Normal file
15
test/command_callback/test_bashate_command_callback.vader
Normal file
|
@ -0,0 +1,15 @@
|
|||
Before:
|
||||
call ale#assert#SetUpLinterTest('sh', 'bashate')
|
||||
call ale#test#SetFilename('test.sh')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The default bashate command should be correct):
|
||||
AssertLinter 'bashate', ale#Escape('bashate') . ' %t'
|
||||
|
||||
Execute(The bashate command should accept options):
|
||||
let b:ale_sh_bashate_options = '-i E310 --max-line-length 100'
|
||||
|
||||
AssertLinter 'bashate',
|
||||
\ ale#Escape('bashate') . ' -i E310 --max-line-length 100 %t'
|
|
@ -20,11 +20,11 @@ Execute(The checkstyle executable should be configurable):
|
|||
\ . ' %s'
|
||||
|
||||
Execute(Custom options should be supported):
|
||||
let b:ale_java_checkstyle_options = '--foobar'
|
||||
let b:ale_java_checkstyle_options = '--foobar -cp -classpath /path/to/checkstyle-8.7-all.jar'
|
||||
|
||||
AssertLinter 'checkstyle',
|
||||
\ ale#Escape('checkstyle')
|
||||
\ . ' --foobar'
|
||||
\ . ' --foobar -cp -classpath /path/to/checkstyle-8.7-all.jar'
|
||||
\ . ' -c ' . ale#Escape('/google_checks.xml')
|
||||
\ . ' %s'
|
||||
|
||||
|
|
15
test/command_callback/test_zig_zls_callbacks.vader
Normal file
15
test/command_callback/test_zig_zls_callbacks.vader
Normal file
|
@ -0,0 +1,15 @@
|
|||
Before:
|
||||
call ale#assert#SetUpLinterTest('zig', 'zls')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The default executable path should be correct):
|
||||
AssertLinter 'zls', ale#Escape('zls')
|
||||
|
||||
Execute(The project root should be detected correctly):
|
||||
AssertLSPProject ''
|
||||
|
||||
call ale#test#SetFilename('zig-zls-project/main.zig')
|
||||
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/zig-zls-project')
|
0
test/command_callback/zig-zls-project/build.zig
Normal file
0
test/command_callback/zig-zls-project/build.zig
Normal file
0
test/eslint-test-files/react-app/subdir-with-package-json/node_modules/.gitkeep
generated
vendored
Normal file
0
test/eslint-test-files/react-app/subdir-with-package-json/node_modules/.gitkeep
generated
vendored
Normal file
|
@ -21,9 +21,8 @@ Execute(The ktlint callback should return the correct default values):
|
|||
AssertEqual
|
||||
\ {
|
||||
\ 'command': ale#Escape('xxxinvalid')
|
||||
\ . ' %t'
|
||||
\ . ' --stdin'
|
||||
\ . ' --format',
|
||||
\ 'read_temporary_file': 1,
|
||||
\ },
|
||||
\ ale#fixers#ktlint#Fix(bufnr(''))
|
||||
|
||||
|
@ -37,8 +36,7 @@ Execute(The ktlint callback should include custom ktlint options):
|
|||
\ 'command': ale#Escape('xxxinvalid')
|
||||
\ . ' ' . g:ale_kotlin_ktlint_options
|
||||
\ . ' --ruleset /path/to/custom/ruleset.jar'
|
||||
\ . ' %t'
|
||||
\ . ' --stdin'
|
||||
\ . ' --format',
|
||||
\ 'read_temporary_file': 1,
|
||||
\ },
|
||||
\ ale#fixers#ktlint#Fix(bufnr(''))
|
||||
|
|
36
test/handler/test_bashate_handler.vader
Normal file
36
test/handler/test_bashate_handler.vader
Normal file
|
@ -0,0 +1,36 @@
|
|||
Before:
|
||||
runtime ale_linters/sh/bashate.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(The bashate handler should handle basic errors):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 777,
|
||||
\ 'col': 1,
|
||||
\ 'text': 'E003 Indent not multiple of 4',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 783,
|
||||
\ 'col': 1,
|
||||
\ 'text': 'E020 Function declaration not in format ^function name {$',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 786,
|
||||
\ 'col': 1,
|
||||
\ 'text': 'E010 The "do" should be on same line as for',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 791,
|
||||
\ 'col': 1,
|
||||
\ 'text': 'E006 Line too long',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#sh#bashate#Handle(bufnr(''), [
|
||||
\ 'run:777:1: E003 Indent not multiple of 4',
|
||||
\ 'run:783:1: E020 Function declaration not in format ^function name {$',
|
||||
\ 'run:786:1: E010 The "do" should be on same line as for',
|
||||
\ 'run:791:1: E006 Line too long',
|
||||
\ ])
|
|
@ -49,3 +49,29 @@ Execute(The puppet handler should parse lines and column correctly):
|
|||
\ "Error: Could not parse for environment production: Syntax error at ':' at C:/puppet/modules/nginx/manifests/init.pp:54:9",
|
||||
\ "Error: Could not parse for environment production: Syntax error at 'parameter1' (file: /tmp/modules/mariadb/manifests/slave.pp, line: 45, column: 12)",
|
||||
\ ])
|
||||
|
||||
Execute(The puppet handler should correctly parse errors that are reported before even trying to parse for an environment):
|
||||
" Line Error
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 5,
|
||||
\ 'col': 11,
|
||||
\ 'text': "Illegal attempt to assign to 'a Name'. Not an assignable reference"
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#puppet#puppet#Handle(255, [
|
||||
\ "Error: Illegal attempt to assign to 'a Name'. Not an assignable reference (file: /tmp/modules/waffles/manifests/syrup.pp, line: 5, column: 11)",
|
||||
\ ])
|
||||
Execute(The puppet handler should parse lines when end of input is the location):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 0,
|
||||
\ 'col': 0,
|
||||
\ 'text': "Syntax error at end of input"
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#puppet#puppet#Handle(255, [
|
||||
\ "Error: Could not parse for environment production: Syntax error at end of input (file: /tmp//modules/test/manifests/init.pp)",
|
||||
\ ])
|
||||
|
|
|
@ -70,6 +70,25 @@ Execute(eslint.js executables should be run with node on Windows):
|
|||
\ ale#handlers#eslint#GetCommand(bufnr(''))
|
||||
endif
|
||||
|
||||
Execute(eslint.js should be run from containing project with eslint):
|
||||
call ale#test#SetFilename('eslint-test-files/react-app/subdir-with-package-json/testfile.js')
|
||||
|
||||
" We have to execute the file with node.
|
||||
if has('win32')
|
||||
AssertEqual
|
||||
\ ale#path#CdString(ale#path#Simplify(g:dir . '/eslint-test-files/react-app'))
|
||||
\ . ale#Escape('node.exe') . ' '
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/eslint-test-files/react-app/node_modules/eslint/bin/eslint.js'))
|
||||
\ . ' -f json --stdin --stdin-filename %s',
|
||||
\ ale#handlers#eslint#GetCommand(bufnr(''))
|
||||
else
|
||||
AssertEqual
|
||||
\ ale#path#CdString(ale#path#Simplify(g:dir . '/eslint-test-files/react-app'))
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/eslint-test-files/react-app/node_modules/eslint/bin/eslint.js'))
|
||||
\ . ' -f json --stdin --stdin-filename %s',
|
||||
\ ale#handlers#eslint#GetCommand(bufnr(''))
|
||||
endif
|
||||
|
||||
Execute(eslint.js executables can be run outside project dir):
|
||||
" Set filename above eslint-test-files (which contains node_modules)
|
||||
call ale#test#SetFilename('testfile.js')
|
||||
|
|
Reference in a new issue