Feature/add ant support (#2539)
Use ant files to load Java settings too.
This commit is contained in:
parent
a76f056bd9
commit
c6a5cbb3c7
8 changed files with 116 additions and 0 deletions
|
@ -21,6 +21,11 @@ function! ale_linters#java#javac#RunWithImportPaths(buffer) abort
|
||||||
let l:command = ale#gradle#BuildClasspathCommand(a:buffer)
|
let l:command = ale#gradle#BuildClasspathCommand(a:buffer)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Try to use Ant if Gradle and Maven aren't available
|
||||||
|
if empty(l:command)
|
||||||
|
let l:command = ale#ant#BuildClasspathCommand(a:buffer)
|
||||||
|
endif
|
||||||
|
|
||||||
if empty(l:command)
|
if empty(l:command)
|
||||||
return ale_linters#java#javac#GetCommand(a:buffer, [], {})
|
return ale_linters#java#javac#GetCommand(a:buffer, [], {})
|
||||||
endif
|
endif
|
||||||
|
|
41
autoload/ale/ant.vim
Normal file
41
autoload/ale/ant.vim
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
" Author: Andrew Lee <andrewl@mbda.fun>.
|
||||||
|
" Inspired by ale/gradle.vim by Michael Pardo <michael@michaelpardo.com>
|
||||||
|
" Description: Functions for working with Ant projects.
|
||||||
|
|
||||||
|
" Given a buffer number, find an Ant project root
|
||||||
|
function! ale#ant#FindProjectRoot(buffer) abort
|
||||||
|
let l:build_xml_path = ale#path#FindNearestFile(a:buffer, 'build.xml')
|
||||||
|
|
||||||
|
if !empty(l:build_xml_path)
|
||||||
|
return fnamemodify(l:build_xml_path, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Given a buffer number, find the path to the `ant` executable. Returns an empty
|
||||||
|
" string if cannot find the executable.
|
||||||
|
function! ale#ant#FindExecutable(buffer) abort
|
||||||
|
if executable('ant')
|
||||||
|
return 'ant'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Given a buffer number, build a command to print the classpath of the root
|
||||||
|
" project. Returns an empty string if cannot build the command.
|
||||||
|
function! ale#ant#BuildClasspathCommand(buffer) abort
|
||||||
|
let l:executable = ale#ant#FindExecutable(a:buffer)
|
||||||
|
let l:project_root = ale#ant#FindProjectRoot(a:buffer)
|
||||||
|
|
||||||
|
if !empty(l:executable) && !empty(l:project_root)
|
||||||
|
return ale#path#CdString(l:project_root)
|
||||||
|
\ . ale#Escape(l:executable)
|
||||||
|
\ . ' classpath'
|
||||||
|
\ . ' -S'
|
||||||
|
\ . ' -q'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
|
endfunction
|
|
@ -16,5 +16,11 @@ function! ale#java#FindProjectRoot(buffer) abort
|
||||||
return fnamemodify(l:maven_pom_file, ':h')
|
return fnamemodify(l:maven_pom_file, ':h')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let l:ant_root = ale#ant#FindProjectRoot(a:buffer)
|
||||||
|
|
||||||
|
if !empty(l:ant_root)
|
||||||
|
return l:ant_root
|
||||||
|
endif
|
||||||
|
|
||||||
return ''
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
0
test/ant-test-files/ant-project/build.xml
Normal file
0
test/ant-test-files/ant-project/build.xml
Normal file
0
test/ant-test-files/bin/ant
Executable file
0
test/ant-test-files/bin/ant
Executable file
0
test/ant-test-files/bin/ant.exe
Executable file
0
test/ant-test-files/bin/ant.exe
Executable file
29
test/test_ant_build_classpath_command.vader
Normal file
29
test/test_ant_build_classpath_command.vader
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
Before:
|
||||||
|
call ale#test#SetDirectory('/testplugin/test')
|
||||||
|
runtime ale_linters/java/javac.vim
|
||||||
|
|
||||||
|
Save $PATH
|
||||||
|
let $PATH = ale#path#Simplify(g:dir . '/ant-test-files/bin')
|
||||||
|
|
||||||
|
let g:valid_project = 'ant-test-files/ant-project'
|
||||||
|
let g:invalid_project = 'ant-test-files/non-ant-project'
|
||||||
|
let g:command_tail = ' classpath' . ' -S' . ' -q'
|
||||||
|
|
||||||
|
After:
|
||||||
|
Restore
|
||||||
|
|
||||||
|
unlet! g:command_tail
|
||||||
|
unlet! g:valid_project
|
||||||
|
unlet! g:invalid_project
|
||||||
|
|
||||||
|
call ale#test#RestoreDirectory()
|
||||||
|
call ale#linter#Reset()
|
||||||
|
|
||||||
|
Execute(Should return `cd '[dir]' && 'ant' classpath -S -q`):
|
||||||
|
call ale#test#SetFilename(valid_project . '/Main.java')
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ ale#path#CdString(ale#path#Simplify(g:dir . '/ant-test-files/ant-project'))
|
||||||
|
\ . ale#Escape('ant')
|
||||||
|
\ . g:command_tail,
|
||||||
|
\ ale#ant#BuildClasspathCommand(bufnr(''))
|
35
test/test_ant_find_project_root.vader
Normal file
35
test/test_ant_find_project_root.vader
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
Before:
|
||||||
|
call ale#test#SetDirectory('/testplugin/test')
|
||||||
|
runtime ale_linters/java/javac.vim
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#test#RestoreDirectory()
|
||||||
|
call ale#linter#Reset()
|
||||||
|
|
||||||
|
Execute(Should return current directory if called on the project root):
|
||||||
|
call ale#test#SetFilename('ant-test-files/ant-project/Main.java')
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ ale#path#Simplify(g:dir . '/ant-test-files/ant-project'),
|
||||||
|
\ ale#ant#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
|
Execute(Should return root directory if called on a deeply nested source file):
|
||||||
|
call ale#test#SetFilename('ant-test-files/ant-project/src/several/namespace/layers/A.java')
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ ale#path#Simplify(g:dir . '/ant-test-files/ant-project'),
|
||||||
|
\ ale#ant#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
|
Execute(Should return empty string if called on a non-ant project):
|
||||||
|
call ale#test#SetFilename('ant-test-files/non-ant-project/Main.java')
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ '',
|
||||||
|
\ ale#ant#FindProjectRoot(bufnr(''))
|
||||||
|
|
||||||
|
Execute(Should return empty string if called on a file in a non-ant project):
|
||||||
|
call ale#test#SetFilename('ant-test-files/non-ant-project/several/namespace/layers/A.java')
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ '',
|
||||||
|
\ ale#ant#FindProjectRoot(bufnr(''))
|
Reference in a new issue