mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-07 21:24:33 +08:00
Compare commits
23 Commits
neovim-lsp
...
codex/upda
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b0f8d91bc | ||
|
|
9e49019a26 | ||
|
|
a0572359ae | ||
|
|
80ff84db84 | ||
|
|
c8c33e7217 | ||
|
|
5098dfd27e | ||
|
|
7cdaaa645d | ||
|
|
2f4a866591 | ||
|
|
f9de268816 | ||
|
|
1aaeb2cdae | ||
|
|
05e22db9a2 | ||
|
|
d0cdde7516 | ||
|
|
baaca9a5d7 | ||
|
|
aac34cd45a | ||
|
|
366de225fd | ||
|
|
22185c4c5c | ||
|
|
2883260ade | ||
|
|
090d31b79a | ||
|
|
067e74fee8 | ||
|
|
ff8fe94494 | ||
|
|
6433d31f47 | ||
|
|
f3f0b05240 | ||
|
|
add538213f |
1
.github/ISSUE_TEMPLATE/report-a-bug.md
vendored
1
.github/ISSUE_TEMPLATE/report-a-bug.md
vendored
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: Report a bug
|
name: Report a bug
|
||||||
labels: bug
|
labels: bug
|
||||||
|
type: Bug
|
||||||
about: Report a bug with ALE.
|
about: Report a bug with ALE.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: Suggest a new linter or fixer
|
name: Suggest a new linter or fixer
|
||||||
labels: new tool
|
labels: new tool
|
||||||
|
type: Task
|
||||||
about: Suggest a new tool ALE can officially integrate with.
|
about: Suggest a new tool ALE can officially integrate with.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
name: Suggest an improvement
|
name: Suggest an improvement
|
||||||
labels: enhancement
|
labels: enhancement
|
||||||
|
type: Feature
|
||||||
about: Suggest some way to improve ALE, or add a new feature.
|
about: Suggest some way to improve ALE, or add a new feature.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
"test"
|
"test"
|
||||||
],
|
],
|
||||||
"workspace.library": [
|
"workspace.library": [
|
||||||
"/usr/share/nvim/runtime/lua"
|
"/usr/share/nvim/runtime/lua",
|
||||||
|
"/opt/homebrew/share/nvim/runtime/lua"
|
||||||
],
|
],
|
||||||
"runtime.pathStrict": true,
|
"runtime.pathStrict": true,
|
||||||
"runtime.path": [
|
"runtime.path": [
|
||||||
|
|||||||
43
ale_linters/bindzone/checkzone.vim
Normal file
43
ale_linters/bindzone/checkzone.vim
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
" Description: named-checkzone for bindzone
|
||||||
|
|
||||||
|
call ale#Set('bindzone_checkzone_executable', 'named-checkzone')
|
||||||
|
call ale#Set('bindzone_checkzone_options', '-c IN')
|
||||||
|
|
||||||
|
function! ale_linters#bindzone#checkzone#GetCommand(buffer) abort
|
||||||
|
return '%e' . ale#Pad(ale#Var(a:buffer, 'bindzone_checkzone_options'))
|
||||||
|
\ . ' example.com %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#bindzone#checkzone#Handle(buffer, lines) abort
|
||||||
|
let l:warning_pattern = '\vzone example.com/IN: (.+)$'
|
||||||
|
let l:error_pattern = '\v:(\d+): (.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:error_pattern)
|
||||||
|
let l:lnum = l:match[1]
|
||||||
|
let l:text = l:match[2]
|
||||||
|
|
||||||
|
call add(l:output, {'text': l:text, 'lnum': l:lnum + 0, 'type': 'E'})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:warning_pattern)
|
||||||
|
let l:text = l:match[1]
|
||||||
|
|
||||||
|
" Ignore information messages
|
||||||
|
let l:scrub_match = matchlist(l:text, '\v(loaded serial|not loaded due to) ')
|
||||||
|
|
||||||
|
if empty(l:scrub_match)
|
||||||
|
call add(l:output, {'text': l:text, 'lnum': 0, 'type': 'W'})
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('bindzone', {
|
||||||
|
\ 'name': 'checkzone',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'bindzone_checkzone_executable')},
|
||||||
|
\ 'command': function('ale_linters#bindzone#checkzone#GetCommand'),
|
||||||
|
\ 'callback': 'ale_linters#bindzone#checkzone#Handle',
|
||||||
|
\ 'read_buffer': 0,
|
||||||
|
\})
|
||||||
@@ -49,7 +49,6 @@ function! ale_linters#dockerfile#hadolint#Handle(buffer, lines) abort
|
|||||||
if l:match[5] isnot# ''
|
if l:match[5] isnot# ''
|
||||||
let l:code = l:match[4] . l:match[5]
|
let l:code = l:match[4] . l:match[5]
|
||||||
let l:link = ' ( ' . l:domain . l:code . ' )'
|
let l:link = ' ( ' . l:domain . l:code . ' )'
|
||||||
let l:text = l:code . ': ' . l:detail
|
|
||||||
let l:detail = l:code . l:link . "\n\n" . l:detail
|
let l:detail = l:code . l:link . "\n\n" . l:detail
|
||||||
else
|
else
|
||||||
let l:type = 'E'
|
let l:type = 'E'
|
||||||
|
|||||||
@@ -5,26 +5,38 @@ call ale#Set('go_golangci_lint_options', '')
|
|||||||
call ale#Set('go_golangci_lint_executable', 'golangci-lint')
|
call ale#Set('go_golangci_lint_executable', 'golangci-lint')
|
||||||
call ale#Set('go_golangci_lint_package', 1)
|
call ale#Set('go_golangci_lint_package', 1)
|
||||||
|
|
||||||
function! ale_linters#go#golangci_lint#GetCommand(buffer) abort
|
function! ale_linters#go#golangci_lint#GetExecutable(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'go_golangci_lint_executable')
|
||||||
|
|
||||||
|
return l:executable
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#go#golangci_lint#GetCommand(buffer, version) abort
|
||||||
let l:filename = expand('#' . a:buffer . ':t')
|
let l:filename = expand('#' . a:buffer . ':t')
|
||||||
let l:options = ale#Var(a:buffer, 'go_golangci_lint_options')
|
let l:options = ale#Var(a:buffer, 'go_golangci_lint_options')
|
||||||
let l:lint_package = ale#Var(a:buffer, 'go_golangci_lint_package')
|
let l:lint_package = ale#Var(a:buffer, 'go_golangci_lint_package')
|
||||||
|
|
||||||
|
if ale#semver#GTE(a:version, [2, 0, 0])
|
||||||
|
let l:options = l:options
|
||||||
|
\ . ' --output.json.path stdout'
|
||||||
|
\ . ' --output.text.path stderr'
|
||||||
|
\ . ' --show-stats=0'
|
||||||
|
else
|
||||||
|
let l:options = l:options
|
||||||
|
\ . ' --out-format=json'
|
||||||
|
\ . ' --show-stats=0'
|
||||||
|
endif
|
||||||
|
|
||||||
if l:lint_package
|
if l:lint_package
|
||||||
return ale#go#EnvString(a:buffer)
|
return ale#go#EnvString(a:buffer)
|
||||||
\ . '%e run '
|
\ . '%e run '
|
||||||
\ . l:options
|
\ . l:options
|
||||||
\ . ' --out-format=json'
|
|
||||||
\ . ' --show-stats=0'
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return ale#go#EnvString(a:buffer)
|
return ale#go#EnvString(a:buffer)
|
||||||
\ . '%e run '
|
\ . '%e run '
|
||||||
\ . ale#Escape(l:filename)
|
\ . ale#Escape(l:filename)
|
||||||
\ . ' ' . l:options
|
\ . ' ' . l:options
|
||||||
\ . ' --out-format=json'
|
|
||||||
\ . ' --show-stats=0'
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#go#golangci_lint#Handler(buffer, lines) abort
|
function! ale_linters#go#golangci_lint#Handler(buffer, lines) abort
|
||||||
@@ -58,9 +70,14 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('go', {
|
call ale#linter#Define('go', {
|
||||||
\ 'name': 'golangci-lint',
|
\ 'name': 'golangci-lint',
|
||||||
\ 'executable': {b -> ale#Var(b, 'go_golangci_lint_executable')},
|
\ 'executable': function('ale_linters#go#golangci_lint#GetExecutable'),
|
||||||
\ 'cwd': '%s:h',
|
\ 'cwd': '%s:h',
|
||||||
\ 'command': function('ale_linters#go#golangci_lint#GetCommand'),
|
\ 'command': {buffer -> ale#semver#RunWithVersionCheck(
|
||||||
|
\ buffer,
|
||||||
|
\ ale_linters#go#golangci_lint#GetExecutable(buffer),
|
||||||
|
\ '%e --version',
|
||||||
|
\ function('ale_linters#go#golangci_lint#GetCommand'),
|
||||||
|
\ )},
|
||||||
\ 'callback': 'ale_linters#go#golangci_lint#Handler',
|
\ 'callback': 'ale_linters#go#golangci_lint#Handler',
|
||||||
\ 'lint_file': 1,
|
\ 'lint_file': 1,
|
||||||
\})
|
\})
|
||||||
|
|||||||
28
ale_linters/lean/lake.vim
Normal file
28
ale_linters/lean/lake.vim
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
" Author: Benjamin Block <https://github.com/benjamindblock>
|
||||||
|
" Description: A language server for Lean 4.
|
||||||
|
|
||||||
|
function! ale_linters#lean#lake#GetProjectRoot(buffer) abort
|
||||||
|
let l:lakefile_toml = ale#path#FindNearestFile(a:buffer, 'lakefile.toml')
|
||||||
|
let l:lakefile_lean = ale#path#FindNearestFile(a:buffer, 'lakefile.lean')
|
||||||
|
|
||||||
|
if !empty(l:lakefile_toml)
|
||||||
|
return fnamemodify(l:lakefile_toml, ':p:h')
|
||||||
|
elseif !empty(l:lakefile_lean)
|
||||||
|
return fnamemodify(l:lakefile_lean, ':p:h')
|
||||||
|
else
|
||||||
|
return fnamemodify('', ':h')
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#Set('lean_lake_executable', 'lake')
|
||||||
|
call ale#Set('lean_lake_config', {})
|
||||||
|
|
||||||
|
call ale#linter#Define('lean', {
|
||||||
|
\ 'name': 'lake',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'language': 'lean',
|
||||||
|
\ 'lsp_config': {b -> ale#Var(b, 'lean_lake_config')},
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'lean_lake_executable')},
|
||||||
|
\ 'command': '%e serve',
|
||||||
|
\ 'project_root': function('ale_linters#lean#lake#GetProjectRoot'),
|
||||||
|
\})
|
||||||
@@ -29,7 +29,7 @@ function! ale_linters#nix#nix#Handle(buffer, lines) abort
|
|||||||
\ 'type': 'E',
|
\ 'type': 'E',
|
||||||
\ 'lnum': l:result.line,
|
\ 'lnum': l:result.line,
|
||||||
\ 'col': l:result.column,
|
\ 'col': l:result.column,
|
||||||
\ 'text': l:result.raw_msg
|
\ 'text': substitute(l:result.raw_msg, '\e\[[0-9;]*m', '', 'g'),
|
||||||
\})
|
\})
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ function! ale_linters#python#pylsp#GetCwd(buffer) abort
|
|||||||
\ 'name': 'pylsp',
|
\ 'name': 'pylsp',
|
||||||
\ 'project_root': function('ale#python#FindProjectRoot'),
|
\ 'project_root': function('ale#python#FindProjectRoot'),
|
||||||
\}
|
\}
|
||||||
let l:root = ale#lsp_linter#FindProjectRoot(a:buffer, l:fake_linter)
|
let l:root = ale#linter#GetRoot(a:buffer, l:fake_linter)
|
||||||
|
|
||||||
return !empty(l:root) ? l:root : v:null
|
return !empty(l:root) ? l:root : v:null
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
57
ale_linters/python/pyrefly.vim
Normal file
57
ale_linters/python/pyrefly.vim
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
" Author: oliverralbertini <oliver.albertini@gmail.com>
|
||||||
|
" Description: A performant type-checker supporting LSP for Python 3 created by Facebook
|
||||||
|
|
||||||
|
call ale#Set('python_pyrefly_executable', 'pyrefly')
|
||||||
|
call ale#Set('python_pyrefly_use_global', get(g:, 'ale_use_global_executables', 0))
|
||||||
|
call ale#Set('python_pyrefly_auto_pipenv', 0)
|
||||||
|
call ale#Set('python_pyrefly_auto_poetry', 0)
|
||||||
|
call ale#Set('python_pyrefly_auto_uv', 0)
|
||||||
|
|
||||||
|
function! ale_linters#python#pyrefly#GetExecutable(buffer) abort
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyrefly_auto_pipenv'))
|
||||||
|
\ && ale#python#PipenvPresent(a:buffer)
|
||||||
|
return 'pipenv'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pyrefly_auto_poetry'))
|
||||||
|
\ && ale#python#PoetryPresent(a:buffer)
|
||||||
|
return 'poetry'
|
||||||
|
endif
|
||||||
|
|
||||||
|
if (ale#Var(a:buffer, 'python_auto_uv') || ale#Var(a:buffer, 'python_pyrefly_auto_uv'))
|
||||||
|
\ && ale#python#UvPresent(a:buffer)
|
||||||
|
return 'uv'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ale#python#FindExecutable(a:buffer, 'python_pyrefly', ['pyrefly'])
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#python#pyrefly#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale_linters#python#pyrefly#GetExecutable(a:buffer)
|
||||||
|
let l:exec_args = [
|
||||||
|
\ ale#Escape(l:executable)
|
||||||
|
\ ]
|
||||||
|
\ + (l:executable =~? '\(pipenv\|poetry\|uv\)$' ? ['run', 'pyrefly'] : [])
|
||||||
|
\ + [
|
||||||
|
\ 'lsp',
|
||||||
|
\ ]
|
||||||
|
|
||||||
|
return join(l:exec_args, ' ')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#python#pyrefly#GetCwd(buffer) abort
|
||||||
|
" Run from project root if found, else from buffer dir.
|
||||||
|
let l:project_root = ale#python#FindProjectRoot(a:buffer)
|
||||||
|
|
||||||
|
return !empty(l:project_root) ? l:project_root : '%s:h'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('python', {
|
||||||
|
\ 'name': 'pyrefly',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': function('ale_linters#python#pyrefly#GetExecutable'),
|
||||||
|
\ 'command': function('ale_linters#python#pyrefly#GetCommand'),
|
||||||
|
\ 'project_root': function('ale#python#FindProjectRoot'),
|
||||||
|
\ 'completion_filter': 'ale#completion#python#CompletionItemFilter',
|
||||||
|
\ 'cwd': function('ale_linters#python#pyrefly#GetCwd'),
|
||||||
|
\})
|
||||||
@@ -13,7 +13,7 @@ function! ale_linters#python#pyright#GetCwd(buffer) abort
|
|||||||
\ 'name': 'pyright',
|
\ 'name': 'pyright',
|
||||||
\ 'project_root': function('ale#python#FindProjectRoot'),
|
\ 'project_root': function('ale#python#FindProjectRoot'),
|
||||||
\}
|
\}
|
||||||
let l:root = ale#lsp_linter#FindProjectRoot(a:buffer, l:fake_linter)
|
let l:root = ale#linter#GetRoot(a:buffer, l:fake_linter)
|
||||||
|
|
||||||
return !empty(l:root) ? l:root : v:null
|
return !empty(l:root) ? l:root : v:null
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -72,20 +72,31 @@ function! ale_linters#python#ruff#Handle(buffer, lines) abort
|
|||||||
try
|
try
|
||||||
let l:item = json_decode(l:line)
|
let l:item = json_decode(l:line)
|
||||||
catch
|
catch
|
||||||
let l:item = v:null
|
" If we can't decode a line, skip it.
|
||||||
|
continue
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
if !empty(l:item)
|
if (l:item.code is# 'W291' || l:item.code is# 'W293')
|
||||||
call add(l:output, {
|
\&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
|
||||||
\ 'lnum': l:item.location.row,
|
" Skip warnings for trailing whitespace if the option is off.
|
||||||
\ 'col': l:item.location.column,
|
continue
|
||||||
\ 'end_lnum': l:item.end_location.row,
|
|
||||||
\ 'end_col': l:item.end_location.column - 1,
|
|
||||||
\ 'code': l:item.code,
|
|
||||||
\ 'text': l:item.message,
|
|
||||||
\ 'type': l:item.code =~? '\vE\d+' ? 'E' : 'W',
|
|
||||||
\})
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if l:item.code is# 'W391'
|
||||||
|
\&& !ale#Var(a:buffer, 'warn_about_trailing_blank_lines')
|
||||||
|
" Skip warnings for trailing blank lines if the option is off
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:item.location.row,
|
||||||
|
\ 'col': l:item.location.column,
|
||||||
|
\ 'end_lnum': l:item.end_location.row,
|
||||||
|
\ 'end_col': l:item.end_location.column - 1,
|
||||||
|
\ 'code': l:item.code,
|
||||||
|
\ 'text': l:item.message,
|
||||||
|
\ 'type': l:item.code =~? '\vE\d+' ? 'E' : 'W',
|
||||||
|
\})
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
return l:output
|
return l:output
|
||||||
|
|||||||
25
ale_linters/roc/roc_language_server.vim
Normal file
25
ale_linters/roc/roc_language_server.vim
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
" Author: Benjamin Block <https://github.com/benjamindblock>
|
||||||
|
" Description: A language server for Roc.
|
||||||
|
|
||||||
|
function! ale_linters#roc#roc_language_server#GetProjectRoot(buffer) abort
|
||||||
|
let l:roc_main_file = ale#path#FindNearestFile(a:buffer, 'main.roc')
|
||||||
|
|
||||||
|
if !empty(l:roc_main_file)
|
||||||
|
return fnamemodify(l:roc_main_file, ':p:h')
|
||||||
|
else
|
||||||
|
return fnamemodify('', ':h')
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#Set('roc_roc_language_server_executable', 'roc_language_server')
|
||||||
|
call ale#Set('roc_roc_language_server_config', {})
|
||||||
|
|
||||||
|
call ale#linter#Define('roc', {
|
||||||
|
\ 'name': 'roc_language_server',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'language': 'roc',
|
||||||
|
\ 'lsp_config': {b -> ale#Var(b, 'roc_roc_language_server_config')},
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'roc_roc_language_server_executable')},
|
||||||
|
\ 'command': '%e',
|
||||||
|
\ 'project_root': function('ale_linters#roc#roc_language_server#GetProjectRoot'),
|
||||||
|
\})
|
||||||
@@ -25,6 +25,7 @@ endfunction
|
|||||||
|
|
||||||
call ale#linter#Define('sh', {
|
call ale#linter#Define('sh', {
|
||||||
\ 'name': 'language_server',
|
\ 'name': 'language_server',
|
||||||
|
\ 'aliases': ['bash-language-server'],
|
||||||
\ 'lsp': 'stdio',
|
\ 'lsp': 'stdio',
|
||||||
\ 'executable': function('ale_linters#sh#language_server#GetExecutable'),
|
\ 'executable': function('ale_linters#sh#language_server#GetExecutable'),
|
||||||
\ 'command': function('ale_linters#sh#language_server#GetCommand'),
|
\ 'command': function('ale_linters#sh#language_server#GetCommand'),
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ endfunction
|
|||||||
function! ale#assert#LSPProject(expected_root) abort
|
function! ale#assert#LSPProject(expected_root) abort
|
||||||
let l:buffer = bufnr('')
|
let l:buffer = bufnr('')
|
||||||
let l:linter = s:GetLinter()
|
let l:linter = s:GetLinter()
|
||||||
let l:root = ale#lsp_linter#FindProjectRoot(l:buffer, l:linter)
|
let l:root = ale#linter#GetRoot(l:buffer, l:linter)
|
||||||
|
|
||||||
AssertEqual a:expected_root, l:root
|
AssertEqual a:expected_root, l:root
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ function! ale#fix#ApplyFixes(buffer, output) abort
|
|||||||
|
|
||||||
if !l:data.ignore_file_changed_errors
|
if !l:data.ignore_file_changed_errors
|
||||||
" no-custom-checks
|
" no-custom-checks
|
||||||
echoerr 'The file was changed before fixing finished'
|
echom 'The file was changed before fixing finished'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -722,6 +722,16 @@ let s:default_registry = {
|
|||||||
\ 'suggested_filetypes': ['typst'],
|
\ 'suggested_filetypes': ['typst'],
|
||||||
\ 'description': 'A formatter for Typst files',
|
\ 'description': 'A formatter for Typst files',
|
||||||
\ },
|
\ },
|
||||||
|
\ 'roc_format': {
|
||||||
|
\ 'function': 'ale#fixers#roc_format#Fix',
|
||||||
|
\ 'suggested_filetypes': ['roc'],
|
||||||
|
\ 'description': 'Formats Roc files.',
|
||||||
|
\ },
|
||||||
|
\ 'roc_annotate': {
|
||||||
|
\ 'function': 'ale#fixers#roc_annotate#Fix',
|
||||||
|
\ 'suggested_filetypes': ['roc'],
|
||||||
|
\ 'description': 'Annotates all top-level definitions in Roc files.',
|
||||||
|
\ },
|
||||||
\}
|
\}
|
||||||
|
|
||||||
" Reset the function registry to the default entries.
|
" Reset the function registry to the default entries.
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ function! ale#fixers#clangformat#Fix(buffer) abort
|
|||||||
let l:use_local_file = ale#Var(a:buffer, 'c_clangformat_use_local_file')
|
let l:use_local_file = ale#Var(a:buffer, 'c_clangformat_use_local_file')
|
||||||
|
|
||||||
if l:style_option isnot# ''
|
if l:style_option isnot# ''
|
||||||
let l:style_option = '-style=' . "'" . l:style_option . "'"
|
let l:style_option = '-style=' . ale#Escape(l:style_option)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if l:use_local_file
|
if l:use_local_file
|
||||||
|
|||||||
@@ -17,10 +17,11 @@ let s:variables = {
|
|||||||
\}
|
\}
|
||||||
|
|
||||||
function! ale#fixers#erlang_mode#Fix(buffer) abort
|
function! ale#fixers#erlang_mode#Fix(buffer) abort
|
||||||
let emacs_executable =
|
let l:emacs_executable =
|
||||||
\ ale#Var(a:buffer, 'erlang_erlang_mode_emacs_executable')
|
\ ale#Var(a:buffer, 'erlang_erlang_mode_emacs_executable')
|
||||||
|
|
||||||
let l:exprs = [
|
let l:exprs = [
|
||||||
|
\ '(setq enable-local-variables :safe)',
|
||||||
\ s:SetqDefault(a:buffer, s:variables),
|
\ s:SetqDefault(a:buffer, s:variables),
|
||||||
\ '(erlang-mode)',
|
\ '(erlang-mode)',
|
||||||
\ '(font-lock-fontify-region (point-min) (point-max))',
|
\ '(font-lock-fontify-region (point-min) (point-max))',
|
||||||
|
|||||||
@@ -1,32 +1,48 @@
|
|||||||
" Author: Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
|
" Author: Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
|
||||||
" Description: Run golangci-lint with the --fix flag to autofix some issues
|
" Description: Run golangci-lint with the --fix flag to autofix some issues
|
||||||
|
|
||||||
call ale#Set('go_golangci_lint_options', '')
|
call ale#Set('go_golangci_formatter_options', '')
|
||||||
call ale#Set('go_golangci_lint_executable', 'golangci-lint')
|
call ale#Set('go_golangci_formatter_executable', 'golangci-lint')
|
||||||
call ale#Set('go_golangci_lint_package', 1)
|
|
||||||
|
|
||||||
function! ale#fixers#golangci_lint#GetCommand(buffer) abort
|
function! ale#fixers#golangci_lint#GetExecutable(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'go_golangci_formatter_executable')
|
||||||
|
|
||||||
|
return l:executable
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#fixers#golangci_lint#GetCommand(buffer, version) abort
|
||||||
let l:filename = expand('#' . a:buffer . ':t')
|
let l:filename = expand('#' . a:buffer . ':t')
|
||||||
let l:executable = ale#Var(a:buffer, 'go_golangci_lint_executable')
|
let l:executable = ale#fixers#golangci_lint#GetExecutable(a:buffer)
|
||||||
let l:options = ale#Var(a:buffer, 'go_golangci_lint_options') . ' --fix'
|
let l:options = ale#Var(a:buffer, 'go_golangci_formatter_options')
|
||||||
let l:package_mode = ale#Var(a:buffer, 'go_golangci_lint_package')
|
|
||||||
let l:env = ale#go#EnvString(a:buffer)
|
let l:env = ale#go#EnvString(a:buffer)
|
||||||
|
|
||||||
|
if ale#semver#GTE(a:version, [2, 0, 0])
|
||||||
if l:package_mode
|
|
||||||
return l:env . ale#Escape(l:executable)
|
return l:env . ale#Escape(l:executable)
|
||||||
\ . ' run '
|
\ . ' fmt --stdin '
|
||||||
\ . l:options
|
\ . l:options
|
||||||
|
else
|
||||||
|
return l:env . ale#Escape(l:executable)
|
||||||
|
\ . ' run --fix '
|
||||||
|
\ . l:options
|
||||||
|
\ . ' '
|
||||||
|
\ . ale#Escape(l:filename)
|
||||||
endif
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
return l:env . ale#Escape(l:executable)
|
function! ale#fixers#golangci_lint#GetCommandForVersion(buffer, version) abort
|
||||||
\ . ' run '
|
return {
|
||||||
\ . l:options
|
\ 'command': ale#fixers#golangci_lint#GetCommand(a:buffer, a:version)
|
||||||
\ . ' ' . ale#Escape(l:filename)
|
\}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#fixers#golangci_lint#Fix(buffer) abort
|
function! ale#fixers#golangci_lint#Fix(buffer) abort
|
||||||
return {
|
let l:executable = ale#fixers#golangci_lint#GetExecutable(a:buffer)
|
||||||
\ 'command': ale#fixers#golangci_lint#GetCommand(a:buffer),
|
let l:command = ale#fixers#golangci_lint#GetExecutable(a:buffer) . ale#Pad('--version')
|
||||||
\}
|
|
||||||
|
return ale#semver#RunWithVersionCheck(
|
||||||
|
\ a:buffer,
|
||||||
|
\ l:executable,
|
||||||
|
\ l:command,
|
||||||
|
\ function('ale#fixers#golangci_lint#GetCommandForVersion'),
|
||||||
|
\)
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
21
autoload/ale/fixers/roc_annotate.vim
Normal file
21
autoload/ale/fixers/roc_annotate.vim
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
" Author: Benjamin Block <https://github.com/benjamindblock>
|
||||||
|
" Description: Official type annotation tool for Roc.
|
||||||
|
|
||||||
|
call ale#Set('roc_roc_annotate_executable', 'roc')
|
||||||
|
call ale#Set('roc_roc_annotate_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#roc_annotate#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'roc_roc_annotate_executable')
|
||||||
|
let l:command = l:executable . ' format annotate'
|
||||||
|
let l:options = ale#Var(a:buffer, 'roc_roc_annotate_options')
|
||||||
|
|
||||||
|
if l:options isnot# ''
|
||||||
|
let l:command .= ' ' . l:options
|
||||||
|
endif
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': l:command . ' %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
endfunction
|
||||||
|
|
||||||
20
autoload/ale/fixers/roc_format.vim
Normal file
20
autoload/ale/fixers/roc_format.vim
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
" Author: Benjamin Block <https://github.com/benjamindblock>
|
||||||
|
" Description: Official formatter for Roc.
|
||||||
|
|
||||||
|
call ale#Set('roc_roc_format_executable', 'roc')
|
||||||
|
call ale#Set('roc_roc_format_options', '')
|
||||||
|
|
||||||
|
function! ale#fixers#roc_format#Fix(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'roc_roc_format_executable')
|
||||||
|
let l:command = l:executable . ' format'
|
||||||
|
let l:options = ale#Var(a:buffer, 'roc_roc_format_options')
|
||||||
|
|
||||||
|
if l:options isnot# ''
|
||||||
|
let l:command .= ' ' . l:options
|
||||||
|
endif
|
||||||
|
|
||||||
|
return {
|
||||||
|
\ 'command': l:command . ' %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
endfunction
|
||||||
@@ -11,6 +11,7 @@ let s:linters = {}
|
|||||||
" NOTE: Update the g:ale_linter_aliases documentation when modifying this.
|
" NOTE: Update the g:ale_linter_aliases documentation when modifying this.
|
||||||
let s:default_ale_linter_aliases = {
|
let s:default_ale_linter_aliases = {
|
||||||
\ 'Dockerfile': 'dockerfile',
|
\ 'Dockerfile': 'dockerfile',
|
||||||
|
\ 'bash': 'sh',
|
||||||
\ 'csh': 'sh',
|
\ 'csh': 'sh',
|
||||||
\ 'javascriptreact': ['javascript', 'jsx'],
|
\ 'javascriptreact': ['javascript', 'jsx'],
|
||||||
\ 'plaintex': 'tex',
|
\ 'plaintex': 'tex',
|
||||||
@@ -446,3 +447,32 @@ function! ale#linter#GetAddress(buffer, linter) abort
|
|||||||
|
|
||||||
return type(l:Address) is v:t_func ? l:Address(a:buffer) : l:Address
|
return type(l:Address) is v:t_func ? l:Address(a:buffer) : l:Address
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Get the project root for a linter.
|
||||||
|
" If |b:ale_root| or |g:ale_root| is set to either a String or a Dict mapping
|
||||||
|
" linter names to roots or callbacks, return that value immediately. When no
|
||||||
|
" value is available, fall back to the linter-specific configuration.
|
||||||
|
function! ale#linter#GetRoot(buffer, linter) abort
|
||||||
|
let l:buffer_ale_root = getbufvar(a:buffer, 'ale_root', {})
|
||||||
|
|
||||||
|
if type(l:buffer_ale_root) is v:t_string
|
||||||
|
return l:buffer_ale_root
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(l:buffer_ale_root, a:linter.name)
|
||||||
|
let l:Root = l:buffer_ale_root[a:linter.name]
|
||||||
|
return type(l:Root) is v:t_func ? l:Root(a:buffer) : l:Root
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(g:ale_root, a:linter.name)
|
||||||
|
let l:Root = g:ale_root[a:linter.name]
|
||||||
|
return type(l:Root) is v:t_func ? l:Root(a:buffer) : l:Root
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(a:linter, 'project_root')
|
||||||
|
let l:Root = a:linter.project_root
|
||||||
|
return type(l:Root) is v:t_func ? l:Root(a:buffer) : l:Root
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|||||||
@@ -706,7 +706,7 @@ function! ale#lsp#Send(conn_id, message) abort
|
|||||||
throw 'LSP server not initialized yet!'
|
throw 'LSP server not initialized yet!'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:ale_use_neovim_lsp_api
|
if g:ale_use_neovim_lsp_api && !l:conn.is_tsserver
|
||||||
return luaeval('require("ale.lsp").send_message(_A)', {
|
return luaeval('require("ale.lsp").send_message(_A)', {
|
||||||
\ 'client_id': l:conn.client_id,
|
\ 'client_id': l:conn.client_id,
|
||||||
\ 'is_notification': a:message[0] == 1 ? v:true : v:false,
|
\ 'is_notification': a:message[0] == 1 ? v:true : v:false,
|
||||||
|
|||||||
@@ -296,44 +296,6 @@ function! ale#lsp_linter#GetConfig(buffer, linter) abort
|
|||||||
return {}
|
return {}
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale#lsp_linter#FindProjectRoot(buffer, linter) abort
|
|
||||||
let l:buffer_ale_root = getbufvar(a:buffer, 'ale_root', {})
|
|
||||||
|
|
||||||
if type(l:buffer_ale_root) is v:t_string
|
|
||||||
return l:buffer_ale_root
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Try to get a buffer-local setting for the root
|
|
||||||
if has_key(l:buffer_ale_root, a:linter.name)
|
|
||||||
let l:Root = l:buffer_ale_root[a:linter.name]
|
|
||||||
|
|
||||||
if type(l:Root) is v:t_func
|
|
||||||
return l:Root(a:buffer)
|
|
||||||
else
|
|
||||||
return l:Root
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Try to get a global setting for the root
|
|
||||||
if has_key(g:ale_root, a:linter.name)
|
|
||||||
let l:Root = g:ale_root[a:linter.name]
|
|
||||||
|
|
||||||
if type(l:Root) is v:t_func
|
|
||||||
return l:Root(a:buffer)
|
|
||||||
else
|
|
||||||
return l:Root
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Fall back to the linter-specific configuration
|
|
||||||
if has_key(a:linter, 'project_root')
|
|
||||||
let l:Root = a:linter.project_root
|
|
||||||
|
|
||||||
return type(l:Root) is v:t_func ? l:Root(a:buffer) : l:Root
|
|
||||||
endif
|
|
||||||
|
|
||||||
return ale#util#GetFunction(a:linter.project_root_callback)(a:buffer)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" This function is accessible so tests can call it.
|
" This function is accessible so tests can call it.
|
||||||
function! ale#lsp_linter#OnInit(linter, details, Callback) abort
|
function! ale#lsp_linter#OnInit(linter, details, Callback) abort
|
||||||
@@ -504,7 +466,7 @@ endfunction
|
|||||||
function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort
|
function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort
|
||||||
let l:command = ''
|
let l:command = ''
|
||||||
let l:address = ''
|
let l:address = ''
|
||||||
let l:root = ale#lsp_linter#FindProjectRoot(a:buffer, a:linter)
|
let l:root = ale#linter#GetRoot(a:buffer, a:linter)
|
||||||
|
|
||||||
if empty(l:root) && a:linter.lsp isnot# 'tsserver'
|
if empty(l:root) && a:linter.lsp isnot# 'tsserver'
|
||||||
" If there's no project root, then we can't check files with LSP,
|
" If there's no project root, then we can't check files with LSP,
|
||||||
|
|||||||
@@ -115,20 +115,24 @@ endfunction
|
|||||||
|
|
||||||
" Return 1 if a path is an absolute path.
|
" Return 1 if a path is an absolute path.
|
||||||
function! ale#path#IsAbsolute(filename) abort
|
function! ale#path#IsAbsolute(filename) abort
|
||||||
if has('win32') && a:filename[:0] is# '\'
|
if has('win32')
|
||||||
return 1
|
return a:filename[:0] =~# '[\\/]' || a:filename[0:2] =~? '[A-Z]:[/\\]'
|
||||||
|
else
|
||||||
|
return a:filename[:0] is# '/'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Check for /foo and C:\foo, etc.
|
|
||||||
return a:filename[:0] is# '/' || a:filename[1:2] is# ':\'
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:temp_dir = ale#path#Simplify(fnamemodify(ale#util#Tempname(), ':h:h'))
|
let s:temp_dir = ale#path#Simplify(fnamemodify(ale#util#Tempname(), ':h:h'))
|
||||||
|
let s:resolved_temp_dir = resolve(s:temp_dir)
|
||||||
|
|
||||||
" Given a filename, return 1 if the file represents some temporary file
|
" Given a filename, return 1 if the file represents some temporary file
|
||||||
" created by Vim.
|
" created by Vim. If the temporary location is symlinked (e.g. macOS), some
|
||||||
|
" linters may report the resolved version of the path, so both are checked.
|
||||||
function! ale#path#IsTempName(filename) abort
|
function! ale#path#IsTempName(filename) abort
|
||||||
return ale#path#Simplify(a:filename)[:len(s:temp_dir) - 1] is# s:temp_dir
|
let l:filename = ale#path#Simplify(a:filename)
|
||||||
|
|
||||||
|
return l:filename[:len(s:temp_dir) - 1] is# s:temp_dir
|
||||||
|
\|| l:filename[:len(s:resolved_temp_dir) - 1] is# s:resolved_temp_dir
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Given a base directory, which must not have a trailing slash, and a
|
" Given a base directory, which must not have a trailing slash, and a
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ function! ale#python#FindProjectRootIni(buffer) abort
|
|||||||
" If you change this, update ale-python-root documentation.
|
" If you change this, update ale-python-root documentation.
|
||||||
if filereadable(l:path . '/MANIFEST.in')
|
if filereadable(l:path . '/MANIFEST.in')
|
||||||
\|| filereadable(l:path . '/setup.cfg')
|
\|| filereadable(l:path . '/setup.cfg')
|
||||||
\|| filereadable(l:path . '/pytest.ini')
|
|
||||||
\|| filereadable(l:path . '/tox.ini')
|
\|| filereadable(l:path . '/tox.ini')
|
||||||
\|| filereadable(l:path . '/.pyre_configuration.local')
|
\|| filereadable(l:path . '/.pyre_configuration.local')
|
||||||
\|| filereadable(l:path . '/mypy.ini')
|
\|| filereadable(l:path . '/mypy.ini')
|
||||||
@@ -55,12 +54,19 @@ endfunction
|
|||||||
" Given a buffer number, find the project root directory for Python.
|
" Given a buffer number, find the project root directory for Python.
|
||||||
" The root directory is defined as the first directory found while searching
|
" The root directory is defined as the first directory found while searching
|
||||||
" upwards through paths, including the current directory, until a path
|
" upwards through paths, including the current directory, until a path
|
||||||
" containing an init file (one from MANIFEST.in, setup.cfg, pytest.ini,
|
" containing an configuration file is found. (See list above)
|
||||||
" tox.ini) is found. If it is not possible to find the project root directory
|
"
|
||||||
" via init file, then it will be defined as the first directory found
|
" If it is not possible to find the project root directory via configuration
|
||||||
" searching upwards through paths, including the current directory, until no
|
" file, then it will be defined as the first directory found searching upwards
|
||||||
" __init__.py files is found.
|
" through paths, including the current directory, until no __init__.py files
|
||||||
|
" is found.
|
||||||
function! ale#python#FindProjectRoot(buffer) abort
|
function! ale#python#FindProjectRoot(buffer) abort
|
||||||
|
let l:root = ale#linter#GetRoot(a:buffer, {'name': 'python'})
|
||||||
|
|
||||||
|
if !empty(l:root)
|
||||||
|
return l:root
|
||||||
|
endif
|
||||||
|
|
||||||
let l:ini_root = ale#python#FindProjectRootIni(a:buffer)
|
let l:ini_root = ale#python#FindProjectRootIni(a:buffer)
|
||||||
|
|
||||||
if !empty(l:ini_root)
|
if !empty(l:ini_root)
|
||||||
|
|||||||
32
doc/ale-bindzone.txt
Normal file
32
doc/ale-bindzone.txt
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
===============================================================================
|
||||||
|
ALE BINDZone Integration *ale-bindzone-options*
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
checkzone *ale-bindzone-checkzone*
|
||||||
|
|
||||||
|
*ale-options.bindzone_checkzone_executable*
|
||||||
|
*g:ale_bindzone_checkzone_executable*
|
||||||
|
*b:ale_bindzone_checkzone_executable*
|
||||||
|
bindzone_checkzone_executable
|
||||||
|
g:ale_bindzone_checkzone_executable
|
||||||
|
Type: |String|
|
||||||
|
Default: `named-checkzone`
|
||||||
|
|
||||||
|
This variable can be changed to set the path to named-checkzone executable.
|
||||||
|
|
||||||
|
*ale-options.bindzone_checkzone_options*
|
||||||
|
*g:ale_bindzone_checkzone_options*
|
||||||
|
*b:ale_bindzone_checkzone_options*
|
||||||
|
bindzone_checkzone_options
|
||||||
|
g:ale_bindzone_checkzone_options
|
||||||
|
Type: |String|
|
||||||
|
Default: `-c IN`
|
||||||
|
|
||||||
|
This variable can be changed to add additional command-line arguments.
|
||||||
|
All available options can be found at:
|
||||||
|
|
||||||
|
https://bind9.readthedocs.io/en/stable/manpages.html#named-checkzone-zone-file-validation-tool
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||||
@@ -144,7 +144,7 @@ g:ale_go_golangci_lint_options
|
|||||||
Default: `''`
|
Default: `''`
|
||||||
|
|
||||||
This variable can be changed to alter the command-line arguments to the
|
This variable can be changed to alter the command-line arguments to the
|
||||||
golangci-lint invocation.
|
golangci-lint run invocation.
|
||||||
|
|
||||||
*ale-options.go_golangci_lint_package*
|
*ale-options.go_golangci_lint_package*
|
||||||
*g:ale_go_golangci_lint_package*
|
*g:ale_go_golangci_lint_package*
|
||||||
@@ -157,6 +157,30 @@ g:ale_go_golangci_lint_package
|
|||||||
When set to `1`, the whole Go package will be checked instead of only the
|
When set to `1`, the whole Go package will be checked instead of only the
|
||||||
current file.
|
current file.
|
||||||
|
|
||||||
|
golangci_lint can also be user as a fixer to format go source files. In this
|
||||||
|
case the following configuration variables can be used to configure the
|
||||||
|
formatters:
|
||||||
|
|
||||||
|
*ale-options.go_golangci_formatter_executable*
|
||||||
|
*g:ale_go_golangci_formatter_executable*
|
||||||
|
*b:ale_go_golangci_formatter_executable*
|
||||||
|
go_golangci_formatter_executable
|
||||||
|
g:ale_go_golangci_formatter_executable
|
||||||
|
Type: |String|
|
||||||
|
Default: `'golangci-lint'`
|
||||||
|
|
||||||
|
The executable that will be run for golangci-lint.
|
||||||
|
|
||||||
|
*ale-options.go_golangci_formatter_options*
|
||||||
|
*g:ale_go_golangci_formatter_options*
|
||||||
|
*b:ale_go_golangci_formatter_options*
|
||||||
|
go_golangci_formatter_options
|
||||||
|
g:ale_go_golangci_formatter_options
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
This variable can be changed to alter the command-line arguments to the
|
||||||
|
golangci-lint fmt invocation.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
golangserver *ale-go-golangserver*
|
golangserver *ale-go-golangserver*
|
||||||
|
|||||||
29
doc/ale-lean.txt
Normal file
29
doc/ale-lean.txt
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
===============================================================================
|
||||||
|
ALE Lean Integration *ale-lean-options*
|
||||||
|
*ale-integration-lean*
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
Integration Information
|
||||||
|
|
||||||
|
Currently, the only supported LSP for Lean 4 is lake.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
lake *ale-lean-lake*
|
||||||
|
|
||||||
|
g:ale_lean_lake_executable *g:ale_lean_lake_executable*
|
||||||
|
*b:ale_lean_lake_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'lake'`
|
||||||
|
|
||||||
|
This variable can be modified to change the executable path for `lake`.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_lean_lake_config *g:ale_lean_lake_config*
|
||||||
|
*b:ale_lean_lake_config*
|
||||||
|
Type: |Dictionary|
|
||||||
|
Default: `{}`
|
||||||
|
|
||||||
|
Dictionary with configuration settings for lake.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||||
@@ -55,6 +55,9 @@ For some linters, ALE will search for a Python project root by looking at the
|
|||||||
files in directories on or above where a file being checked is. ALE applies
|
files in directories on or above where a file being checked is. ALE applies
|
||||||
the following methods, in order:
|
the following methods, in order:
|
||||||
|
|
||||||
|
If |g:ale_root| or |b:ale_root| provides a value, that value is used as the
|
||||||
|
project root instead and the searching described below is skipped.
|
||||||
|
|
||||||
1. Find the first directory containing a common Python configuration file.
|
1. Find the first directory containing a common Python configuration file.
|
||||||
2. If no configuration file can be found, use the first directory which does
|
2. If no configuration file can be found, use the first directory which does
|
||||||
not contain a readable file named `__init__.py`.
|
not contain a readable file named `__init__.py`.
|
||||||
@@ -63,7 +66,6 @@ ALE will look for configuration files with the following filenames. >
|
|||||||
|
|
||||||
MANIFEST.in
|
MANIFEST.in
|
||||||
setup.cfg
|
setup.cfg
|
||||||
pytest.ini
|
|
||||||
tox.ini
|
tox.ini
|
||||||
.pyre_configuration.local
|
.pyre_configuration.local
|
||||||
mypy.ini
|
mypy.ini
|
||||||
@@ -81,6 +83,7 @@ ALE will look for configuration files with the following filenames. >
|
|||||||
poetry.lock
|
poetry.lock
|
||||||
pyproject.toml
|
pyproject.toml
|
||||||
.tool-versions
|
.tool-versions
|
||||||
|
uv.lock
|
||||||
<
|
<
|
||||||
|
|
||||||
The first directory containing any of the files named above will be used.
|
The first directory containing any of the files named above will be used.
|
||||||
@@ -1616,6 +1619,69 @@ g:ale_python_pyre_auto_uv
|
|||||||
executable.
|
executable.
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
pyrefly *ale-python-pyrefly*
|
||||||
|
|
||||||
|
`pyrefly` will be run from a detected project root, per |ale-python-root|.
|
||||||
|
|
||||||
|
*ale-options.python_pyrefly_executable*
|
||||||
|
*g:ale_python_pyrefly_executable*
|
||||||
|
*b:ale_python_pyrefly_executable*
|
||||||
|
python_pyrefly_executable
|
||||||
|
g:ale_python_pyrefly_executable
|
||||||
|
Type: |String|
|
||||||
|
Default: `'pyrefly'`
|
||||||
|
|
||||||
|
See |ale-integrations-local-executables|
|
||||||
|
|
||||||
|
Set this to `'pipenv'` to invoke `'pipenv` `run` `pyrefly'`.
|
||||||
|
Set this to `'poetry'` to invoke `'poetry` `run` `pyrefly'`.
|
||||||
|
Set this to `'uv'` to invoke `'uv` `run` `pyrefly'`.
|
||||||
|
|
||||||
|
*ale-options.python_pyrefly_use_global*
|
||||||
|
*g:ale_python_pyrefly_use_global*
|
||||||
|
*b:ale_python_pyrefly_use_global*
|
||||||
|
python_pyrefly_use_global
|
||||||
|
g:ale_python_pyrefly_use_global
|
||||||
|
Type: |Number|
|
||||||
|
Default: `get(g:, 'ale_use_global_executables', 0)`
|
||||||
|
|
||||||
|
See |ale-integrations-local-executables|
|
||||||
|
|
||||||
|
*ale-options.python_pyrefly_auto_pipenv*
|
||||||
|
*g:ale_python_pyrefly_auto_pipenv*
|
||||||
|
*b:ale_python_pyrefly_auto_pipenv*
|
||||||
|
python_pyrefly_auto_pipenv
|
||||||
|
g:ale_python_pyrefly_auto_pipenv
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
Detect whether the file is inside a pipenv, and set the executable to `pipenv`
|
||||||
|
if true. This is overridden by a manually-set executable.
|
||||||
|
|
||||||
|
*ale-options.python_pyrefly_auto_poetry*
|
||||||
|
*g:ale_python_pyrefly_auto_poetry*
|
||||||
|
*b:ale_python_pyrefly_auto_poetry*
|
||||||
|
python_pyrefly_auto_poetry
|
||||||
|
g:ale_python_pyrefly_auto_poetry
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
Detect whether the file is inside a poetry, and set the executable to `poetry`
|
||||||
|
if true. This is overridden by a manually-set executable.
|
||||||
|
|
||||||
|
*ale-options.python_pyrefly_auto_uv*
|
||||||
|
*g:ale_python_pyrefly_auto_uv*
|
||||||
|
*b:ale_python_pyrefly_auto_uv*
|
||||||
|
python_pyrefly_auto_uv
|
||||||
|
g:ale_python_pyrefly_auto_uv
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
Set the executable to `uv` if true. This is overridden by a manually-set
|
||||||
|
executable.
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
pyright *ale-python-pyright*
|
pyright *ale-python-pyright*
|
||||||
|
|
||||||
|
|||||||
79
doc/ale-roc.txt
Normal file
79
doc/ale-roc.txt
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
===============================================================================
|
||||||
|
ALE Roc Integration *ale-roc-options*
|
||||||
|
*ale-integration-roc*
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
roc_language_server *ale-roc-roc-language-server*
|
||||||
|
|
||||||
|
*ale-options.roc_roc_language_server_executable*
|
||||||
|
*g:ale_roc_roc_language_server_executable*
|
||||||
|
*b:ale_roc_roc_language_server_executable*
|
||||||
|
roc_roc_language_server_executable
|
||||||
|
g:ale_roc_roc_language_server_executable
|
||||||
|
Type: |String|
|
||||||
|
Default: `'roc_language_server'`
|
||||||
|
|
||||||
|
This variable can be modified to change the executable path for
|
||||||
|
`roc_language_server`.
|
||||||
|
|
||||||
|
*ale-options.roc_roc_language_server_config*
|
||||||
|
*g:ale_roc_roc_language_server_config*
|
||||||
|
*b:ale_roc_roc_language_server_config*
|
||||||
|
roc_roc_language_server_config
|
||||||
|
g:ale_roc_roc_language_server_config
|
||||||
|
Type: |Dictionary|
|
||||||
|
Default: `{}`
|
||||||
|
|
||||||
|
Dictionary with configuration settings for roc_language_server.
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
roc_format *ale-roc-roc-format*
|
||||||
|
|
||||||
|
*ale-options.roc_roc_format_executable*
|
||||||
|
*g:ale_roc_roc_format_executable*
|
||||||
|
*b:ale_roc_roc_format_executable*
|
||||||
|
roc_roc_format_executable
|
||||||
|
g:ale_roc_roc_format_executable
|
||||||
|
Type: |String|
|
||||||
|
Default: `'roc'`
|
||||||
|
|
||||||
|
This variable can be modified to change the executable path for `roc`.
|
||||||
|
|
||||||
|
*ale-options.roc_roc_format_options*
|
||||||
|
*g:ale_roc_roc_format_options*
|
||||||
|
*b:ale_roc_roc_format_options*
|
||||||
|
roc_roc_format_options
|
||||||
|
g:ale_roc_roc_format_options
|
||||||
|
Type: String
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
Additional flags for `roc format`.
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
roc_annotate *ale-roc-roc-annotate*
|
||||||
|
|
||||||
|
*ale-options.roc_roc_annotate_executable*
|
||||||
|
*g:ale_roc_roc_annotate_executable*
|
||||||
|
*b:ale_roc_roc_annotate_executable*
|
||||||
|
roc_roc_annotate_executable
|
||||||
|
g:ale_roc_roc_annotate_executable
|
||||||
|
Type: |String|
|
||||||
|
Default: `'roc'`
|
||||||
|
|
||||||
|
This variable can be modified to change the executable path for `roc`.
|
||||||
|
|
||||||
|
*ale-options.roc_roc_annotate_options*
|
||||||
|
*g:ale_roc_roc_annotate_options*
|
||||||
|
*b:ale_roc_roc_annotate_options*
|
||||||
|
roc_roc_annotate_options
|
||||||
|
g:ale_roc_roc_annotate_options
|
||||||
|
Type: String
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
Additional flags for `roc format annotate`.
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||||
@@ -60,6 +60,8 @@ Notes:
|
|||||||
* `bibclean`
|
* `bibclean`
|
||||||
* Bicep
|
* Bicep
|
||||||
* `bicep`
|
* `bicep`
|
||||||
|
* Bindzone
|
||||||
|
* `checkzone` (named-checkzone)
|
||||||
* BitBake
|
* BitBake
|
||||||
* `oelint-adv`
|
* `oelint-adv`
|
||||||
* Bourne Shell
|
* Bourne Shell
|
||||||
@@ -370,6 +372,8 @@ Notes:
|
|||||||
* `textlint`
|
* `textlint`
|
||||||
* `vale`
|
* `vale`
|
||||||
* `write-good`
|
* `write-good`
|
||||||
|
* Lean 4
|
||||||
|
* `lake`
|
||||||
* Less
|
* Less
|
||||||
* `lessc`
|
* `lessc`
|
||||||
* `prettier`
|
* `prettier`
|
||||||
@@ -541,6 +545,7 @@ Notes:
|
|||||||
* `pylint`!!
|
* `pylint`!!
|
||||||
* `pylsp`
|
* `pylsp`
|
||||||
* `pyre`
|
* `pyre`
|
||||||
|
* `pyrefly`
|
||||||
* `pyright`
|
* `pyright`
|
||||||
* `refurb`
|
* `refurb`
|
||||||
* `reorder-python-imports`
|
* `reorder-python-imports`
|
||||||
@@ -584,6 +589,10 @@ Notes:
|
|||||||
* `write-good`
|
* `write-good`
|
||||||
* Robot
|
* Robot
|
||||||
* `rflint`
|
* `rflint`
|
||||||
|
* Roc
|
||||||
|
* roc_annotate
|
||||||
|
* roc_format
|
||||||
|
* roc_language_server
|
||||||
* RPM spec
|
* RPM spec
|
||||||
* `rpmlint`
|
* `rpmlint`
|
||||||
* Ruby
|
* Ruby
|
||||||
|
|||||||
33
doc/ale.txt
33
doc/ale.txt
@@ -1192,13 +1192,13 @@ g:ale_detail_to_floating_preview
|
|||||||
*b:ale_disable_lsp*
|
*b:ale_disable_lsp*
|
||||||
disable_lsp
|
disable_lsp
|
||||||
g:ale_disable_lsp
|
g:ale_disable_lsp
|
||||||
Type: |Number| OR |String|
|
Type: |Boolean| OR |Number| OR |String|
|
||||||
Default: `'auto'`
|
Default: `'auto'`
|
||||||
|
|
||||||
When this option is set to `'auto'`, ALE will automatically disable linters
|
When this option is set to `'auto'`, ALE will automatically disable linters
|
||||||
that it detects as having already been configured with the `nvim-lspconfig`
|
that it detects as having already been configured with the `nvim-lspconfig`
|
||||||
plugin. When this option is set to `1`, ALE ignores all linters powered by
|
plugin. When this option is set to `true` or `1`, ALE ignores all linters
|
||||||
LSP, and also `tsserver`.
|
powered by LSP, and also `tsserver`.
|
||||||
|
|
||||||
Any linters that are disabled will also not be usable for LSP functionality
|
Any linters that are disabled will also not be usable for LSP functionality
|
||||||
other than just linting.
|
other than just linting.
|
||||||
@@ -1735,6 +1735,7 @@ g:ale_linter_aliases
|
|||||||
|
|
||||||
{
|
{
|
||||||
\ 'Dockerfile': 'dockerfile',
|
\ 'Dockerfile': 'dockerfile',
|
||||||
|
\ 'bash': 'sh',
|
||||||
\ 'csh': 'sh',
|
\ 'csh': 'sh',
|
||||||
\ 'javascriptreact': ['javascript', 'jsx'],
|
\ 'javascriptreact': ['javascript', 'jsx'],
|
||||||
\ 'plaintex': 'tex',
|
\ 'plaintex': 'tex',
|
||||||
@@ -2296,17 +2297,18 @@ g:ale_root
|
|||||||
Type: |Dictionary| or |String|
|
Type: |Dictionary| or |String|
|
||||||
Default: `{}`
|
Default: `{}`
|
||||||
|
|
||||||
This option is used to determine the project root for a linter. If the value
|
This option is used to determine the project root for a linter. When set to a
|
||||||
is a |Dictionary|, it maps a linter to either a |String| containing the
|
|String| it will be used for all linters. When set to a |Dictionary|, the
|
||||||
project root or a |Funcref| to call to look up the root. The |Funcref| is
|
keys are linter names and the values are either |Strings| containing project
|
||||||
provided the buffer number as its argument.
|
roots or |Funcref|s which are passed the buffer number.
|
||||||
|
|
||||||
The buffer-specific variable may additionally be a string containing the
|
The buffer-specific variable may additionally be a |String| containing the
|
||||||
project root itself.
|
project root itself.
|
||||||
|
|
||||||
If neither variable yields a result, a linter-specific function is invoked to
|
If a value can be found from either variable, ALE uses it directly and skips
|
||||||
detect a project root. If this, too, yields no result, and the linter is an
|
searching for a project root. If no value is found, a linter-specific
|
||||||
LSP linter, it will not run.
|
function is invoked to detect a project root. If this, too, yields no result
|
||||||
|
and the linter is an LSP linter, it will not run.
|
||||||
|
|
||||||
*ale-options.save_hidden*
|
*ale-options.save_hidden*
|
||||||
*g:ale_save_hidden*
|
*g:ale_save_hidden*
|
||||||
@@ -3360,6 +3362,8 @@ documented in additional help files.
|
|||||||
bicep...................................|ale-bicep-options|
|
bicep...................................|ale-bicep-options|
|
||||||
bicep.................................|ale-bicep-bicep|
|
bicep.................................|ale-bicep-bicep|
|
||||||
az_bicep..............................|ale-bicep-az_bicep|
|
az_bicep..............................|ale-bicep-az_bicep|
|
||||||
|
bindzone................................|ale-bindzone-options|
|
||||||
|
checkzone.............................|ale-bindzone-checkzone|
|
||||||
bitbake.................................|ale-bitbake-options|
|
bitbake.................................|ale-bitbake-options|
|
||||||
oelint-adv............................|ale-bitbake-oelint_adv|
|
oelint-adv............................|ale-bitbake-oelint_adv|
|
||||||
c.......................................|ale-c-options|
|
c.......................................|ale-c-options|
|
||||||
@@ -3631,6 +3635,8 @@ documented in additional help files.
|
|||||||
cspell................................|ale-latex-cspell|
|
cspell................................|ale-latex-cspell|
|
||||||
write-good............................|ale-latex-write-good|
|
write-good............................|ale-latex-write-good|
|
||||||
textlint..............................|ale-latex-textlint|
|
textlint..............................|ale-latex-textlint|
|
||||||
|
lean....................................|ale-lean-options|
|
||||||
|
lake..................................|ale-lean-lake|
|
||||||
less....................................|ale-less-options|
|
less....................................|ale-less-options|
|
||||||
lessc.................................|ale-less-lessc|
|
lessc.................................|ale-less-lessc|
|
||||||
prettier..............................|ale-less-prettier|
|
prettier..............................|ale-less-prettier|
|
||||||
@@ -3783,6 +3789,7 @@ documented in additional help files.
|
|||||||
pylint................................|ale-python-pylint|
|
pylint................................|ale-python-pylint|
|
||||||
pylsp.................................|ale-python-pylsp|
|
pylsp.................................|ale-python-pylsp|
|
||||||
pyre..................................|ale-python-pyre|
|
pyre..................................|ale-python-pyre|
|
||||||
|
pyrefly...............................|ale-python-pyrefly|
|
||||||
pyright...............................|ale-python-pyright|
|
pyright...............................|ale-python-pyright|
|
||||||
refurb................................|ale-python-refurb|
|
refurb................................|ale-python-refurb|
|
||||||
reorder-python-imports................|ale-python-reorder_python_imports|
|
reorder-python-imports................|ale-python-reorder_python_imports|
|
||||||
@@ -3817,6 +3824,10 @@ documented in additional help files.
|
|||||||
write-good............................|ale-restructuredtext-write-good|
|
write-good............................|ale-restructuredtext-write-good|
|
||||||
robot...................................|ale-robot-options|
|
robot...................................|ale-robot-options|
|
||||||
rflint................................|ale-robot-rflint|
|
rflint................................|ale-robot-rflint|
|
||||||
|
roc.....................................|ale-roc-options|
|
||||||
|
roc_language_server...................|ale-roc-roc-language-server|
|
||||||
|
roc_format............................|ale-roc-roc-format|
|
||||||
|
roc_annotate..........................|ale-roc-roc-annotate|
|
||||||
ruby....................................|ale-ruby-options|
|
ruby....................................|ale-ruby-options|
|
||||||
brakeman..............................|ale-ruby-brakeman|
|
brakeman..............................|ale-ruby-brakeman|
|
||||||
cspell................................|ale-ruby-cspell|
|
cspell................................|ale-ruby-cspell|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ module.send = function(buffer, loclist)
|
|||||||
local local_cfg = { priority = sign_priority }
|
local local_cfg = { priority = sign_priority }
|
||||||
local global_cfg = vim.diagnostic.config().signs
|
local global_cfg = vim.diagnostic.config().signs
|
||||||
|
|
||||||
if type(global_cfg) == "boolean" then
|
if global_cfg == false or global_cfg == true or global_cfg == nil then
|
||||||
signs = local_cfg
|
signs = local_cfg
|
||||||
elseif type(global_cfg) == "table" then
|
elseif type(global_cfg) == "table" then
|
||||||
signs = vim.tbl_extend("force", global_cfg, local_cfg)
|
signs = vim.tbl_extend("force", global_cfg, local_cfg)
|
||||||
|
|||||||
@@ -150,12 +150,14 @@ module.send_message = function(args)
|
|||||||
success, request_id = client.request(
|
success, request_id = client.request(
|
||||||
args.method,
|
args.method,
|
||||||
args.params,
|
args.params,
|
||||||
|
---@diagnostic disable-next-line: param-type-mismatch
|
||||||
function(_, result, _, _)
|
function(_, result, _, _)
|
||||||
vim.fn["ale#lsp#HandleResponse"](client.name, {
|
vim.fn["ale#lsp#HandleResponse"](client.name, {
|
||||||
id = request_id,
|
id = request_id,
|
||||||
result = result,
|
result = result,
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
|
---@diagnostic disable-next-line: param-type-mismatch
|
||||||
-1
|
-1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ formatting.
|
|||||||
* [bibclean](http://ftp.math.utah.edu/pub/bibclean/)
|
* [bibclean](http://ftp.math.utah.edu/pub/bibclean/)
|
||||||
* Bicep
|
* Bicep
|
||||||
* [bicep](https://github.com/Azure/bicep) :floppy_disk:
|
* [bicep](https://github.com/Azure/bicep) :floppy_disk:
|
||||||
|
* Bindzone
|
||||||
|
* [checkzone](https://bind9.readthedocs.io/en/stable/manpages.html#named-checkzone-zone-file-validation-tool)
|
||||||
* BitBake
|
* BitBake
|
||||||
* [oelint-adv](https://github.com/priv-kweihmann/oelint-adv)
|
* [oelint-adv](https://github.com/priv-kweihmann/oelint-adv)
|
||||||
* Bourne Shell
|
* Bourne Shell
|
||||||
@@ -379,6 +381,8 @@ formatting.
|
|||||||
* [textlint](https://textlint.github.io/)
|
* [textlint](https://textlint.github.io/)
|
||||||
* [vale](https://github.com/ValeLint/vale)
|
* [vale](https://github.com/ValeLint/vale)
|
||||||
* [write-good](https://github.com/btford/write-good)
|
* [write-good](https://github.com/btford/write-good)
|
||||||
|
* Lean 4
|
||||||
|
* [lake](https://github.com/leanprover/lean4)
|
||||||
* Less
|
* Less
|
||||||
* [lessc](https://www.npmjs.com/package/less)
|
* [lessc](https://www.npmjs.com/package/less)
|
||||||
* [prettier](https://github.com/prettier/prettier)
|
* [prettier](https://github.com/prettier/prettier)
|
||||||
@@ -550,6 +554,7 @@ formatting.
|
|||||||
* [pylint](https://www.pylint.org/) :floppy_disk:
|
* [pylint](https://www.pylint.org/) :floppy_disk:
|
||||||
* [pylsp](https://github.com/python-lsp/python-lsp-server) :warning:
|
* [pylsp](https://github.com/python-lsp/python-lsp-server) :warning:
|
||||||
* [pyre](https://github.com/facebook/pyre-check) :warning:
|
* [pyre](https://github.com/facebook/pyre-check) :warning:
|
||||||
|
* [pyrefly](https://github.com/facebook/pyrefly) :warning:
|
||||||
* [pyright](https://github.com/microsoft/pyright)
|
* [pyright](https://github.com/microsoft/pyright)
|
||||||
* [refurb](https://github.com/dosisod/refurb) :floppy_disk:
|
* [refurb](https://github.com/dosisod/refurb) :floppy_disk:
|
||||||
* [reorder-python-imports](https://github.com/asottile/reorder_python_imports)
|
* [reorder-python-imports](https://github.com/asottile/reorder_python_imports)
|
||||||
@@ -593,6 +598,10 @@ formatting.
|
|||||||
* [write-good](https://github.com/btford/write-good)
|
* [write-good](https://github.com/btford/write-good)
|
||||||
* Robot
|
* Robot
|
||||||
* [rflint](https://github.com/boakley/robotframework-lint)
|
* [rflint](https://github.com/boakley/robotframework-lint)
|
||||||
|
* Roc
|
||||||
|
* [roc_annotate](https://github.com/roc-lang/roc)
|
||||||
|
* [roc_format](https://github.com/roc-lang/roc)
|
||||||
|
* [roc_language_server](https://github.com/roc-lang/roc)
|
||||||
* RPM spec
|
* RPM spec
|
||||||
* [rpmlint](https://github.com/rpm-software-management/rpmlint) :warning: (see `:help ale-integration-spec`)
|
* [rpmlint](https://github.com/rpm-software-management/rpmlint) :warning: (see `:help ale-integration-spec`)
|
||||||
* Ruby
|
* Ruby
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ Before:
|
|||||||
let g:ale_completion_enabled = 0
|
let g:ale_completion_enabled = 0
|
||||||
let g:ale_completion_autoimport = 0
|
let g:ale_completion_autoimport = 0
|
||||||
let g:ale_completion_max_suggestions = 50
|
let g:ale_completion_max_suggestions = 50
|
||||||
let g:ale_linters = {'typescript': ['tsserver'], 'python': ['pyre']}
|
let g:ale_linters = {'typescript': ['tsserver'], 'python': ['pyrefly']}
|
||||||
unlet! b:ale_linters
|
unlet! b:ale_linters
|
||||||
|
|
||||||
let g:server_started_value = 1
|
let g:server_started_value = 1
|
||||||
|
|||||||
@@ -45,7 +45,8 @@ Execute(The clangformat callback should include style options as well):
|
|||||||
\ {
|
\ {
|
||||||
\ 'command': ale#Escape(g:ale_c_clangformat_executable)
|
\ 'command': ale#Escape(g:ale_c_clangformat_executable)
|
||||||
\ . ' --assume-filename=' . ale#Escape(bufname(bufnr('')))
|
\ . ' --assume-filename=' . ale#Escape(bufname(bufnr('')))
|
||||||
\ . ' --some-option' . " -style='{BasedOnStyle: Microsoft, ColumnLimit:80,}'",
|
\ . ' --some-option'
|
||||||
|
\ . ' -style=' . ale#Escape(g:ale_c_clangformat_style_option)
|
||||||
\ },
|
\ },
|
||||||
\ ale#fixers#clangformat#Fix(bufnr(''))
|
\ ale#fixers#clangformat#Fix(bufnr(''))
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ Execute(Emacs executable should be configurable):
|
|||||||
let b:ale_erlang_erlang_mode_emacs_executable = '/path/to/emacs'
|
let b:ale_erlang_erlang_mode_emacs_executable = '/path/to/emacs'
|
||||||
AssertEqual 0, stridx(Fixer('command'), ale#Escape('/path/to/emacs'))
|
AssertEqual 0, stridx(Fixer('command'), ale#Escape('/path/to/emacs'))
|
||||||
|
|
||||||
|
Execute(enable-local-variables should be :safe):
|
||||||
|
Assert Fixer('command') =~# '\m\<enable-local-variables :safe\>'
|
||||||
|
|
||||||
Execute(erlang-indent-level should be 4 by default):
|
Execute(erlang-indent-level should be 4 by default):
|
||||||
Assert Fixer('command') =~# '\m\<erlang-indent-level 4\>'
|
Assert Fixer('command') =~# '\m\<erlang-indent-level 4\>'
|
||||||
|
|
||||||
|
|||||||
@@ -1,48 +1,80 @@
|
|||||||
Before:
|
Before:
|
||||||
|
call ale#assert#SetUpFixerTest('go', 'golangci_lint')
|
||||||
Save g:ale_go_go111module
|
Save g:ale_go_go111module
|
||||||
Save g:ale_go_golangci_lint_executable
|
Save g:ale_go_golangci_formatter_executable
|
||||||
Save g:ale_go_golangci_lint_options
|
Save g:ale_go_golangci_formatter_options
|
||||||
Save g:ale_go_golangci_lint_package
|
|
||||||
|
|
||||||
" Use an invalid global executable, so we don't match it.
|
|
||||||
let g:ale_go_golangci_lint_executable = 'xxxinvalid'
|
|
||||||
let g:ale_go_golangci_lint_options = ''
|
|
||||||
|
|
||||||
call ale#test#SetDirectory('/testplugin/test/fixers')
|
call ale#test#SetDirectory('/testplugin/test/fixers')
|
||||||
call ale#test#SetFilename('../test-files/go/testfile.go')
|
call ale#test#SetFilename('../test-files/go/testfile.go')
|
||||||
|
|
||||||
After:
|
After:
|
||||||
Restore
|
call ale#test#RestoreDirectory()
|
||||||
|
call ale#assert#TearDownFixerTest()
|
||||||
|
|
||||||
unlet! b:ale_go_go111module
|
unlet! b:ale_go_go111module
|
||||||
|
|
||||||
call ale#test#RestoreDirectory()
|
Execute(The golangci-lint callback should return the correct default values with v1):
|
||||||
|
|
||||||
Execute(The golangci-lint callback should return the correct default values):
|
GivenCommandOutput ['golangci-lint has version 1.64.8 built with go1.23.0']
|
||||||
|
|
||||||
AssertEqual
|
AssertFixer
|
||||||
\ {
|
\ {
|
||||||
\ 'command': ale#Escape('xxxinvalid') . ' run --fix',
|
\ 'command': ale#Escape('golangci-lint') . ' run --fix ' . ale#Escape('testfile.go'),
|
||||||
|
\ }
|
||||||
|
|
||||||
|
Execute(The golangci-lint callback should include custom golangci-lint options with v1):
|
||||||
|
let g:ale_go_golangci_formatter_options = "--new --config /dev/null"
|
||||||
|
|
||||||
|
GivenCommandOutput ['golangci-lint has version 1.64.8 built with go1.23.0']
|
||||||
|
|
||||||
|
AssertFixer
|
||||||
|
\ {
|
||||||
|
\ 'command': ale#Escape('golangci-lint')
|
||||||
|
\ . ' run --fix ' . g:ale_go_golangci_formatter_options . ' ' . ale#Escape('testfile.go'),
|
||||||
\ },
|
\ },
|
||||||
\ ale#fixers#golangci_lint#Fix(bufnr(''))
|
|
||||||
|
|
||||||
Execute(The golangci-lint callback should include custom golangci-lint options):
|
Execute(The golangci-lint callback should override executable with v1):
|
||||||
let g:ale_go_golangci_lint_options = "--new --config /dev/null"
|
let g:ale_go_golangci_formatter_executable = 'xxxinvalid'
|
||||||
|
|
||||||
AssertEqual
|
GivenCommandOutput ['golangci-lint has version 1.64.8 built with go1.23.0']
|
||||||
|
|
||||||
|
AssertFixer
|
||||||
\ {
|
\ {
|
||||||
\ 'command': ale#Escape('xxxinvalid')
|
\ 'command': ale#Escape('xxxinvalid')
|
||||||
\ . ' run ' . g:ale_go_golangci_lint_options . ' --fix',
|
\ . ' run --fix '
|
||||||
|
\ . g:ale_go_golangci_formatter_options
|
||||||
|
\ . ' ' . ale#Escape('testfile.go'),
|
||||||
\ },
|
\ },
|
||||||
\ ale#fixers#golangci_lint#Fix(bufnr(''))
|
|
||||||
|
|
||||||
Execute(The golangci-lint callback should support per-file mode):
|
Execute(The golangci-lint callback should return the correct default values with v2):
|
||||||
let g:ale_go_golangci_lint_package = 0
|
|
||||||
|
|
||||||
AssertEqual
|
GivenCommandOutput ['golangci-lint has version 2.1.5 built with go1.23.0']
|
||||||
|
|
||||||
|
AssertFixer
|
||||||
|
\ {
|
||||||
|
\ 'command': ale#Escape('golangci-lint') . ' fmt --stdin ',
|
||||||
|
\ }
|
||||||
|
|
||||||
|
Execute(The golangci-lint callback should include custom golangci-lint options with v2):
|
||||||
|
let g:ale_go_golangci_formatter_options = "--new --config /dev/null"
|
||||||
|
|
||||||
|
GivenCommandOutput ['golangci-lint has version 2.1.5 built with go1.23.0']
|
||||||
|
|
||||||
|
AssertFixer
|
||||||
|
\ {
|
||||||
|
\ 'command': ale#Escape('golangci-lint')
|
||||||
|
\ . ' fmt --stdin ' . g:ale_go_golangci_formatter_options,
|
||||||
|
\ },
|
||||||
|
|
||||||
|
Execute(The golangci-lint callback should override executable with v2):
|
||||||
|
let g:ale_go_golangci_formatter_executable = 'xxxinvalid'
|
||||||
|
|
||||||
|
GivenCommandOutput ['golangci-lint has version 2.1.5 built with go1.23.0']
|
||||||
|
|
||||||
|
AssertFixer
|
||||||
\ {
|
\ {
|
||||||
\ 'command': ale#Escape('xxxinvalid')
|
\ 'command': ale#Escape('xxxinvalid')
|
||||||
\ . ' run '
|
\ . ' fmt --stdin '
|
||||||
\ . g:ale_go_golangci_lint_options
|
\ . g:ale_go_golangci_formatter_options
|
||||||
\ . ' --fix ' . ale#Escape('testfile.go'),
|
|
||||||
\ },
|
\ },
|
||||||
\ ale#fixers#golangci_lint#Fix(bufnr(''))
|
|
||||||
|
|||||||
20
test/fixers/test_roc_annotate_fixer_callback.vader
Normal file
20
test/fixers/test_roc_annotate_fixer_callback.vader
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpFixerTest('roc', 'roc_annotate')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownFixerTest()
|
||||||
|
|
||||||
|
Execute(The roc annotate callback should return the correct default values):
|
||||||
|
AssertFixer {
|
||||||
|
\ 'command': 'roc format annotate %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
|
||||||
|
Execute(The roc annotate callback should allow a custom executable):
|
||||||
|
let g:ale_roc_roc_annotate_executable = 'foo/bar'
|
||||||
|
|
||||||
|
AssertFixer {
|
||||||
|
\ 'command': 'foo/bar format annotate %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
|
||||||
20
test/fixers/test_roc_format_fixer_callback.vader
Normal file
20
test/fixers/test_roc_format_fixer_callback.vader
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpFixerTest('roc', 'roc_format')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownFixerTest()
|
||||||
|
|
||||||
|
Execute(The roc format callback should return the correct default values):
|
||||||
|
AssertFixer {
|
||||||
|
\ 'command': 'roc format %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
|
||||||
|
Execute(The roc format callback should allow a custom executable):
|
||||||
|
let g:ale_roc_roc_format_executable = 'foo/bar'
|
||||||
|
|
||||||
|
AssertFixer {
|
||||||
|
\ 'command': 'foo/bar format %t',
|
||||||
|
\ 'read_temporary_file': 1,
|
||||||
|
\}
|
||||||
|
|
||||||
26
test/handler/test_bindzone_checkzone.vader
Normal file
26
test/handler/test_bindzone_checkzone.vader
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
Before:
|
||||||
|
runtime ale_linters/bindzone/checkzone.vim
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#linter#Reset()
|
||||||
|
|
||||||
|
Execute(The checkzone handler should handle basic warnings):
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 2,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': 'unknown RR type ''fasd''',
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'text': '_some_srv._tcp.example.com/SRV ''some.example.com'' (out of zone) has no addresses records (A or AAAA)',
|
||||||
|
\ },
|
||||||
|
\ ],
|
||||||
|
\ ale_linters#bindzone#checkzone#Handle(1, [
|
||||||
|
\ 'zone example.com/IN: _some_srv._tcp.example.com/SRV ''some.example.com'' (out of zone) has no addresses records (A or AAAA)',
|
||||||
|
\ 'zone example.com/IN: loaded serial 2025050400',
|
||||||
|
\ 'zone example.com/IN: not loaded due to errors',
|
||||||
|
\ '/tmp/vb3wXsu/2/example.com:2: unknown RR type ''fasd''',
|
||||||
|
\ ])
|
||||||
@@ -17,7 +17,7 @@ Execute(The hadolint handler should handle a normal example):
|
|||||||
\ 'col': 0,
|
\ 'col': 0,
|
||||||
\ 'type': 'W',
|
\ 'type': 'W',
|
||||||
\ 'code': 'DL3006',
|
\ 'code': 'DL3006',
|
||||||
\ 'text': "DL3006: Always tag the version of an image explicitly",
|
\ 'text': 'Always tag the version of an image explicitly',
|
||||||
\ 'detail': "DL3006 ( https://github.com/hadolint/hadolint/wiki/DL3006 )\n\nAlways tag the version of an image explicitly",
|
\ 'detail': "DL3006 ( https://github.com/hadolint/hadolint/wiki/DL3006 )\n\nAlways tag the version of an image explicitly",
|
||||||
\ },
|
\ },
|
||||||
\ {
|
\ {
|
||||||
@@ -25,7 +25,7 @@ Execute(The hadolint handler should handle a normal example):
|
|||||||
\ 'col': 0,
|
\ 'col': 0,
|
||||||
\ 'type': 'W',
|
\ 'type': 'W',
|
||||||
\ 'code': 'DL3033',
|
\ 'code': 'DL3033',
|
||||||
\ 'text': "DL3033: Specify version with `yum install -y <package>-<version>`.",
|
\ 'text': 'Specify version with `yum install -y <package>-<version>`.',
|
||||||
\ 'detail': "DL3033 ( https://github.com/hadolint/hadolint/wiki/DL3033 )\n\nSpecify version with `yum install -y <package>-<version>`.",
|
\ 'detail': "DL3033 ( https://github.com/hadolint/hadolint/wiki/DL3033 )\n\nSpecify version with `yum install -y <package>-<version>`.",
|
||||||
\ },
|
\ },
|
||||||
\ {
|
\ {
|
||||||
@@ -33,7 +33,7 @@ Execute(The hadolint handler should handle a normal example):
|
|||||||
\ 'col': 0,
|
\ 'col': 0,
|
||||||
\ 'type': 'W',
|
\ 'type': 'W',
|
||||||
\ 'code': 'SC2039',
|
\ 'code': 'SC2039',
|
||||||
\ 'text': "SC2039: In POSIX sh, brace expansion is undefined.",
|
\ 'text': 'In POSIX sh, brace expansion is undefined.',
|
||||||
\ 'detail': "SC2039 ( https://github.com/koalaman/shellcheck/wiki/SC2039 )\n\nIn POSIX sh, brace expansion is undefined.",
|
\ 'detail': "SC2039 ( https://github.com/koalaman/shellcheck/wiki/SC2039 )\n\nIn POSIX sh, brace expansion is undefined.",
|
||||||
\ },
|
\ },
|
||||||
\ ],
|
\ ],
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ Execute(The mypy handler should handle Windows names with spaces):
|
|||||||
\ {
|
\ {
|
||||||
\ 'lnum': 4,
|
\ 'lnum': 4,
|
||||||
\ 'col': 0,
|
\ 'col': 0,
|
||||||
\ 'filename': ale#path#Simplify('C:\something\with spaces.py'),
|
\ 'filename': ale#path#GetAbsPath(getcwd(), 'C:\something\with spaces.py'),
|
||||||
\ 'type': 'E',
|
\ 'type': 'E',
|
||||||
\ 'text': 'No library stub file for module ''django.db''',
|
\ 'text': 'No library stub file for module ''django.db''',
|
||||||
\ },
|
\ },
|
||||||
|
|||||||
@@ -27,6 +27,22 @@ Execute(The nix handler should parse nix-instantiate error messages correctly):
|
|||||||
\ "@nix {\"unrelated\":\"message\"}"
|
\ "@nix {\"unrelated\":\"message\"}"
|
||||||
\ ])
|
\ ])
|
||||||
|
|
||||||
|
Execute(The nix handler should parse nix-instantiate error messages with ANSI color codes correctly):
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 3,
|
||||||
|
\ 'col': 5,
|
||||||
|
\ 'type': 'E',
|
||||||
|
\ 'text': "undefined variable 'foo'",
|
||||||
|
\ },
|
||||||
|
\
|
||||||
|
\ ],
|
||||||
|
\ ale_linters#nix#nix#Handle(bufnr(''), [
|
||||||
|
\ "@nix {\"line\":3,\"column\":5,\"raw_msg\":\"undefined variable '\\u001b[35;1mfoo\\u001b[0m'\"}",
|
||||||
|
\ "@nix {\"unrelated\":\"message\"}"
|
||||||
|
\ ])
|
||||||
|
|
||||||
Execute(The nix handler should parse message from old nix-instantiate correctly):
|
Execute(The nix handler should parse message from old nix-instantiate correctly):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ [
|
\ [
|
||||||
|
|||||||
@@ -1,7 +1,18 @@
|
|||||||
Before:
|
Before:
|
||||||
|
Save g:ale_warn_about_trailing_blank_lines
|
||||||
|
Save g:ale_warn_about_trailing_whitespace
|
||||||
|
|
||||||
|
let g:ale_warn_about_trailing_blank_lines = 1
|
||||||
|
let g:ale_warn_about_trailing_whitespace = 1
|
||||||
|
|
||||||
runtime ale_linters/python/ruff.vim
|
runtime ale_linters/python/ruff.vim
|
||||||
|
|
||||||
After:
|
After:
|
||||||
|
Restore
|
||||||
|
|
||||||
|
unlet! b:ale_warn_about_trailing_blank_lines
|
||||||
|
unlet! b:ale_warn_about_trailing_whitespace
|
||||||
|
|
||||||
call ale#linter#Reset()
|
call ale#linter#Reset()
|
||||||
|
|
||||||
Execute(We should handle basic output of ruff correctly):
|
Execute(We should handle basic output of ruff correctly):
|
||||||
@@ -41,3 +52,66 @@ Execute(We should handle mixed error lines and JSON output from ruff):
|
|||||||
\ 'ERROR: oh noes!',
|
\ 'ERROR: oh noes!',
|
||||||
\ '{"cell":null,"code":"F821","end_location":{"column":8,"row":2},"filename":"/home/eduardo/Code/Python/test.py","fix":null,"location":{"column":1,"row":2},"message":"Undefined name example","noqa_row":2,"url":"https://docs.astral.sh/ruff/rules/undefined-name"}',
|
\ '{"cell":null,"code":"F821","end_location":{"column":8,"row":2},"filename":"/home/eduardo/Code/Python/test.py","fix":null,"location":{"column":1,"row":2},"message":"Undefined name example","noqa_row":2,"url":"https://docs.astral.sh/ruff/rules/undefined-name"}',
|
||||||
\ ])
|
\ ])
|
||||||
|
|
||||||
|
Execute(Warnings about trailing whitespace should be reported by default):
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 6,
|
||||||
|
\ 'col': 1,
|
||||||
|
\ 'end_lnum': 6,
|
||||||
|
\ 'end_col': 1,
|
||||||
|
\ 'code': 'W291',
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'text': 'who cares',
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 6,
|
||||||
|
\ 'col': 1,
|
||||||
|
\ 'end_lnum': 6,
|
||||||
|
\ 'end_col': 1,
|
||||||
|
\ 'code': 'W293',
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'text': 'who cares',
|
||||||
|
\ },
|
||||||
|
\ ],
|
||||||
|
\ ale_linters#python#ruff#Handle(bufnr(''), [
|
||||||
|
\ '{"cell":null,"code":"W291","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}',
|
||||||
|
\ '{"cell":null,"code":"W293","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}',
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
Execute(Disabling trailing whitespace warnings should work):
|
||||||
|
let b:ale_warn_about_trailing_whitespace = 0
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ [],
|
||||||
|
\ ale_linters#python#ruff#Handle(bufnr(''), [
|
||||||
|
\ '{"cell":null,"code":"W291","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}',
|
||||||
|
\ '{"cell":null,"code":"W293","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}',
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
Execute(Warnings about trailing blank lines should be reported by default):
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 6,
|
||||||
|
\ 'col': 1,
|
||||||
|
\ 'end_lnum': 6,
|
||||||
|
\ 'end_col': 1,
|
||||||
|
\ 'code': 'W391',
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'text': 'blank line at end of file',
|
||||||
|
\ },
|
||||||
|
\ ],
|
||||||
|
\ ale_linters#python#ruff#Handle(bufnr(''), [
|
||||||
|
\ '{"cell":null,"code":"W391","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"blank line at end of file","noqa_row":2,"url":""}',
|
||||||
|
\ ])
|
||||||
|
|
||||||
|
Execute(Disabling trailing blank line warnings should work):
|
||||||
|
let b:ale_warn_about_trailing_blank_lines = 0
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ [],
|
||||||
|
\ ale_linters#python#ruff#Handle(bufnr(''), [
|
||||||
|
\ '{"cell":null,"code":"W391","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"blank line at end of file","noqa_row":2,"url":""}',
|
||||||
|
\ ])
|
||||||
|
|||||||
19
test/linter/test_bindzone_checkzone.vader
Normal file
19
test/linter/test_bindzone_checkzone.vader
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('bindzone', 'checkzone')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The default command should be correct):
|
||||||
|
AssertLinter 'named-checkzone',
|
||||||
|
\ ale#Escape('named-checkzone') . ' -c IN example.com %t'
|
||||||
|
|
||||||
|
Execute(The default command should be overridden):
|
||||||
|
let b:ale_bindzone_checkzone_executable = '/bin/bind9-checkzone'
|
||||||
|
AssertLinter '/bin/bind9-checkzone',
|
||||||
|
\ ale#Escape('/bin/bind9-checkzone') . ' -c IN example.com %t'
|
||||||
|
|
||||||
|
Execute(The default options should be overridden):
|
||||||
|
let b:ale_bindzone_checkzone_options = '-c IN -d'
|
||||||
|
AssertLinter 'named-checkzone',
|
||||||
|
\ ale#Escape('named-checkzone') . ' -c IN -d example.com %t'
|
||||||
@@ -125,35 +125,35 @@ Execute(The flake8 callbacks should detect virtualenv directories):
|
|||||||
\ . ' --stdin-display-name %s -',
|
\ . ' --stdin-display-name %s -',
|
||||||
\]
|
\]
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via Manifest.in):
|
Execute(FindProjectRoot should detect the project root directory for namespace package via Manifest.in):
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_manifest/namespace/foo/bar.py')
|
call ale#test#SetFilename('../test-files/python/namespace_package_manifest/namespace/foo/bar.py')
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_manifest'),
|
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_manifest'),
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
\ ale#python#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via setup.cf):
|
Execute(FindProjectRoot should detect the project root directory for namespace package via setup.cf):
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_setup/namespace/foo/bar.py')
|
call ale#test#SetFilename('../test-files/python/namespace_package_setup/namespace/foo/bar.py')
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_setup'),
|
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_setup'),
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
\ ale#python#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via pytest.ini):
|
Execute(FindProjectRoot should ignore the location of pytest.ini):
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_pytest/namespace/foo/bar.py')
|
call ale#test#SetFilename('../test-files/python/namespace_package_pytest/namespace/foo/bar.py')
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_pytest'),
|
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_pytest/namespace'),
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
\ ale#python#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via tox.ini):
|
Execute(FindProjectRoot should detect the project root directory for namespace package via tox.ini):
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py')
|
call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py')
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_tox'),
|
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_tox'),
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
\ ale#python#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for non-namespace package):
|
Execute(FindProjectRoot should detect the project root directory for non-namespace package):
|
||||||
call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py')
|
call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py')
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
|
|||||||
@@ -111,41 +111,6 @@ Execute(The flakehell callbacks should detect virtualenv directories):
|
|||||||
\ . ' --stdin-display-name %s -',
|
\ . ' --stdin-display-name %s -',
|
||||||
\]
|
\]
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via Manifest.in):
|
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_manifest/namespace/foo/bar.py')
|
|
||||||
|
|
||||||
AssertEqual
|
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_manifest'),
|
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via setup.cf):
|
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_setup/namespace/foo/bar.py')
|
|
||||||
|
|
||||||
AssertEqual
|
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_setup'),
|
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via pytest.ini):
|
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_pytest/namespace/foo/bar.py')
|
|
||||||
|
|
||||||
AssertEqual
|
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_pytest'),
|
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for namespace package via tox.ini):
|
|
||||||
call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py')
|
|
||||||
|
|
||||||
AssertEqual
|
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_tox'),
|
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
|
||||||
|
|
||||||
Execute(The FindProjectRoot should detect the project root directory for non-namespace package):
|
|
||||||
call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py')
|
|
||||||
|
|
||||||
AssertEqual
|
|
||||||
\ ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir'),
|
|
||||||
\ ale#python#FindProjectRoot(bufnr(''))
|
|
||||||
|
|
||||||
" Some users currently run flakehell this way, so we should support it.
|
" Some users currently run flakehell this way, so we should support it.
|
||||||
Execute(Using `python -m flakehell` should be supported for running flakehell):
|
Execute(Using `python -m flakehell` should be supported for running flakehell):
|
||||||
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')
|
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ Before:
|
|||||||
call ale#assert#SetUpLinterTest('go', 'golangci_lint')
|
call ale#assert#SetUpLinterTest('go', 'golangci_lint')
|
||||||
call ale#test#SetFilename('test.go')
|
call ale#test#SetFilename('test.go')
|
||||||
|
|
||||||
|
" Test with version 1.64.8 by default
|
||||||
|
GivenCommandOutput ['golangci-lint has version 1.64.8 built with go1.23.0']
|
||||||
|
|
||||||
After:
|
After:
|
||||||
Restore
|
Restore
|
||||||
|
|
||||||
@@ -16,6 +19,18 @@ Execute(The golangci-lint defaults should be correct):
|
|||||||
AssertLinter 'golangci-lint',
|
AssertLinter 'golangci-lint',
|
||||||
\ ale#Escape('golangci-lint') . ' run --out-format=json --show-stats=0'
|
\ ale#Escape('golangci-lint') . ' run --out-format=json --show-stats=0'
|
||||||
|
|
||||||
|
Execute(The golangci-lint defaults should be correct with no version info):
|
||||||
|
GivenCommandOutput []
|
||||||
|
AssertLinterCwd '%s:h',
|
||||||
|
AssertLinter 'golangci-lint',
|
||||||
|
\ ale#Escape('golangci-lint') . ' run --out-format=json --show-stats=0'
|
||||||
|
|
||||||
|
Execute(The golangci-lint defaults should be correct with version 2):
|
||||||
|
GivenCommandOutput ['golangci-lint has version 2.0.2 built with go1.24.0']
|
||||||
|
AssertLinterCwd '%s:h',
|
||||||
|
AssertLinter 'golangci-lint',
|
||||||
|
\ ale#Escape('golangci-lint') . ' run --output.json.path stdout --output.text.path stderr --show-stats=0'
|
||||||
|
|
||||||
Execute(The golangci-lint callback should use a configured executable):
|
Execute(The golangci-lint callback should use a configured executable):
|
||||||
let b:ale_go_golangci_lint_executable = 'something else'
|
let b:ale_go_golangci_lint_executable = 'something else'
|
||||||
|
|
||||||
@@ -23,6 +38,14 @@ Execute(The golangci-lint callback should use a configured executable):
|
|||||||
\ ale#Escape('something else')
|
\ ale#Escape('something else')
|
||||||
\ . ' run --out-format=json --show-stats=0'
|
\ . ' run --out-format=json --show-stats=0'
|
||||||
|
|
||||||
|
Execute(The golangci-lint callback should use a configured version 2 executable):
|
||||||
|
GivenCommandOutput ['golangci-lint has version 2.0.0 built with go1.22.0']
|
||||||
|
let b:ale_go_golangci_lint_executable = 'something else'
|
||||||
|
|
||||||
|
AssertLinter 'something else',
|
||||||
|
\ ale#Escape('something else')
|
||||||
|
\ . ' run --output.json.path stdout --output.text.path stderr --show-stats=0'
|
||||||
|
|
||||||
Execute(The golangci-lint callback should use configured options):
|
Execute(The golangci-lint callback should use configured options):
|
||||||
let b:ale_go_golangci_lint_options = '--foobar'
|
let b:ale_go_golangci_lint_options = '--foobar'
|
||||||
|
|
||||||
|
|||||||
27
test/linter/test_lean_lake.vader
Normal file
27
test/linter/test_lean_lake.vader
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('lean', 'lake')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The default executable path should be correct):
|
||||||
|
AssertLinter 'lake', ale#Escape('lake') . ' serve'
|
||||||
|
|
||||||
|
Execute(The project root should be detected correctly without a lakefile):
|
||||||
|
AssertLSPProject '.'
|
||||||
|
|
||||||
|
Execute(The project root should be detected correctly from .toml):
|
||||||
|
call ale#test#SetFilename('../test-files/lean/lakefile_toml/lakefile.toml')
|
||||||
|
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/lean/lakefile_toml')
|
||||||
|
|
||||||
|
Execute(The project root should be detected correctly from .lean):
|
||||||
|
call ale#test#SetFilename('../test-files/lean/lakefile_lean/lakefile.lean')
|
||||||
|
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/lean/lakefile_lean')
|
||||||
|
|
||||||
|
Execute(The LSP values should be set correctly):
|
||||||
|
call ale#test#SetFilename('../test-files/lean/lakefile_lean/Main.lean')
|
||||||
|
|
||||||
|
AssertLSPLanguage 'lean'
|
||||||
|
AssertLSPOptions {}
|
||||||
|
AssertLSPConfig {}
|
||||||
|
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/lean/lakefile_lean')
|
||||||
69
test/linter/test_pyrefly.vader
Normal file
69
test/linter/test_pyrefly.vader
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('python', 'pyrefly')
|
||||||
|
let b:bin_dir = has('win32') ? 'Scripts' : 'bin'
|
||||||
|
|
||||||
|
After:
|
||||||
|
unlet! b:bin_dir
|
||||||
|
unlet! b:executable
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The pyrefly command callback should return default string):
|
||||||
|
call ale#test#SetFilename('./foo.py')
|
||||||
|
|
||||||
|
AssertLinter 'pyrefly', ale#Escape('pyrefly') . ' lsp'
|
||||||
|
|
||||||
|
Execute(The pyrefly executable should be configurable):
|
||||||
|
let g:ale_python_pyrefly_executable = '~/.local/bin/pyrefly'
|
||||||
|
|
||||||
|
AssertLinter '~/.local/bin/pyrefly',
|
||||||
|
\ ale#Escape('~/.local/bin/pyrefly') . ' lsp'
|
||||||
|
|
||||||
|
Execute(The pyrefly executable should be run from the virtualenv path):
|
||||||
|
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')
|
||||||
|
|
||||||
|
let b:executable = ale#path#Simplify(
|
||||||
|
\ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/pyrefly'
|
||||||
|
\)
|
||||||
|
|
||||||
|
AssertLinter b:executable, ale#Escape(b:executable) . ' lsp'
|
||||||
|
|
||||||
|
Execute(You should be able to override the pyrefly virtualenv lookup):
|
||||||
|
call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py')
|
||||||
|
|
||||||
|
let g:ale_python_pyrefly_use_global = 1
|
||||||
|
|
||||||
|
AssertLinter 'pyrefly', ale#Escape('pyrefly') . ' lsp'
|
||||||
|
|
||||||
|
Execute(Setting executable to 'pipenv' appends 'run pyrefly'):
|
||||||
|
let g:ale_python_pyrefly_executable = 'path/to/pipenv'
|
||||||
|
call ale#test#SetFilename('../test-files/dummy')
|
||||||
|
|
||||||
|
AssertLinter 'path/to/pipenv',
|
||||||
|
\ ale#Escape('path/to/pipenv') . ' run pyrefly lsp'
|
||||||
|
|
||||||
|
Execute(Pipenv is detected when python_pyrefly_auto_pipenv is set):
|
||||||
|
let g:ale_python_pyrefly_auto_pipenv = 1
|
||||||
|
call ale#test#SetFilename('../test-files/python/pipenv/whatever.py')
|
||||||
|
|
||||||
|
AssertLinter 'pipenv',
|
||||||
|
\ ale#Escape('pipenv') . ' run pyrefly lsp'
|
||||||
|
|
||||||
|
Execute(Setting executable to 'poetry' appends 'run pyrefly lsp'):
|
||||||
|
let g:ale_python_pyrefly_executable = 'path/to/poetry'
|
||||||
|
|
||||||
|
AssertLinter 'path/to/poetry',
|
||||||
|
\ ale#Escape('path/to/poetry') . ' run pyrefly lsp'
|
||||||
|
|
||||||
|
Execute(Poetry is detected when python_pyrefly_auto_poetry is set):
|
||||||
|
let g:ale_python_pyrefly_auto_poetry = 1
|
||||||
|
call ale#test#SetFilename('../test-files/python/poetry/whatever.py')
|
||||||
|
|
||||||
|
AssertLinter 'poetry',
|
||||||
|
\ ale#Escape('poetry') . ' run pyrefly lsp'
|
||||||
|
|
||||||
|
Execute(uv is detected when python_pyrefly_auto_uv is set):
|
||||||
|
let g:ale_python_pyrefly_auto_uv = 1
|
||||||
|
call ale#test#SetFilename('../test-files/python/uv/whatever.py')
|
||||||
|
|
||||||
|
AssertLinter 'uv',
|
||||||
|
\ ale#Escape('uv') . ' run pyrefly lsp'
|
||||||
23
test/linter/test_roc_roc_language_server.vader
Normal file
23
test/linter/test_roc_roc_language_server.vader
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('roc', 'roc_language_server')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The default executable path should be correct):
|
||||||
|
AssertLinter 'roc_language_server', ale#Escape('roc_language_server')
|
||||||
|
|
||||||
|
Execute(The project root should be detected correctly in empty directory):
|
||||||
|
AssertLSPProject '.'
|
||||||
|
|
||||||
|
Execute(The project root should be detected correctly with main.roc):
|
||||||
|
call ale#test#SetFilename('../test-files/roc/main.roc')
|
||||||
|
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/roc')
|
||||||
|
|
||||||
|
Execute(The LSP values should be set correctly):
|
||||||
|
call ale#test#SetFilename('../test-files/roc/main.roc')
|
||||||
|
|
||||||
|
AssertLSPLanguage 'roc'
|
||||||
|
AssertLSPOptions {}
|
||||||
|
AssertLSPConfig {}
|
||||||
|
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/roc')
|
||||||
0
test/test-files/lean/lakefile_lean/Main.lean
Normal file
0
test/test-files/lean/lakefile_lean/Main.lean
Normal file
0
test/test-files/lean/lakefile_lean/lakefile.lean
Normal file
0
test/test-files/lean/lakefile_lean/lakefile.lean
Normal file
0
test/test-files/lean/lakefile_toml/Main.lean
Normal file
0
test/test-files/lean/lakefile_toml/Main.lean
Normal file
0
test/test-files/lean/lakefile_toml/lakefile.toml
Normal file
0
test/test-files/lean/lakefile_toml/lakefile.toml
Normal file
0
test/test-files/python/with_virtualenv/env/Scripts/pyrefly.exe
vendored
Executable file
0
test/test-files/python/with_virtualenv/env/Scripts/pyrefly.exe
vendored
Executable file
0
test/test-files/python/with_virtualenv/env/bin/pyrefly
vendored
Executable file
0
test/test-files/python/with_virtualenv/env/bin/pyrefly
vendored
Executable file
0
test/test-files/roc/main.roc
Normal file
0
test/test-files/roc/main.roc
Normal file
@@ -13,6 +13,15 @@ Execute(Relative paths should be resolved correctly):
|
|||||||
AssertEqual
|
AssertEqual
|
||||||
\ 'C:\foo\bar\baz\whatever.txt',
|
\ 'C:\foo\bar\baz\whatever.txt',
|
||||||
\ ale#path#GetAbsPath('C:\foo\bar\baz\xyz', '../whatever.txt')
|
\ ale#path#GetAbsPath('C:\foo\bar\baz\xyz', '../whatever.txt')
|
||||||
|
AssertEqual
|
||||||
|
\ 'C:\foo\bar\baz\whatever.txt',
|
||||||
|
\ ale#path#GetAbsPath('C:\foo\bar\baz\xyz', '..\whatever.txt')
|
||||||
|
AssertEqual
|
||||||
|
\ 'C:\foo\bar\baz\whatever.txt',
|
||||||
|
\ ale#path#GetAbsPath('C:/foo/bar/baz/xyz', '../whatever.txt')
|
||||||
|
AssertEqual
|
||||||
|
\ 'C:\foo\bar\baz\whatever.txt',
|
||||||
|
\ ale#path#GetAbsPath('C:/foo/bar/baz/xyz', '..\whatever.txt')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
Execute(Absolute paths should be resolved correctly):
|
Execute(Absolute paths should be resolved correctly):
|
||||||
@@ -26,4 +35,12 @@ Execute(Absolute paths should be resolved correctly):
|
|||||||
|
|
||||||
if has('win32')
|
if has('win32')
|
||||||
AssertEqual '\ding', ale#path#GetAbsPath('/foo/bar/xyz', '\\ding')
|
AssertEqual '\ding', ale#path#GetAbsPath('/foo/bar/xyz', '\\ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('/foo/bar/xyz', 'c:/ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('/foo/bar/xyz', 'c:\ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('\foo\bar\xyz', 'c:/ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('\foo\bar\xyz', 'c:\ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('c:/foo/bar/xyz', 'c:/ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('c:/foo/bar/xyz', 'c:\ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('c:\foo\bar\xyz', 'c:/ding')
|
||||||
|
AssertEqual 'c:\ding', ale#path#GetAbsPath('c:\foo\bar\xyz', 'c:\ding')
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -407,7 +407,7 @@ Execute(PreProcess should allow the `project_root` to be set as a String):
|
|||||||
\ 'project_root': '/foo/bar',
|
\ 'project_root': '/foo/bar',
|
||||||
\})
|
\})
|
||||||
|
|
||||||
AssertEqual '/foo/bar', ale#lsp_linter#FindProjectRoot(0, g:linter)
|
AssertEqual '/foo/bar', ale#linter#GetRoot(0, g:linter)
|
||||||
|
|
||||||
Execute(PreProcess should `project_root` be set as a Function):
|
Execute(PreProcess should `project_root` be set as a Function):
|
||||||
let g:linter = ale#linter#PreProcess('testft', {
|
let g:linter = ale#linter#PreProcess('testft', {
|
||||||
@@ -418,7 +418,7 @@ Execute(PreProcess should `project_root` be set as a Function):
|
|||||||
\ 'project_root': {-> '/foo/bar'},
|
\ 'project_root': {-> '/foo/bar'},
|
||||||
\})
|
\})
|
||||||
|
|
||||||
AssertEqual '/foo/bar', ale#lsp_linter#FindProjectRoot(0, g:linter)
|
AssertEqual '/foo/bar', ale#linter#GetRoot(0, g:linter)
|
||||||
|
|
||||||
Execute(PreProcess should complain when `project_root` is invalid):
|
Execute(PreProcess should complain when `project_root` is invalid):
|
||||||
AssertThrows call ale#linter#PreProcess('testft', {
|
AssertThrows call ale#linter#PreProcess('testft', {
|
||||||
|
|||||||
27
test/test_python_root_option.vader
Normal file
27
test/test_python_root_option.vader
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
Before:
|
||||||
|
Save g:ale_root
|
||||||
|
Save b:ale_root
|
||||||
|
call ale#test#SetDirectory('/testplugin/test')
|
||||||
|
|
||||||
|
After:
|
||||||
|
Restore
|
||||||
|
call ale#test#RestoreDirectory()
|
||||||
|
|
||||||
|
Execute(The global setting is used as the project root):
|
||||||
|
let g:ale_root = '/foo/python'
|
||||||
|
call ale#test#SetFilename('test-files/python/no_virtualenv/subdir/foo/bar.py')
|
||||||
|
AssertEqual '/foo/python', ale#python#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
|
Execute(The buffer setting overrides the global setting):
|
||||||
|
let g:ale_root = '/foo/python'
|
||||||
|
let b:ale_root = '/bar/python'
|
||||||
|
call ale#test#SetFilename('test-files/python/no_virtualenv/subdir/foo/bar.py')
|
||||||
|
AssertEqual '/bar/python', ale#python#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
|
Execute(Fallback to searching when no setting is used):
|
||||||
|
unlet! g:ale_root
|
||||||
|
unlet! b:ale_root
|
||||||
|
call ale#test#SetFilename('test-files/python/no_virtualenv/subdir/foo/bar.py')
|
||||||
|
AssertEqual \
|
||||||
|
\ ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir'),
|
||||||
|
\ ale#python#FindProjectRoot(bufnr(''))
|
||||||
Reference in New Issue
Block a user