summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek thindil Jasicki <thindil@laeran.pl>2020-07-24 10:38:29 +0200
committerBartek thindil Jasicki <thindil@laeran.pl>2020-07-24 10:38:29 +0200
commite06060a31fbdc58221234e9344023f3372e93629 (patch)
treee54a42f0ce93a420077ea9aa2444486665add338
parent0f45d3d01d2f91d5b9ce3f01de6c288c6f2ca441 (diff)
parent68b484a49fe2f5cc29ebccca0a3da48b31073ada (diff)
downloadale-e06060a31fbdc58221234e9344023f3372e93629.zip
Merge remote-tracking branch 'upstream/master'
-rw-r--r--ale_linters/java/checkstyle.vim2
-rw-r--r--ale_linters/java/eclipselsp.vim22
-rw-r--r--ale_linters/kotlin/ktlint.vim2
-rw-r--r--ale_linters/puppet/puppet.vim8
-rw-r--r--ale_linters/sh/bashate.vim43
-rw-r--r--ale_linters/zig/zls.vim20
-rw-r--r--autoload/ale/fixers/ktlint.vim3
-rw-r--r--autoload/ale/handlers/eslint.vim26
-rw-r--r--autoload/ale/handlers/ktlint.vim2
-rw-r--r--autoload/ale/node.vim14
-rw-r--r--doc/ale-java.txt24
-rw-r--r--doc/ale-sh.txt23
-rw-r--r--doc/ale-supported-languages-and-tools.txt3
-rw-r--r--doc/ale-zig.txt33
-rw-r--r--doc/ale.txt3
-rw-r--r--supported-tools.md3
-rw-r--r--test/command_callback/test_bashate_command_callback.vader15
-rw-r--r--test/command_callback/test_checkstyle_command_callback.vader4
-rw-r--r--test/command_callback/test_zig_zls_callbacks.vader15
-rw-r--r--test/command_callback/zig-zls-project/build.zig0
-rw-r--r--test/eslint-test-files/react-app/subdir-with-package-json/node_modules/.gitkeep0
-rw-r--r--test/fixers/test_ktlint_fixer_callback.vader6
-rw-r--r--test/handler/test_bashate_handler.vader36
-rw-r--r--test/handler/test_puppet_handler.vader26
-rw-r--r--test/test_eslint_executable_detection.vader19
25 files changed, 314 insertions, 38 deletions
diff --git a/ale_linters/java/checkstyle.vim b/ale_linters/java/checkstyle.vim
index 7901ff7e..ec7339d1 100644
--- a/ale_linters/java/checkstyle.vim
+++ b/ale_linters/java/checkstyle.vim
@@ -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)
\ : ''
diff --git a/ale_linters/java/eclipselsp.vim b/ale_linters/java/eclipselsp.vim
index 2bfec043..c981b749 100644
--- a/ale_linters/java/eclipselsp.vim
+++ b/ale_linters/java/eclipselsp.vim
@@ -20,25 +20,32 @@ endfunction
function! ale_linters#java#eclipselsp#JarPath(buffer) abort
let l:path = ale_linters#java#eclipselsp#TargetPath(a:buffer)
+ if has('win32')
+ let l:platform = 'win32'
+ elseif has('macunix')
+ let l:platform = 'macosx'
+ else
+ let l:platform = 'linux'
+ endif
+
" 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)
+ 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 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
diff --git a/ale_linters/kotlin/ktlint.vim b/ale_linters/kotlin/ktlint.vim
index f0384005..0bb64b19 100644
--- a/ale_linters/kotlin/ktlint.vim
+++ b/ale_linters/kotlin/ktlint.vim
@@ -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'
\})
diff --git a/ale_linters/puppet/puppet.vim b/ale_linters/puppet/puppet.vim
index ae648615..59228dc8 100644
--- a/ale_linters/puppet/puppet.vim
+++ b/ale_linters/puppet/puppet.vim
@@ -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
diff --git a/ale_linters/sh/bashate.vim b/ale_linters/sh/bashate.vim
new file mode 100644
index 00000000..3cd84245
--- /dev/null
+++ b/ale_linters/sh/bashate.vim
@@ -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',
+\})
diff --git a/ale_linters/zig/zls.vim b/ale_linters/zig/zls.vim
new file mode 100644
index 00000000..1390f6b1
--- /dev/null
+++ b/ale_linters/zig/zls.vim
@@ -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'),
+\})
diff --git a/autoload/ale/fixers/ktlint.vim b/autoload/ale/fixers/ktlint.vim
index cb975d6c..64d1340d 100644
--- a/autoload/ale/fixers/ktlint.vim
+++ b/autoload/ale/fixers/ktlint.vim
@@ -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
diff --git a/autoload/ale/handlers/eslint.vim b/autoload/ale/handlers/eslint.vim
index c7c47d78..e37d6902 100644
--- a/autoload/ale/handlers/eslint.vim
+++ b/autoload/ale/handlers/eslint.vim
@@ -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
diff --git a/autoload/ale/handlers/ktlint.vim b/autoload/ale/handlers/ktlint.vim
index ad999485..77e7ab66 100644
--- a/autoload/ale/handlers/ktlint.vim
+++ b/autoload/ale/handlers/ktlint.vim
@@ -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
diff --git a/autoload/ale/node.vim b/autoload/ale/node.vim
index 69060122..9b9b335a 100644
--- a/autoload/ale/node.vim
+++ b/autoload/ale/node.vim
@@ -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
diff --git a/doc/ale-java.txt b/doc/ale-java.txt
index d2001ca7..2e736d90 100644
--- a/doc/ale-java.txt
+++ b/doc/ale-java.txt
@@ -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*
diff --git a/doc/ale-sh.txt b/doc/ale-sh.txt
index 3eac9038..7897d0ce 100644
--- a/doc/ale-sh.txt
+++ b/doc/ale-sh.txt
@@ -3,6 +3,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*
g:ale_sh_language_server_executable *g:ale_sh_language_server_executable*
diff --git a/doc/ale-supported-languages-and-tools.txt b/doc/ale-supported-languages-and-tools.txt
index 307003f6..20731fba 100644
--- a/doc/ale-supported-languages-and-tools.txt
+++ b/doc/ale-supported-languages-and-tools.txt
@@ -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`
diff --git a/doc/ale-zig.txt b/doc/ale-zig.txt
new file mode 100644
index 00000000..70a53bbb
--- /dev/null
+++ b/doc/ale-zig.txt
@@ -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:
diff --git a/doc/ale.txt b/doc/ale.txt
index 497a4786..f549ffda 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -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|
===============================================================================
diff --git a/supported-tools.md b/supported-tools.md
index 6433dbec..cfc5430e 100644
--- a/supported-tools.md
+++ b/supported-tools.md
@@ -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)
diff --git a/test/command_callback/test_bashate_command_callback.vader b/test/command_callback/test_bashate_command_callback.vader
new file mode 100644
index 00000000..714cf690
--- /dev/null
+++ b/test/command_callback/test_bashate_command_callback.vader
@@ -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'
diff --git a/test/command_callback/test_checkstyle_command_callback.vader b/test/command_callback/test_checkstyle_command_callback.vader
index 7a9f26b3..5824df87 100644
--- a/test/command_callback/test_checkstyle_command_callback.vader
+++ b/test/command_callback/test_checkstyle_command_callback.vader
@@ -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'
diff --git a/test/command_callback/test_zig_zls_callbacks.vader b/test/command_callback/test_zig_zls_callbacks.vader
new file mode 100644
index 00000000..6e42cc4b
--- /dev/null
+++ b/test/command_callback/test_zig_zls_callbacks.vader
@@ -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')
diff --git a/test/command_callback/zig-zls-project/build.zig b/test/command_callback/zig-zls-project/build.zig
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/command_callback/zig-zls-project/build.zig
diff --git a/test/eslint-test-files/react-app/subdir-with-package-json/node_modules/.gitkeep b/test/eslint-test-files/react-app/subdir-with-package-json/node_modules/.gitkeep
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/test/eslint-test-files/react-app/subdir-with-package-json/node_modules/.gitkeep
diff --git a/test/fixers/test_ktlint_fixer_callback.vader b/test/fixers/test_ktlint_fixer_callback.vader
index 47b37788..ba01a409 100644
--- a/test/fixers/test_ktlint_fixer_callback.vader
+++ b/test/fixers/test_ktlint_fixer_callback.vader
@@ -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(''))
diff --git a/test/handler/test_bashate_handler.vader b/test/handler/test_bashate_handler.vader
new file mode 100644
index 00000000..b61bb956
--- /dev/null
+++ b/test/handler/test_bashate_handler.vader
@@ -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',
+ \ ])
diff --git a/test/handler/test_puppet_handler.vader b/test/handler/test_puppet_handler.vader
index e73c9dc7..03adc9f0 100644
--- a/test/handler/test_puppet_handler.vader
+++ b/test/handler/test_puppet_handler.vader
@@ -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)",
+ \ ])
diff --git a/test/test_eslint_executable_detection.vader b/test/test_eslint_executable_detection.vader
index c2071131..3fed63da 100644
--- a/test/test_eslint_executable_detection.vader
+++ b/test/test_eslint_executable_detection.vader
@@ -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')