mirror of
https://github.com/dense-analysis/ale.git
synced 2026-02-07 10:21:05 +08:00
Merge branch 'master' into fix-swipl
* master: (133 commits) Add rnix-lsp for Nix diagnostics and completion add spectral support for json add spectral handler add spectral linter for yaml doc: Fix linter issues doc: Add documentation for Deno feat: Add Deno lsp support feat: Add Deno fmt fixer Add document for apkbuild filetype Add tests for atools handler, basic and dealing with Error and Warning Test default linters for apkbuild Document new default linters for apkbuild Make apkbuild_lint and secfixes_check default for apkbuild filetype document support for apkbuild-lint and secfixes-check for apkbuild Add linters for apkbuild-lint and secfixes-check from atools Add handler for the output of atools Fix typos Add command callback tests Add support for standalone files Fix linting errors ...
This commit is contained in:
0
test/command_callback/inko_paths/test.inko
Normal file
0
test/command_callback/inko_paths/test.inko
Normal file
0
test/command_callback/spectral_paths/node_modules/.bin/spectral
generated
vendored
Normal file
0
test/command_callback/spectral_paths/node_modules/.bin/spectral
generated
vendored
Normal file
0
test/command_callback/spectral_paths/openapi.yaml
Normal file
0
test/command_callback/spectral_paths/openapi.yaml
Normal file
17
test/command_callback/test_adals_command_callbacks.vader
Normal file
17
test/command_callback/test_adals_command_callbacks.vader
Normal file
@@ -0,0 +1,17 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('ada', 'adals')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(Sets adals executable):
|
||||
let g:ale_ada_adals_executable = '/path/to /Ada'
|
||||
AssertLinter '/path/to /Ada', ale#Escape('/path/to /Ada')
|
||||
|
||||
Execute(Sets adals encoding):
|
||||
let b:ale_ada_adals_encoding = 'iso-8859-1'
|
||||
AssertLSPConfig {'ada.defaultCharset': 'iso-8859-1', 'ada.projectFile': 'default.gpr'}
|
||||
|
||||
Execute(Sets adals project):
|
||||
let g:ale_ada_adals_project = 'myproject.gpr'
|
||||
AssertLSPConfig {'ada.defaultCharset': 'utf-8', 'ada.projectFile': 'myproject.gpr'}
|
||||
@@ -68,7 +68,6 @@ Execute(The build directory should be used for header files):
|
||||
\ ale#Escape('clang-tidy')
|
||||
\ . ' -checks=' . ale#Escape('*') . ' %s'
|
||||
\ . ' -p ' . ale#Escape('/foo/bar')
|
||||
\ . ' -- -x c++'
|
||||
|
||||
call ale#test#SetFilename('test.hpp')
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('dart', 'analysis_server')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The default command should be correct):
|
||||
AssertLinter 'dart', ale#Escape('dart')
|
||||
\ . ' ./snapshots/analysis_server.dart.snapshot --lsp'
|
||||
|
||||
Execute(The executable should be configurable):
|
||||
let g:ale_dart_analysis_server_executable = 'foobar'
|
||||
|
||||
AssertLinter 'foobar', ale#Escape('foobar')
|
||||
\ . ' ./snapshots/analysis_server.dart.snapshot --lsp'
|
||||
@@ -38,3 +38,10 @@ Execute(Builds credo command with suggest mode when set to 0):
|
||||
AssertLinter 'mix',
|
||||
\ ale#path#CdString(ale#path#Simplify(g:dir . '/elixir_paths/mix_project'))
|
||||
\ . 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s'
|
||||
|
||||
Execute(Builds credo command with a custom config file):
|
||||
let g:ale_elixir_credo_config_file = '/home/user/custom_credo.exs'
|
||||
|
||||
AssertLinter 'mix',
|
||||
\ ale#path#CdString(ale#path#Simplify(g:dir . '/elixir_paths/mix_project'))
|
||||
\ . 'mix help credo && mix credo suggest --config-file /home/user/custom_credo.exs --format=flycheck --read-from-stdin %s'
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('erlang', 'erlc')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The default command should be correct.):
|
||||
let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr(''))
|
||||
let g:regex = 'erlc.\+-o.\+%t'
|
||||
let g:matched = match(g:cmd, g:regex)
|
||||
|
||||
" match returns -1 if not found
|
||||
AssertNotEqual
|
||||
\ g:matched,
|
||||
\ -1,
|
||||
\ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']'
|
||||
|
||||
Execute(The command should accept configured executable.):
|
||||
let b:ale_erlang_erlc_executable = '/usr/bin/erlc'
|
||||
let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr(''))
|
||||
let g:regex = '/usr/bin/erlc.\+-o.\+%t'
|
||||
let g:matched = match(g:cmd, g:regex)
|
||||
|
||||
" match returns -1 if not found
|
||||
AssertNotEqual
|
||||
\ g:matched,
|
||||
\ -1,
|
||||
\ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']'
|
||||
|
||||
Execute(The command should accept configured options.):
|
||||
let b:ale_erlang_erlc_options = '-I include'
|
||||
let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr(''))
|
||||
let g:regex = 'erlc.\+-o.\+-I include.\+%t'
|
||||
let g:matched = match(g:cmd, g:regex)
|
||||
|
||||
" match returns -1 if not found
|
||||
AssertNotEqual
|
||||
\ g:matched,
|
||||
\ -1,
|
||||
\ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']'
|
||||
@@ -1,5 +1,6 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('javascript', 'fecs')
|
||||
runtime autoload/ale/handlers/fecs.vim
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('openapi', 'ibm_validator')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The yaml ibm-openapi-validator command callback should return the correct default string):
|
||||
AssertLinter 'lint-openapi', ale#Escape('lint-openapi') . ' %t'
|
||||
|
||||
Execute(The yaml ibm-openapi-validator command callback should be configurable):
|
||||
let g:ale_openapi_ibm_validator_executable = '~/.local/bin/lint-openapi'
|
||||
let g:ale_openapi_ibm_validator_options = '-c ~/.config'
|
||||
|
||||
AssertLinter '~/.local/bin/lint-openapi', ale#Escape('~/.local/bin/lint-openapi')
|
||||
\ . ' -c ~/.config %t'
|
||||
20
test/command_callback/test_inko_inko_callbacks.vader
Normal file
20
test/command_callback/test_inko_inko_callbacks.vader
Normal file
@@ -0,0 +1,20 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('inko', 'inko')
|
||||
call ale#test#SetFilename('inko_paths/test.inko')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The default executable path should be correct):
|
||||
AssertLinter 'inko', ale#Escape('inko') . ' build --check --format=json %s'
|
||||
|
||||
Execute(The inko callback should include tests/ for test paths):
|
||||
call ale#engine#Cleanup(bufnr(''))
|
||||
noautocmd e! inko_paths/tests/test/test_foo.inko
|
||||
call ale#engine#InitBufferInfo(bufnr(''))
|
||||
|
||||
AssertLinter 'inko',
|
||||
\ ale#Escape('inko')
|
||||
\ . ' build --check --format=json --include '
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/inko_paths/tests/'))
|
||||
\ . ' %s'
|
||||
@@ -11,16 +11,16 @@ After:
|
||||
Execute(The default executable path should be correct):
|
||||
AssertLinter 'julia',
|
||||
\ ale#Escape('julia') .
|
||||
\' --startup-file=no --history-file=no -e ' .
|
||||
\ ale#Escape('using LanguageServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, false); server.runlinter = true; run(server);')
|
||||
\' --project=@. --startup-file=no --history-file=no -e ' .
|
||||
\ ale#Escape('using LanguageServer; using Pkg; import StaticLint; import SymbolServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, dirname(Pkg.Types.Context().env.project_file)); server.runlinter = true; run(server);')
|
||||
|
||||
Execute(The executable should be configurable):
|
||||
let g:ale_julia_executable = 'julia-new'
|
||||
|
||||
AssertLinter 'julia-new',
|
||||
\ ale#Escape('julia-new') .
|
||||
\' --startup-file=no --history-file=no -e ' .
|
||||
\ ale#Escape('using LanguageServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, false); server.runlinter = true; run(server);')
|
||||
\' --project=@. --startup-file=no --history-file=no -e ' .
|
||||
\ ale#Escape('using LanguageServer; using Pkg; import StaticLint; import SymbolServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, dirname(Pkg.Types.Context().env.project_file)); server.runlinter = true; run(server);')
|
||||
|
||||
Execute(The project root should be detected correctly):
|
||||
AssertLSPProject ''
|
||||
|
||||
@@ -16,5 +16,5 @@ Execute(The project root should be detected correctly):
|
||||
|
||||
Execute(Should accept configuration settings):
|
||||
AssertLSPConfig {}
|
||||
let b:ale_rust_analyzer_config = {'rust': {'clippy_preference': 'on'}}
|
||||
AssertLSPConfig {'rust': {'clippy_preference': 'on'}}
|
||||
let b:ale_rust_analyzer_config = {'diagnostics': {'disabled': ['unresolved-import']}}
|
||||
AssertLSPOptions {'diagnostics': {'disabled': ['unresolved-import']}}
|
||||
|
||||
@@ -5,6 +5,7 @@ Before:
|
||||
|
||||
let g:ale_ruby_sorbet_executable = 'srb'
|
||||
let g:ale_ruby_sorbet_options = ''
|
||||
let g:ale_ruby_sorbet_enable_watchman = 0
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
@@ -13,6 +14,12 @@ Execute(Executable should default to srb):
|
||||
AssertLinter 'srb', ale#Escape('srb')
|
||||
\ . ' tc --lsp --disable-watchman'
|
||||
|
||||
Execute(Able to enable watchman):
|
||||
let g:ale_ruby_sorbet_enable_watchman = 1
|
||||
|
||||
AssertLinter 'srb', ale#Escape('srb')
|
||||
\ . ' tc --lsp'
|
||||
|
||||
Execute(Should be able to set a custom executable):
|
||||
let g:ale_ruby_sorbet_executable = 'bin/srb'
|
||||
|
||||
|
||||
31
test/command_callback/test_spectral_command_callback.vader
Normal file
31
test/command_callback/test_spectral_command_callback.vader
Normal file
@@ -0,0 +1,31 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('yaml', 'spectral')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The yaml spectral command callback should return the correct default string):
|
||||
AssertLinter 'spectral', ale#Escape('spectral') . ' lint --ignore-unknown-format -q -f text %t'
|
||||
|
||||
Execute(The yaml spectral command callback should be configurable):
|
||||
let g:ale_yaml_spectral_executable = '~/.local/bin/spectral'
|
||||
|
||||
AssertLinter '~/.local/bin/spectral',
|
||||
\ ale#Escape('~/.local/bin/spectral')
|
||||
\ . ' lint --ignore-unknown-format -q -f text %t'
|
||||
|
||||
Execute(The yaml spectral command callback should allow a global installation to be used):
|
||||
let g:ale_yaml_spectral_executable = '/usr/local/bin/spectral'
|
||||
let g:ale_yaml_spectral_use_global = 1
|
||||
|
||||
AssertLinter '/usr/local/bin/spectral',
|
||||
\ ale#Escape('/usr/local/bin/spectral')
|
||||
\ . ' lint --ignore-unknown-format -q -f text %t'
|
||||
|
||||
Execute(The yaml spectral command callback should allow a local installation to be used):
|
||||
call ale#test#SetFilename('spectral_paths/openapi.yaml')
|
||||
|
||||
AssertLinter
|
||||
\ ale#path#Simplify(g:dir . '/spectral_paths/node_modules/.bin/spectral'),
|
||||
\ ale#Escape(ale#path#Simplify(g:dir . '/spectral_paths/node_modules/.bin/spectral'))
|
||||
\ . ' lint --ignore-unknown-format -q -f text %t'
|
||||
60
test/command_callback/test_typescript_deno_lsp.vader
Normal file
60
test/command_callback/test_typescript_deno_lsp.vader
Normal file
@@ -0,0 +1,60 @@
|
||||
Before:
|
||||
let g:ale_deno_unstable = 0
|
||||
let g:ale_deno_executable = 'deno'
|
||||
let g:ale_deno_project_root = ''
|
||||
|
||||
runtime autoload/ale/handlers/deno.vim
|
||||
call ale#assert#SetUpLinterTest('typescript', 'deno')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(Should set deno lsp for TypeScript projects using stable Deno API):
|
||||
AssertLSPLanguage 'typescript'
|
||||
AssertLSPConfig {}
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/../..')
|
||||
AssertLSPOptions {
|
||||
\ 'enable': v:true,
|
||||
\ 'lint': v:true,
|
||||
\ 'unstable': v:false
|
||||
\}
|
||||
|
||||
Execute(Should set deno lsp using unstable Deno API if enabled by user):
|
||||
let g:ale_deno_unstable = 1
|
||||
AssertLSPLanguage 'typescript'
|
||||
AssertLSPConfig {}
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/../..')
|
||||
AssertLSPOptions {
|
||||
\ 'enable': v:true,
|
||||
\ 'lint': v:true,
|
||||
\ 'unstable': v:true
|
||||
\}
|
||||
|
||||
Execute(Should find project root containing tsconfig.json):
|
||||
call ale#test#SetFilename('../typescript/test.ts')
|
||||
AssertLSPLanguage 'typescript'
|
||||
AssertLSPConfig {}
|
||||
AssertLSPProject ale#path#Simplify(g:dir . '/../typescript')
|
||||
AssertLSPOptions {
|
||||
\ 'enable': v:true,
|
||||
\ 'lint': v:true,
|
||||
\ 'unstable': v:false
|
||||
\}
|
||||
|
||||
Execute(Should use user-specified project root):
|
||||
let g:ale_deno_lsp_project_root = '/'
|
||||
|
||||
call ale#test#SetFilename('../typescript/test.ts')
|
||||
AssertLSPLanguage 'typescript'
|
||||
AssertLSPConfig {}
|
||||
AssertLSPProject '/'
|
||||
AssertLSPOptions {
|
||||
\ 'enable': v:true,
|
||||
\ 'lint': v:true,
|
||||
\ 'unstable': v:false
|
||||
\}
|
||||
|
||||
Execute(Check Deno LSP command):
|
||||
AssertLinter 'deno', [
|
||||
\ ale#Escape('deno') . ' lsp',
|
||||
\]
|
||||
@@ -1,8 +1,11 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('typescript', 'xo')
|
||||
call ale#test#SetFilename('testfile.ts')
|
||||
call ale#assert#SetUpLinterTest('javascript', 'xo')
|
||||
call ale#test#SetFilename('testfile.jsx')
|
||||
unlet! b:executable
|
||||
|
||||
set filetype=javascriptreact
|
||||
runtime autoload/ale/handlers/xo.vim
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
@@ -10,11 +13,11 @@ Execute(The XO executable should be called):
|
||||
AssertLinter 'xo', ale#Escape('xo') . ' --reporter json --stdin --stdin-filename %s'
|
||||
|
||||
Execute(The XO executable should be configurable):
|
||||
let b:ale_typescript_xo_executable = 'foobar'
|
||||
let b:ale_javascript_xo_executable = 'foobar'
|
||||
|
||||
AssertLinter 'foobar', ale#Escape('foobar') . ' --reporter json --stdin --stdin-filename %s'
|
||||
|
||||
Execute(The XO options should be configurable):
|
||||
let b:ale_typescript_xo_options = '--wat'
|
||||
let b:ale_javascript_xo_options = '--wat'
|
||||
|
||||
AssertLinter 'xo', ale#Escape('xo') . ' --wat --reporter json --stdin --stdin-filename %s'
|
||||
|
||||
23
test/command_callback/test_xots_command_callback.vader
Normal file
23
test/command_callback/test_xots_command_callback.vader
Normal file
@@ -0,0 +1,23 @@
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('typescript', 'xo')
|
||||
call ale#test#SetFilename('testfile.tsx')
|
||||
unlet! b:executable
|
||||
|
||||
set filetype=typescriptreact
|
||||
runtime autoload/ale/handlers/xo.vim
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(The XO executable should be called):
|
||||
AssertLinter 'xo', ale#Escape('xo') . ' --reporter json --stdin --stdin-filename %s'
|
||||
|
||||
Execute(The XO executable should be configurable):
|
||||
let b:ale_typescript_xo_executable = 'foobar'
|
||||
|
||||
AssertLinter 'foobar', ale#Escape('foobar') . ' --reporter json --stdin --stdin-filename %s'
|
||||
|
||||
Execute(The XO options should be configurable):
|
||||
let b:ale_typescript_xo_options = '--wat'
|
||||
|
||||
AssertLinter 'xo', ale#Escape('xo') . ' --wat --reporter json --stdin --stdin-filename %s'
|
||||
0
test/eslint-test-files/react-app/node_modules/xo/cli.js
generated
vendored
Normal file
0
test/eslint-test-files/react-app/node_modules/xo/cli.js
generated
vendored
Normal file
0
test/eslint-test-files/react-app/subdir/testfile.ts
Normal file
0
test/eslint-test-files/react-app/subdir/testfile.ts
Normal file
@@ -1,11 +0,0 @@
|
||||
Before:
|
||||
call ale#assert#SetUpFixerTest('dhall', 'dhall')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownFixerTest()
|
||||
|
||||
Execute(The default command should be correct):
|
||||
AssertFixer
|
||||
\ { 'read_temporary_file': 1,
|
||||
\ 'command': ale#Escape('dhall') . ' format --inplace %t'
|
||||
\ }
|
||||
24
test/fixers/test_dhall_format_fixer_callback.vader
Normal file
24
test/fixers/test_dhall_format_fixer_callback.vader
Normal file
@@ -0,0 +1,24 @@
|
||||
Before:
|
||||
Save g:ale_dhall_executable
|
||||
Save g:ale_dhall_options
|
||||
|
||||
" Use an invalid global executable, so we don’t match it.
|
||||
let g:ale_dhall_executable = 'odd-dhall'
|
||||
let g:ale_dhall_options = '--ascii'
|
||||
|
||||
call ale#assert#SetUpFixerTest('dhall-format', 'dhall-format')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownFixerTest()
|
||||
|
||||
Execute(The dhall-format callback should return the correct options):
|
||||
call ale#test#SetFilename('../dhall_files/testfile.dhall')
|
||||
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'command': ale#Escape('odd-dhall')
|
||||
\ . ' --ascii'
|
||||
\ . ' format'
|
||||
\ . ' --inplace %t',
|
||||
\ 'read_temporary_file': 1,
|
||||
\ }
|
||||
24
test/fixers/test_dhall_freeze_fixer_callback.vader
Normal file
24
test/fixers/test_dhall_freeze_fixer_callback.vader
Normal file
@@ -0,0 +1,24 @@
|
||||
Before:
|
||||
Save g:ale_dhall_executable
|
||||
Save g:ale_dhall_options
|
||||
|
||||
" Use an invalid global executable, so we don’t match it.
|
||||
let g:ale_dhall_executable = 'odd-dhall'
|
||||
let g:ale_dhall_options = '--ascii'
|
||||
let g:ale_dhall_freeze_options = '--all'
|
||||
|
||||
call ale#assert#SetUpFixerTest('dhall-freeze', 'dhall-freeze')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownFixerTest()
|
||||
|
||||
Execute(The dhall-freeze callback should return the correct options):
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'command': ale#Escape('odd-dhall')
|
||||
\ . ' --ascii'
|
||||
\ . ' freeze'
|
||||
\ . ' --all'
|
||||
\ . ' --inplace %t',
|
||||
\ 'read_temporary_file': 1,
|
||||
\ }
|
||||
22
test/fixers/test_dhall_lint_fixer_callback.vader
Normal file
22
test/fixers/test_dhall_lint_fixer_callback.vader
Normal file
@@ -0,0 +1,22 @@
|
||||
Before:
|
||||
Save g:ale_dhall_executable
|
||||
Save g:ale_dhall_options
|
||||
|
||||
" Use an invalid global executable, so we don’t match it.
|
||||
let g:ale_dhall_executable = 'odd-dhall'
|
||||
let g:ale_dhall_options = '--ascii'
|
||||
|
||||
call ale#assert#SetUpFixerTest('dhall-lint', 'dhall-lint')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownFixerTest()
|
||||
|
||||
Execute(The dhall-lint callback should return the correct options):
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'command': ale#Escape('odd-dhall')
|
||||
\ . ' --ascii'
|
||||
\ . ' lint'
|
||||
\ . ' --inplace %t',
|
||||
\ 'read_temporary_file': 1,
|
||||
\ }
|
||||
@@ -5,6 +5,7 @@ Before:
|
||||
" Use an invalid global executable, so we don't match it.
|
||||
let g:ale_python_isort_executable = 'xxxinvalid'
|
||||
let g:ale_python_isort_options = ''
|
||||
let g:ale_python_isort_auto_pipenv = 0
|
||||
|
||||
call ale#test#SetDirectory('/testplugin/test/fixers')
|
||||
silent cd ..
|
||||
@@ -48,3 +49,12 @@ Execute(The isort callback should respect custom options):
|
||||
\ . ' --multi-line=3 --trailing-comma -',
|
||||
\ },
|
||||
\ ale#fixers#isort#Fix(bufnr(''))
|
||||
|
||||
Execute(Pipenv is detected when python_isort_auto_pipenv is set):
|
||||
let g:ale_python_isort_auto_pipenv = 1
|
||||
|
||||
call ale#test#SetFilename('/testplugin/test/python_fixtures/pipenv/whatever.py')
|
||||
|
||||
AssertEqual
|
||||
\ {'command': ale#path#BufferCdString(bufnr('')) . ale#Escape('pipenv') . ' run isort -'},
|
||||
\ ale#fixers#isort#Fix(bufnr(''))
|
||||
|
||||
@@ -21,9 +21,9 @@ Execute(The standardrb callback should return the correct default values):
|
||||
|
||||
AssertEqual
|
||||
\ {
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'process_with': 'ale#fixers#rubocop#PostProcess',
|
||||
\ 'command': ale#Escape(g:ale_ruby_standardrb_executable)
|
||||
\ . ' --fix --force-exclusion %t',
|
||||
\ . ' --fix --force-exclusion --stdin %s',
|
||||
\ },
|
||||
\ ale#fixers#standardrb#Fix(bufnr(''))
|
||||
|
||||
@@ -32,10 +32,10 @@ Execute(The standardrb callback should include configuration files):
|
||||
|
||||
AssertEqual
|
||||
\ {
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'process_with': 'ale#fixers#rubocop#PostProcess',
|
||||
\ 'command': ale#Escape(g:ale_ruby_standardrb_executable)
|
||||
\ . ' --config ' . ale#Escape(ale#path#Simplify(g:dir . '/ruby_paths/with_config/.standard.yml'))
|
||||
\ . ' --fix --force-exclusion %t',
|
||||
\ . ' --fix --force-exclusion --stdin %s',
|
||||
\ },
|
||||
\ ale#fixers#standardrb#Fix(bufnr(''))
|
||||
|
||||
@@ -45,10 +45,10 @@ Execute(The standardrb callback should include custom rubocop options):
|
||||
|
||||
AssertEqual
|
||||
\ {
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'process_with': 'ale#fixers#rubocop#PostProcess',
|
||||
\ 'command': ale#Escape(g:ale_ruby_standardrb_executable)
|
||||
\ . ' --config ' . ale#Escape(ale#path#Simplify(g:dir . '/ruby_paths/with_config/.standard.yml'))
|
||||
\ . ' --except Lint/Debugger'
|
||||
\ . ' --fix --force-exclusion %t',
|
||||
\ . ' --fix --force-exclusion --stdin %s',
|
||||
\ },
|
||||
\ ale#fixers#standardrb#Fix(bufnr(''))
|
||||
|
||||
45
test/fixers/test_xo_fixer_callback.vader
Normal file
45
test/fixers/test_xo_fixer_callback.vader
Normal file
@@ -0,0 +1,45 @@
|
||||
Before:
|
||||
call ale#assert#SetUpFixerTest('javascript', 'xo')
|
||||
runtime autoload/ale/handlers/xo.vim
|
||||
set filetype=javascript
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownFixerTest()
|
||||
|
||||
Execute(The xo callback should return the correct default values):
|
||||
call ale#test#SetFilename('../xo-test-files/monorepo/packages/a/index.js')
|
||||
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'command': (has('win32') ? 'node.exe ' : '')
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/../xo-test-files/monorepo/node_modules/xo/cli.js'))
|
||||
\ . ' --fix %t',
|
||||
\ }
|
||||
|
||||
Execute(The xo callback should include custom xo options):
|
||||
let g:ale_javascript_xo_options = '--space'
|
||||
call ale#test#SetFilename('../xo-test-files/monorepo/packages/a/index.js')
|
||||
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'command': (has('win32') ? 'node.exe ' : '')
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/../xo-test-files/monorepo/node_modules/xo/cli.js'))
|
||||
\ . ' --fix %t'
|
||||
\ . ' --space',
|
||||
\ }
|
||||
|
||||
Execute(--stdin should be used when xo is new enough):
|
||||
let g:ale_javascript_xo_options = '--space'
|
||||
call ale#test#SetFilename('../xo-test-files/monorepo/packages/a/index.js')
|
||||
|
||||
GivenCommandOutput ['0.30.0']
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'command': (has('win32') ? 'node.exe ' : '')
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/../xo-test-files/monorepo/node_modules/xo/cli.js'))
|
||||
\ . ' --stdin --stdin-filename %s'
|
||||
\ . ' --fix'
|
||||
\ . ' --space',
|
||||
\ }
|
||||
45
test/fixers/test_xots_fixer_callback.vader
Normal file
45
test/fixers/test_xots_fixer_callback.vader
Normal file
@@ -0,0 +1,45 @@
|
||||
Before:
|
||||
call ale#assert#SetUpFixerTest('typescript', 'xo')
|
||||
runtime autoload/ale/handlers/xo.vim
|
||||
set filetype=typescript
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownFixerTest()
|
||||
|
||||
Execute(The xo callback should return the correct default values):
|
||||
call ale#test#SetFilename('../xo-test-files/monorepo/packages/a/index.ts')
|
||||
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'command': (has('win32') ? 'node.exe ' : '')
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/../xo-test-files/monorepo/node_modules/xo/cli.js'))
|
||||
\ . ' --fix %t',
|
||||
\ }
|
||||
|
||||
Execute(The xo callback should include custom xo options):
|
||||
let g:ale_typescript_xo_options = '--space'
|
||||
call ale#test#SetFilename('../xo-test-files/monorepo/packages/a/index.ts')
|
||||
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'read_temporary_file': 1,
|
||||
\ 'command': (has('win32') ? 'node.exe ' : '')
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/../xo-test-files/monorepo/node_modules/xo/cli.js'))
|
||||
\ . ' --fix %t'
|
||||
\ . ' --space',
|
||||
\ }
|
||||
|
||||
Execute(--stdin should be used when xo is new enough):
|
||||
let g:ale_typescript_xo_options = '--space'
|
||||
call ale#test#SetFilename('../xo-test-files/monorepo/packages/a/index.ts')
|
||||
|
||||
GivenCommandOutput ['0.30.0']
|
||||
AssertFixer
|
||||
\ {
|
||||
\ 'command': (has('win32') ? 'node.exe ' : '')
|
||||
\ . ale#Escape(ale#path#Simplify(g:dir . '/../xo-test-files/monorepo/node_modules/xo/cli.js'))
|
||||
\ . ' --stdin --stdin-filename %s'
|
||||
\ . ' --fix'
|
||||
\ . ' --space',
|
||||
\ }
|
||||
85
test/handler/test_atools_handler.vader
Normal file
85
test/handler/test_atools_handler.vader
Normal file
@@ -0,0 +1,85 @@
|
||||
Before:
|
||||
runtime autoload/ale/handlers/atools.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(The atools handler should handle basic errors or warings):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 2,
|
||||
\ 'text': 'trailing whitespace',
|
||||
\ 'type': 'E',
|
||||
\ 'code': 'AL8',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 15,
|
||||
\ 'text': '$pkgname should not be used in the source url',
|
||||
\ 'type': 'W',
|
||||
\ 'code': 'AL29',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale#handlers#atools#Handle(bufnr(''), [
|
||||
\ 'IC:[AL8]:APKBUILD:2:trailing whitespace',
|
||||
\ 'MC:[AL29]:APKBUILD:15:$pkgname should not be used in the source url',
|
||||
\ ])
|
||||
|
||||
" Regardless of the severity, if the certainty is [P]ossible and not [C]ertain
|
||||
" or if regardless of the Certainity the Severity is not [I]mportant or [S]erious
|
||||
" then it must be a [W]arning
|
||||
Execute(If we are not Certain or Importantly Serious, be a Warning):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 3,
|
||||
\ 'text': 'This violation is Serious but Possible false positive, I am a Warning!',
|
||||
\ 'type': 'W',
|
||||
\ 'code': 'AL',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 4,
|
||||
\ 'text': 'This violation is Important but Possible false positive, I am a Warning!',
|
||||
\ 'type': 'W',
|
||||
\ 'code': 'AL',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 5,
|
||||
\ 'text': 'This violation is Minor, I am a Warning!',
|
||||
\ 'type': 'W',
|
||||
\ 'code': 'AL',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 6,
|
||||
\ 'text': 'This violation is Style, I am a Warning!',
|
||||
\ 'type': 'W',
|
||||
\ 'code': 'AL',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale#handlers#atools#Handle(bufnr(''), [
|
||||
\ 'SP:[AL]:APKBUILD:3:This violation is Serious but Possible false positive, I am a Warning!',
|
||||
\ 'IP:[AL]:APKBUILD:4:This violation is Important but Possible false positive, I am a Warning!',
|
||||
\ 'MC:[AL]:APKBUILD:5:This violation is Minor, I am a Warning!',
|
||||
\ 'TC:[AL]:APKBUILD:6:This violation is Style, I am a Warning!',
|
||||
\ ])
|
||||
|
||||
Execute(We should be error if we are Certain it is Serious or Important):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 7,
|
||||
\ 'text': 'This is Certainly Serious, I am an Error!',
|
||||
\ 'type': 'E',
|
||||
\ 'code': 'AL',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 8,
|
||||
\ 'text': 'This is Certainly Important, I am an Error!',
|
||||
\ 'type': 'E',
|
||||
\ 'code': 'AL',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale#handlers#atools#Handle(bufnr(''), [
|
||||
\ 'SC:[AL]:APKBUILD:7:This is Certainly Serious, I am an Error!',
|
||||
\ 'IC:[AL]:APKBUILD:8:This is Certainly Important, I am an Error!',
|
||||
\ ])
|
||||
@@ -8,21 +8,29 @@ Execute(The Dafny handler should parse output correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'bufnr': 0,
|
||||
\ 'filename': 'File.dfy',
|
||||
\ 'col': 45,
|
||||
\ 'lnum': 123,
|
||||
\ 'text': 'A precondition for this call might not hold.',
|
||||
\ 'type': 'E'
|
||||
\ },
|
||||
\ {
|
||||
\ 'bufnr': 0,
|
||||
\ 'filename': 'File.dfy',
|
||||
\ 'col': 90,
|
||||
\ 'lnum': 678,
|
||||
\ 'text': 'This is the precondition that might not hold.',
|
||||
\ 'type': 'W'
|
||||
\ }
|
||||
\ },
|
||||
\ {
|
||||
\ 'bufnr': 0,
|
||||
\ 'col': 45,
|
||||
\ 'lnum': 123,
|
||||
\ 'text': "Verification of 'Impl$$_22_Proof.__default.PutKeepsMapsFull' timed out after 2 seconds",
|
||||
\ 'type': 'E'
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#dafny#dafny#Handle(0, [
|
||||
\ 'File.dfy(123,45): Error BP5002: A precondition for this call might not hold.',
|
||||
\ 'File.dfy(678,90): Related location: This is the precondition that might not hold.'
|
||||
\ 'File.dfy(678,90): Related location: This is the precondition that might not hold.',
|
||||
\ "File.dfy(123,45): Verification of 'Impl$$_22_Proof.__default.PutKeepsMapsFull' timed out after 2 seconds",
|
||||
\ ])
|
||||
|
||||
49
test/handler/test_ibm_openapi_validator_handler.vader
Normal file
49
test/handler/test_ibm_openapi_validator_handler.vader
Normal file
@@ -0,0 +1,49 @@
|
||||
Before:
|
||||
runtime! ale_linters/openapi/ibm_validator.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(Problems should be parsed correctly for openapi-ibm-validator):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 54,
|
||||
\ 'col': 0,
|
||||
\ 'type': 'E',
|
||||
\ 'text': 'Items with a description must have content in it.',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 24,
|
||||
\ 'col': 0,
|
||||
\ 'type': 'W',
|
||||
\ 'text': 'Operations must have a non-empty `operationId`.',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 40,
|
||||
\ 'col': 0,
|
||||
\ 'type': 'W',
|
||||
\ 'text': 'operationIds must follow case convention: lower_snake_case',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#openapi#ibm_validator#Handle(bufnr(''), [
|
||||
\ '',
|
||||
\ '[Warning] No .validaterc file found. The validator will run in default mode.',
|
||||
\ 'To configure the validator, create a .validaterc file.',
|
||||
\ '',
|
||||
\ 'errors',
|
||||
\ '',
|
||||
\ ' Message : Items with a description must have content in it.',
|
||||
\ ' Path : paths./settings.patch.description',
|
||||
\ ' Line : 54',
|
||||
\ '',
|
||||
\ 'warnings',
|
||||
\ '',
|
||||
\ ' Message : Operations must have a non-empty `operationId`.',
|
||||
\ ' Path : paths./stats.get.operationId',
|
||||
\ ' Line : 24',
|
||||
\ '',
|
||||
\ ' Message : operationIds must follow case convention: lower_snake_case',
|
||||
\ ' Path : paths./settings.get.operationId',
|
||||
\ ' Line : 40'
|
||||
\ ])
|
||||
54
test/handler/test_inko_handler.vader
Normal file
54
test/handler/test_inko_handler.vader
Normal file
@@ -0,0 +1,54 @@
|
||||
Before:
|
||||
runtime ale_linters/inko/inko.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(The inko handler should parse errors correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'filename': ale#path#Simplify('/tmp/foo.inko'),
|
||||
\ 'lnum': 4,
|
||||
\ 'col': 5,
|
||||
\ 'text': 'this is an error',
|
||||
\ 'type': 'E',
|
||||
\ }
|
||||
\ ],
|
||||
\ ale#handlers#inko#Handle(bufnr(''), [
|
||||
\ '[',
|
||||
\ ' {',
|
||||
\ ' "file": "/tmp/foo.inko",',
|
||||
\ ' "line": 4,',
|
||||
\ ' "column": 5,',
|
||||
\ ' "message": "this is an error",',
|
||||
\ ' "level": "error"',
|
||||
\ ' }',
|
||||
\ ']'
|
||||
\ ])
|
||||
|
||||
Execute(The inko handler should parse warnings correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'filename': ale#path#Simplify('/tmp/foo.inko'),
|
||||
\ 'lnum': 4,
|
||||
\ 'col': 5,
|
||||
\ 'text': 'this is a warning',
|
||||
\ 'type': 'W',
|
||||
\ }
|
||||
\ ],
|
||||
\ ale#handlers#inko#Handle(bufnr(''), [
|
||||
\ '[',
|
||||
\ ' {',
|
||||
\ ' "file": "/tmp/foo.inko",',
|
||||
\ ' "line": 4,',
|
||||
\ ' "column": 5,',
|
||||
\ ' "message": "this is a warning",',
|
||||
\ ' "level": "warning"',
|
||||
\ ' }',
|
||||
\ ']'
|
||||
\ ])
|
||||
|
||||
Execute(The inko handler should handle empty output):
|
||||
AssertEqual [], ale#handlers#inko#Handle(bufnr(''), [])
|
||||
34
test/handler/test_salt_salt_lint.vader
Normal file
34
test/handler/test_salt_salt_lint.vader
Normal file
@@ -0,0 +1,34 @@
|
||||
Before:
|
||||
runtime ale_linters/salt/salt_lint.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(The salt handler should parse lines correctly and show error in severity HIGH):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 5,
|
||||
\ 'code': 207,
|
||||
\ 'text': 'File modes should always be encapsulated in quotation marks',
|
||||
\ 'type': 'E'
|
||||
\ }
|
||||
\ ],
|
||||
\ ale_linters#salt#salt_lint#Handle(255, [
|
||||
\ '[{"id": "207", "message": "File modes should always be encapsulated in quotation marks", "filename": "test.sls", "linenumber": 5, "line": " - mode: 0755", "severity": "HIGH"}]'
|
||||
\ ])
|
||||
|
||||
|
||||
Execute(The salt handler should parse lines correctly and show error in severity not HIGH):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 27,
|
||||
\ 'code': 204,
|
||||
\ 'text': 'Lines should be no longer that 160 chars',
|
||||
\ 'type': 'W'
|
||||
\ }
|
||||
\ ],
|
||||
\ ale_linters#salt#salt_lint#Handle(255, [
|
||||
\ '[{"id": "204", "message": "Lines should be no longer that 160 chars", "filename": "test2.sls", "linenumber": 27, "line": "this line is definitely longer than 160 chars, this line is definitely longer than 160 chars, this line is definitely longer than 160 chars", "severity": "VERY_LOW"}]'
|
||||
\ ])
|
||||
52
test/handler/test_spectral_handler.vader
Normal file
52
test/handler/test_spectral_handler.vader
Normal file
@@ -0,0 +1,52 @@
|
||||
Before:
|
||||
runtime ale_linters/yaml/spectral.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(spectral handler should parse lines correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 1,
|
||||
\ 'col': 1,
|
||||
\ 'code': 'oas3-api-servers',
|
||||
\ 'text': 'OpenAPI `servers` must be present and non-empty array.',
|
||||
\ 'type': 'W'
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 1,
|
||||
\ 'col': 1,
|
||||
\ 'code': 'oas3-schema',
|
||||
\ 'text': 'Object should have required property `paths`.',
|
||||
\ 'type': 'E'
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 1,
|
||||
\ 'col': 1,
|
||||
\ 'code': 'openapi-tags',
|
||||
\ 'text': 'OpenAPI object should have non-empty `tags` array.',
|
||||
\ 'type': 'W'
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 3,
|
||||
\ 'col': 6,
|
||||
\ 'code': 'info-contact',
|
||||
\ 'text': 'Info object should contain `contact` object.',
|
||||
\ 'type': 'W'
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 3,
|
||||
\ 'col': 6,
|
||||
\ 'code': 'oas3-schema',
|
||||
\ 'text': '`info` property should have required property `version`.',
|
||||
\ 'type': 'E'
|
||||
\ },
|
||||
\ ],
|
||||
\ ale#handlers#spectral#HandleSpectralOutput(bufnr(''), [
|
||||
\ 'openapi.yml:1:1 warning oas3-api-servers "OpenAPI `servers` must be present and non-empty array."',
|
||||
\ 'openapi.yml:1:1 error oas3-schema "Object should have required property `paths`."',
|
||||
\ 'openapi.yml:1:1 warning openapi-tags "OpenAPI object should have non-empty `tags` array."',
|
||||
\ 'openapi.yml:3:6 warning info-contact "Info object should contain `contact` object."',
|
||||
\ 'openapi.yml:3:6 error oas3-schema "`info` property should have required property `version`."',
|
||||
\ ])
|
||||
54
test/handler/test_vala_lint_handler.vader
Normal file
54
test/handler/test_vala_lint_handler.vader
Normal file
@@ -0,0 +1,54 @@
|
||||
Before:
|
||||
runtime ale_linters/vala/vala_lint.vim
|
||||
|
||||
After:
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(The Vala-Lint handler should parse lines correctly):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 18,
|
||||
\ 'col': 18,
|
||||
\ 'text': 'Expected space before paren',
|
||||
\ 'code': 'space-before-paren',
|
||||
\ 'type': 'E',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 64,
|
||||
\ 'col': 37,
|
||||
\ 'text': 'Expected space before paren',
|
||||
\ 'code': 'space-before-paren',
|
||||
\ 'type': 'W',
|
||||
\ },
|
||||
\ {
|
||||
\ 'lnum': 73,
|
||||
\ 'col': 37,
|
||||
\ 'text': 'Expected space before paren',
|
||||
\ 'code': 'space-before-paren',
|
||||
\ 'type': 'E',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#vala#vala_lint#Handle(bufnr(''), [
|
||||
\ 'Application.vala',
|
||||
\ ' 18.18 error Expected space before paren space-before-paren',
|
||||
\ ' 64.37 warn Expected space before paren space-before-paren',
|
||||
\ ' 73.37 error Expected space before paren space-before-paren',
|
||||
\ ])
|
||||
|
||||
Execute(The Vala-Lint handler should ignore unknown error types):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ {
|
||||
\ 'lnum': 73,
|
||||
\ 'col': 37,
|
||||
\ 'text': 'Expected space before paren',
|
||||
\ 'code': 'space-before-paren',
|
||||
\ 'type': 'E',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#vala#vala_lint#Handle(bufnr(''), [
|
||||
\ 'Application.vala',
|
||||
\ ' 18.18 test Expected space before paren space-before-paren',
|
||||
\ ' 73.37 error Expected space before paren space-before-paren',
|
||||
\ ])
|
||||
@@ -3,7 +3,7 @@ Before:
|
||||
|
||||
let g:ale_warn_about_trailing_whitespace = 1
|
||||
|
||||
runtime! ale_linters/yaml/yamllint.vim
|
||||
runtime! ale/handlers/yamllint.vim
|
||||
|
||||
After:
|
||||
Restore
|
||||
@@ -29,7 +29,7 @@ Execute(Problems should be parsed correctly for yamllint):
|
||||
\ 'text': 'syntax error: expected the node content, but found ''<stream end>''',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#yaml#yamllint#Handle(bufnr(''), [
|
||||
\ ale#handlers#yamllint#Handle(bufnr(''), [
|
||||
\ 'something.yaml:1:1: [warning] missing document start "---" (document-start)',
|
||||
\ 'something.yml:2:1: [error] syntax error: expected the node content, but found ''<stream end>''',
|
||||
\ ])
|
||||
@@ -45,7 +45,7 @@ Execute(The yamllint handler should respect ale_warn_about_trailing_whitespace):
|
||||
\ 'code': 'trailing-spaces',
|
||||
\ },
|
||||
\ ],
|
||||
\ ale_linters#yaml#yamllint#Handle(bufnr(''), [
|
||||
\ ale#handlers#yamllint#Handle(bufnr(''), [
|
||||
\ 'something.yml:5:18: [error] trailing spaces (trailing-spaces)',
|
||||
\ ])
|
||||
|
||||
@@ -54,6 +54,6 @@ Execute(The yamllint handler should respect ale_warn_about_trailing_whitespace):
|
||||
AssertEqual
|
||||
\ [
|
||||
\ ],
|
||||
\ ale_linters#yaml#yamllint#Handle(bufnr(''), [
|
||||
\ ale#handlers#yamllint#Handle(bufnr(''), [
|
||||
\ 'something.yml:5:18: [error] trailing spaces (trailing-spaces)',
|
||||
\ ])
|
||||
|
||||
0
test/nix/test.nix
Normal file
0
test/nix/test.nix
Normal file
14
test/nix/test_rnix_lsp.vader
Normal file
14
test/nix/test_rnix_lsp.vader
Normal file
@@ -0,0 +1,14 @@
|
||||
" Author: jD91mZM2 <me@krake.one>
|
||||
" Description: Tests for rnix-lsp language client
|
||||
|
||||
Before:
|
||||
call ale#assert#SetUpLinterTest('nix', 'rnix_lsp')
|
||||
|
||||
After:
|
||||
call ale#assert#TearDownLinterTest()
|
||||
|
||||
Execute(should start rnix-lsp):
|
||||
call ale#test#SetFilename('./test.nix')
|
||||
AssertLSPLanguage 'nix'
|
||||
AssertLSPOptions {}
|
||||
AssertLSPProject ale#path#Simplify('.')
|
||||
5
test/script/check-duplicate-tags
Executable file
5
test/script/check-duplicate-tags
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
grep --exclude=tags -roh '\*.*\*$' doc | sort | uniq -d
|
||||
@@ -15,14 +15,13 @@ while read -r; do
|
||||
if [[ "$REPLY" =~ ^! ]]; then
|
||||
language="${REPLY/!/}"
|
||||
else
|
||||
# shellcheck disable=SC2001
|
||||
echo "$language - $REPLY"
|
||||
fi
|
||||
done < <(
|
||||
grep '^\*\|^ *\*' doc/ale-supported-languages-and-tools.txt \
|
||||
| sed -e '1,2d' \
|
||||
| sed 's/^\* */!/' \
|
||||
| sed 's/^ *\* *\|!!\|\^\|(.*)\|`//g' \
|
||||
| sed -E 's/^ *\* *|!!|\^|\(.*\)|`//g' \
|
||||
| sed 's/ *$//'
|
||||
) > "$doc_file"
|
||||
|
||||
@@ -30,13 +29,12 @@ while read -r; do
|
||||
if [[ "$REPLY" =~ ^! ]]; then
|
||||
language="${REPLY/!/}"
|
||||
else
|
||||
# shellcheck disable=SC2001
|
||||
echo "$language - $REPLY"
|
||||
fi
|
||||
done < <(
|
||||
grep '^\*\|^ *\*' supported-tools.md \
|
||||
| sed 's/^\* */!/' \
|
||||
| sed 's/^ *\* *\|:floppy_disk:\|:warning:\|(.*)\|\[\|\].*\|-n flag//g' \
|
||||
| sed -E 's/^ *\* *|:floppy_disk:|:warning:|\(.*\)|\[|\].*|-n flag//g' \
|
||||
| sed 's/ *$//'
|
||||
) > "$readme_file"
|
||||
|
||||
|
||||
11
test/script/check-tag-alignment
Executable file
11
test/script/check-tag-alignment
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
exit_code=0
|
||||
|
||||
# Documentation tags need to be aligned to the right margin, so look for
|
||||
# tags which aren't at the right margin.
|
||||
grep ' \*[^*]\+\*$' doc/ -r \
|
||||
| awk '{ sep = index($0, ":"); if (length(substr($0, sep + 1 )) < 79) { print } }' \
|
||||
| grep . && exit_code=1
|
||||
|
||||
exit $exit_code
|
||||
22
test/script/check-tag-references
Executable file
22
test/script/check-tag-references
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
exit_code=0
|
||||
tag_regex='[gb]\?:\?\(ale\|ALE\)[a-zA-Z_\-]\+'
|
||||
|
||||
tags="$(mktemp -t tags.XXXXXXXX)"
|
||||
refs="$(mktemp -t refs.XXXXXXXX)"
|
||||
# Grep for tags and references, and complain if we find a reference without
|
||||
# a tag for the reference. Only our tags will be included.
|
||||
grep --exclude=tags -roh "\\*$tag_regex\\*" doc | sed 's/*//g' | sort -u > "$tags"
|
||||
grep --exclude=tags -roh "|$tag_regex|" doc | sed 's/|//g' | sort -u > "$refs"
|
||||
|
||||
exit_code=0
|
||||
|
||||
if ! [[ $(comm -23 $refs $tags | wc -l) -eq 0 ]]; then
|
||||
exit_code=1
|
||||
fi
|
||||
|
||||
rm "$tags"
|
||||
rm "$refs"
|
||||
@@ -35,7 +35,7 @@ sed -n "$toc_start_line,$toc_end_line"p doc/ale.txt \
|
||||
> "$toc_file"
|
||||
|
||||
# Get all of the doc files in a natural sorted order.
|
||||
doc_files="$(/usr/bin/env ls -1v doc | grep ^ale- | sed 's/^/doc\//' | paste -sd ' ' -)"
|
||||
doc_files="$(/usr/bin/env ls -1v doc | grep '^ale-' | sed 's/^/doc\//' | paste -sd ' ' -)"
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
grep -h '\*ale-.*-options\|^[a-z].*\*ale-.*\*$' $doc_files \
|
||||
|
||||
@@ -13,7 +13,7 @@ echo 'Custom warnings/errors follow:'
|
||||
echo
|
||||
|
||||
set -o pipefail
|
||||
docker run -a stdout "${docker_flags[@]}" test/script/custom-linting-rules . || exit_code=$?
|
||||
docker run "${docker_flags[@]}" test/script/custom-linting-rules . || exit_code=$?
|
||||
set +o pipefail
|
||||
echo
|
||||
|
||||
@@ -23,7 +23,10 @@ echo '========================================'
|
||||
echo 'Duplicate tags follow:'
|
||||
echo
|
||||
|
||||
grep --exclude=tags -roh '\*.*\*$' doc | sort | uniq -d || exit_code=$?
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-duplicate-tags . || exit_code=$?
|
||||
set +o pipefail
|
||||
echo
|
||||
|
||||
echo '========================================'
|
||||
echo 'Checking for invalid tag references'
|
||||
@@ -31,14 +34,9 @@ echo '========================================'
|
||||
echo 'Invalid tag references tags follow:'
|
||||
echo
|
||||
|
||||
tag_regex='[gb]\?:\?\(ale\|ALE\)[a-zA-Z_\-]\+'
|
||||
|
||||
# Grep for tags and references, and complain if we find a reference without
|
||||
# a tag for the reference. Only our tags will be included.
|
||||
diff -u \
|
||||
<(grep --exclude=tags -roh "\\*$tag_regex\\*" doc | sort -u | sed 's/*//g') \
|
||||
<(grep --exclude=tags -roh "|$tag_regex|" doc | sort -u | sed 's/|//g') \
|
||||
| grep '^+[^+]' && exit_code=1
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-tag-references || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'diff supported-tools.md and doc/ale-supported-languages-and-tools.txt tables'
|
||||
@@ -46,7 +44,9 @@ echo '========================================'
|
||||
echo 'Differences follow:'
|
||||
echo
|
||||
|
||||
test/script/check-supported-tools-tables || exit_code=$?
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-supported-tools-tables || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'Look for badly aligned doc tags'
|
||||
@@ -54,18 +54,18 @@ echo '========================================'
|
||||
echo 'Badly aligned tags follow:'
|
||||
echo
|
||||
|
||||
# Documentation tags need to be aligned to the right margin, so look for
|
||||
# tags which aren't at the right margin.
|
||||
grep ' \*[^*]\+\*$' doc/ -r \
|
||||
| awk '{ sep = index($0, ":"); if (length(substr($0, sep + 1 )) < 79) { print } }' \
|
||||
| grep . && exit_code=1
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-tag-alignment || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'Look for table of contents issues'
|
||||
echo '========================================'
|
||||
echo
|
||||
|
||||
test/script/check-toc || exit_code=$?
|
||||
set -o pipefail
|
||||
docker run "${docker_flags[@]}" test/script/check-toc || exit_code=$?
|
||||
set +o pipefail
|
||||
|
||||
echo '========================================'
|
||||
echo 'Check Python code'
|
||||
|
||||
@@ -53,17 +53,29 @@ check_errors() {
|
||||
regex="$1"
|
||||
message="$2"
|
||||
include_arg=''
|
||||
exclude_arg=''
|
||||
|
||||
if [ $# -gt 2 ]; then
|
||||
include_arg="--include $3"
|
||||
fi
|
||||
|
||||
if [ $# -gt 3 ]; then
|
||||
shift
|
||||
shift
|
||||
shift
|
||||
|
||||
while (( "$#" )); do
|
||||
exclude_arg="$exclude_arg --exclude $1"
|
||||
shift
|
||||
done
|
||||
fi
|
||||
|
||||
for directory in "${directories[@]}"; do
|
||||
# shellcheck disable=SC2086
|
||||
while read -r; do
|
||||
RETURN_CODE=1
|
||||
echo "$REPLY $message"
|
||||
done < <(grep -H -n "$regex" $include_arg "$directory"/**/*.vim \
|
||||
done < <(grep -H -n "$regex" $include_arg $exclude_arg "$directory"/**/*.vim \
|
||||
| grep -v 'no-custom-checks' \
|
||||
| grep -o '^[^:]\+:[0-9]\+' \
|
||||
| sed 's:^\./::')
|
||||
@@ -92,7 +104,7 @@ if (( FIX_ERRORS )); then
|
||||
done
|
||||
fi
|
||||
|
||||
# The arguments are: regex, explanation, [filename_filter]
|
||||
# The arguments are: regex, explanation, [filename_filter], [list, of, exclusions]
|
||||
check_errors \
|
||||
'^function.*) *$' \
|
||||
'Function without abort keyword (See :help except-compat)'
|
||||
@@ -114,7 +126,10 @@ check_errors '==?' "Use 'is?' instead of '==?'. 0 ==? 'foobar' is true"
|
||||
check_errors '!=#' "Use 'isnot#' instead of '!=#'. 0 !=# 'foobar' is false"
|
||||
check_errors '!=?' "Use 'isnot?' instead of '!=?'. 0 !=? 'foobar' is false"
|
||||
check_errors '^ *:\?echo' "Stray echo line. Use \`execute echo\` if you want to echo something"
|
||||
check_errors $'name.:.*\'[a-z_]*[^a-z_0-9][a-z_0-9]*\',$' 'Use snake_case names for linters' '*/ale_linters/*'
|
||||
# Exclusions for grandfathered-in exceptions
|
||||
exclusions="clojure/clj_kondo.vim elixir/elixir_ls.vim go/golangci_lint.vim swift/swiftformat.vim"
|
||||
# shellcheck disable=SC2086
|
||||
check_errors $'name.:.*\'[a-z_]*[^a-z_0-9][a-z_0-9]*\',$' 'Use snake_case names for linters' '*/ale_linters/*' $exclusions
|
||||
# Checks for improving type checks.
|
||||
check_errors $'\\(==.\\?\\|is\\) type([\'"]\+)' "Use 'is v:t_string' instead"
|
||||
check_errors '\(==.\?\|is\) type([0-9]\+)' "Use 'is v:t_number' instead"
|
||||
|
||||
@@ -482,6 +482,7 @@ Execute(We should include several important flags):
|
||||
\ . ' -idirafter ' . ale#Escape(ale#path#Simplify(g:dir. '/test_c_projects/makefile_project/incafter'))
|
||||
\ . ' -iframework ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/incframework'))
|
||||
\ . ' -include ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/foo bar'))
|
||||
\ . ' -imacros ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/incmacros'))
|
||||
\ . ' -Dmacro="value"'
|
||||
\ . ' -DGoal=9'
|
||||
\ . ' -D macro2'
|
||||
@@ -511,6 +512,8 @@ Execute(We should include several important flags):
|
||||
\ 'incframework',
|
||||
\ '-include',
|
||||
\ '''foo bar''',
|
||||
\ '-imacros',
|
||||
\ 'incmacros',
|
||||
\ '-Dmacro="value"',
|
||||
\ '-DGoal=9',
|
||||
\ '-D',
|
||||
@@ -559,6 +562,7 @@ Execute(We should quote the flags we need to quote):
|
||||
\ . ' -idirafter ' . ale#Escape(ale#path#Simplify(g:dir. '/test_c_projects/makefile_project/incafter'))
|
||||
\ . ' -iframework ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/incframework'))
|
||||
\ . ' -include ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/foo bar'))
|
||||
\ . ' -imacros ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/incmacros'))
|
||||
\ . ' ' . ale#Escape('-Dmacro="value"')
|
||||
\ . ' -DGoal=9'
|
||||
\ . ' -D macro2'
|
||||
@@ -591,6 +595,8 @@ Execute(We should quote the flags we need to quote):
|
||||
\ 'incframework',
|
||||
\ '-include',
|
||||
\ '''foo bar''',
|
||||
\ '-imacros',
|
||||
\ 'incmacros',
|
||||
\ '-Dmacro="value"',
|
||||
\ '-DGoal=9',
|
||||
\ '-D',
|
||||
|
||||
19
test/test_deno_executable_detection.vader
Normal file
19
test/test_deno_executable_detection.vader
Normal file
@@ -0,0 +1,19 @@
|
||||
Before:
|
||||
runtime autoload/ale/handlers/deno.vim
|
||||
|
||||
After:
|
||||
unlet! g:ale_deno_executable
|
||||
|
||||
call ale#linter#Reset()
|
||||
|
||||
Execute(Default executable should be detected correctly):
|
||||
AssertEqual
|
||||
\ 'deno',
|
||||
\ ale#handlers#deno#GetExecutable(bufnr(''))
|
||||
|
||||
Execute(User specified executable should override default):
|
||||
let g:ale_deno_executable = '/path/to/deno-bin'
|
||||
AssertEqual
|
||||
\ '/path/to/deno-bin',
|
||||
\ ale#handlers#deno#GetExecutable(bufnr(''))
|
||||
|
||||
@@ -70,3 +70,10 @@ Execute(The defaults for the verilog filetype should be correct):
|
||||
Execute(Default aliases for React should be defined):
|
||||
AssertEqual ['javascript', 'jsx'], ale#linter#ResolveFiletype('javascriptreact')
|
||||
AssertEqual ['typescript', 'tsx'], ale#linter#ResolveFiletype('typescriptreact')
|
||||
|
||||
Execute(The defaults for the apkbuild filetype should be correct):
|
||||
AssertEqual ['apkbuild_lint', 'secfixes_check'], GetLinterNames('apkbuild')
|
||||
|
||||
let g:ale_linters_explicit = 1
|
||||
|
||||
AssertEqual [], GetLinterNames('apkbuild')
|
||||
|
||||
92
test/test_floating_preview.vader
Normal file
92
test/test_floating_preview.vader
Normal file
@@ -0,0 +1,92 @@
|
||||
Before:
|
||||
let g:ale_floating_preview = 0
|
||||
let g:ale_hover_to_floating_preview = 0
|
||||
let g:ale_detail_to_floating_preview = 0
|
||||
|
||||
runtime autoload/ale/floating_preview.vim
|
||||
|
||||
let g:floated_lines = []
|
||||
let g:floating_preview_show_called = 0
|
||||
|
||||
" Stub out so we can track the call
|
||||
function! ale#floating_preview#Show(lines, ...) abort
|
||||
let g:floating_preview_show_called = 1
|
||||
let g:floated_lines = a:lines
|
||||
endfunction
|
||||
|
||||
let g:ale_buffer_info = {
|
||||
\ bufnr('%'): {
|
||||
\ 'loclist': [
|
||||
\ {
|
||||
\ 'lnum': 1,
|
||||
\ 'col': 10,
|
||||
\ 'bufnr': bufnr('%'),
|
||||
\ 'vcol': 0,
|
||||
\ 'linter_name': 'notalinter',
|
||||
\ 'nr': -1,
|
||||
\ 'type': 'E',
|
||||
\ 'code': 'semi',
|
||||
\ 'text': "Missing semicolon.\r",
|
||||
\ 'detail': "Every statement should end with a semicolon\nsecond line",
|
||||
\ },
|
||||
\ ],
|
||||
\ }
|
||||
\}
|
||||
|
||||
call ale#linter#Reset()
|
||||
call ale#linter#PreventLoading('javascript')
|
||||
|
||||
After:
|
||||
Restore
|
||||
|
||||
let g:ale_floating_preview = 0
|
||||
let g:ale_hover_to_floating_preview = 0
|
||||
let g:ale_detail_to_floating_preview = 0
|
||||
|
||||
call cursor(1, 1)
|
||||
|
||||
let g:ale_buffer_info = {}
|
||||
|
||||
" Close the preview window if it's open.
|
||||
if &filetype is# 'ale-preview'
|
||||
noautocmd :q!
|
||||
endif
|
||||
|
||||
call ale#linter#Reset()
|
||||
|
||||
|
||||
Given javascript(A file with warnings/errors):
|
||||
var x = 3 + 12345678
|
||||
var x = 5*2 + parseInt("10");
|
||||
// comment
|
||||
|
||||
Execute(Floating preview is used with ALEDetail when g:ale_floating_preview set):
|
||||
let g:ale_floating_preview = 1
|
||||
|
||||
call cursor(1, 10)
|
||||
|
||||
ALEDetail
|
||||
|
||||
let expected = ["Every statement should end with a semicolon", "second line"]
|
||||
|
||||
AssertEqual 1, g:floating_preview_show_called
|
||||
AssertEqual expected, g:floated_lines
|
||||
|
||||
Execute(Floating preview is used with ALEDetail when g:ale_detail_to_floating_preview set):
|
||||
let g:ale_detail_to_floating_preview = 1
|
||||
|
||||
call cursor(1, 10)
|
||||
|
||||
ALEDetail
|
||||
|
||||
let expected = ["Every statement should end with a semicolon", "second line"]
|
||||
|
||||
AssertEqual 1, g:floating_preview_show_called
|
||||
AssertEqual expected, g:floated_lines
|
||||
|
||||
Execute(Floating preview is not used with ALEDetail by default):
|
||||
call cursor(1, 10)
|
||||
|
||||
ALEDetail
|
||||
|
||||
AssertEqual 0, g:floating_preview_show_called
|
||||
@@ -7,9 +7,25 @@ Before:
|
||||
let g:item_list = []
|
||||
let g:show_message_arg_list = []
|
||||
|
||||
let g:ale_floating_preview = 0
|
||||
let g:ale_hover_to_floating_preview = 0
|
||||
let g:ale_detail_to_floating_preview = 0
|
||||
|
||||
runtime autoload/ale/linter.vim
|
||||
runtime autoload/ale/lsp.vim
|
||||
runtime autoload/ale/lsp_linter.vim
|
||||
runtime autoload/ale/util.vim
|
||||
runtime autoload/ale/floating_preview.vim
|
||||
runtime autoload/ale/hover.vim
|
||||
|
||||
let g:floated_lines = []
|
||||
let g:floating_preview_show_called = 0
|
||||
|
||||
" Stub out so we can track the call
|
||||
function! ale#floating_preview#Show(lines, ...) abort
|
||||
let g:floating_preview_show_called = 1
|
||||
let g:floated_lines = a:lines
|
||||
endfunction
|
||||
|
||||
function! ale#lsp_linter#StartLSP(buffer, linter, callback) abort
|
||||
let g:Callback = a:callback
|
||||
@@ -50,6 +66,7 @@ Before:
|
||||
\)
|
||||
endfunction
|
||||
|
||||
|
||||
After:
|
||||
call ale#hover#SetMap({})
|
||||
call ale#test#RestoreDirectory()
|
||||
@@ -65,6 +82,7 @@ After:
|
||||
runtime autoload/ale/lsp_linter.vim
|
||||
runtime autoload/ale/lsp.vim
|
||||
runtime autoload/ale/util.vim
|
||||
runtime autoload/ale/floating_preview.vim
|
||||
|
||||
Given python(Some Python file):
|
||||
foo
|
||||
@@ -168,6 +186,28 @@ Execute(LSP hover response with lists of strings and marked strings should be ha
|
||||
\], g:show_message_arg_list
|
||||
AssertEqual {}, ale#hover#GetMap()
|
||||
|
||||
Execute(LSP hover with ale_floating_preview should float):
|
||||
let g:ale_floating_preview = 1
|
||||
|
||||
call HandleValidLSPResult({'contents': "the message\ncontinuing"})
|
||||
|
||||
AssertEqual 1, g:floating_preview_show_called
|
||||
AssertEqual ["the message", "continuing"], g:floated_lines
|
||||
|
||||
Execute(LSP hover ale_hover_to_floating_preview should float):
|
||||
let g:ale_hover_to_floating_preview = 1
|
||||
|
||||
call HandleValidLSPResult({'contents': "the message\ncontinuing"})
|
||||
|
||||
AssertEqual 1, g:floating_preview_show_called
|
||||
AssertEqual ["the message", "continuing"], g:floated_lines
|
||||
|
||||
|
||||
Execute(LSP hover by default should not float):
|
||||
call HandleValidLSPResult({'contents': "the message\ncontinuing"})
|
||||
|
||||
AssertEqual 0, g:floating_preview_show_called
|
||||
|
||||
Execute(tsserver responses for documentation requests should be handled):
|
||||
call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}})
|
||||
|
||||
@@ -187,3 +227,46 @@ Execute(tsserver responses for documentation requests should be handled):
|
||||
" The preview window should show the text.
|
||||
AssertEqual ['foo is a very good method'], ale#test#GetPreviewWindowText()
|
||||
silent! pclose
|
||||
|
||||
Execute(hover with show_documentation should be in the preview window, not floating):
|
||||
let g:ale_hover_to_floating_preview = 1
|
||||
let g:ale_floating_preview = 1
|
||||
|
||||
call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}})
|
||||
|
||||
call ale#hover#HandleTSServerResponse(
|
||||
\ 1,
|
||||
\ {
|
||||
\ 'command': 'quickinfo',
|
||||
\ 'request_seq': 3,
|
||||
\ 'success': v:true,
|
||||
\ 'body': {
|
||||
\ 'documentation': 'foo is a very good method',
|
||||
\ 'displayString': 'foo bar ',
|
||||
\ },
|
||||
\ }
|
||||
\)
|
||||
|
||||
let expected = ["Every statement should end with a semicolon", "second line"]
|
||||
|
||||
AssertEqual 0, g:floating_preview_show_called
|
||||
|
||||
Execute(TSServer hover without show_documentation and ale_floating_preview should float):
|
||||
let g:ale_floating_preview = 1
|
||||
|
||||
call ale#hover#SetMap({3: {'buffer': bufnr('')}})
|
||||
|
||||
call ale#hover#HandleTSServerResponse(
|
||||
\ 1,
|
||||
\ {
|
||||
\ 'command': 'quickinfo',
|
||||
\ 'request_seq': 3,
|
||||
\ 'success': v:true,
|
||||
\ 'body': {
|
||||
\ 'displayString': "the message\ncontinuing",
|
||||
\ },
|
||||
\ }
|
||||
\)
|
||||
|
||||
AssertEqual 1, g:floating_preview_show_called
|
||||
AssertEqual ["the message", "continuing"], g:floated_lines
|
||||
|
||||
@@ -111,7 +111,7 @@ Execute(An initial list of semantic errors should be handled):
|
||||
|
||||
Assert g:ale_handle_loclist_called
|
||||
|
||||
Execute(Subsequent empty lists should be ignored):
|
||||
Execute(Subsequent empty lists should be ignored - semantic):
|
||||
let g:ale_buffer_info[bufnr('')].semantic_loclist = []
|
||||
|
||||
call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', ''))
|
||||
@@ -138,3 +138,31 @@ Execute(Non-empty then non-empty semantic errors should be handled):
|
||||
call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', 'x'))
|
||||
|
||||
Assert g:ale_handle_loclist_called
|
||||
|
||||
Execute(Subsequent empty lists should be ignored - suggestion):
|
||||
let g:ale_buffer_info[bufnr('')].suggestion_loclist = []
|
||||
|
||||
call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', ''))
|
||||
|
||||
Assert !g:ale_handle_loclist_called
|
||||
|
||||
Execute(Empty then non-empty suggestion messages should be handled):
|
||||
let g:ale_buffer_info[bufnr('')].suggestion_loclist = []
|
||||
|
||||
call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', 'x'))
|
||||
|
||||
Assert g:ale_handle_loclist_called
|
||||
|
||||
Execute(Non-empty then empt suggestion messages should be handled):
|
||||
let g:ale_buffer_info[bufnr('')].suggestion_loclist = CreateLoclist('x')
|
||||
|
||||
call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', ''))
|
||||
|
||||
Assert g:ale_handle_loclist_called
|
||||
|
||||
Execute(Non-empty then non-empty suggestion messages should be handled):
|
||||
let g:ale_buffer_info[bufnr('')].suggestion_loclist = CreateLoclist('x')
|
||||
|
||||
call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', 'x'))
|
||||
|
||||
Assert g:ale_handle_loclist_called
|
||||
|
||||
0
test/typescript/test.ts
Normal file
0
test/typescript/test.ts
Normal file
0
test/typescript/tsconfig.json
Normal file
0
test/typescript/tsconfig.json
Normal file
0
test/xo-test-files/monorepo/node_modules/xo/cli.js
generated
vendored
Normal file
0
test/xo-test-files/monorepo/node_modules/xo/cli.js
generated
vendored
Normal file
0
test/xo-test-files/monorepo/package.json
Normal file
0
test/xo-test-files/monorepo/package.json
Normal file
0
test/xo-test-files/monorepo/packages/a/index.js
Normal file
0
test/xo-test-files/monorepo/packages/a/index.js
Normal file
0
test/xo-test-files/monorepo/packages/a/index.ts
Normal file
0
test/xo-test-files/monorepo/packages/a/index.ts
Normal file
0
test/xo-test-files/monorepo/packages/a/package.json
Normal file
0
test/xo-test-files/monorepo/packages/a/package.json
Normal file
Reference in New Issue
Block a user