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)
|
||||
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)
|
||||
return ale_linters#java#javac#GetCommand(a:buffer, [], {})
|
||||
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')
|
||||
endif
|
||||
|
||||
let l:ant_root = ale#ant#FindProjectRoot(a:buffer)
|
||||
|
||||
if !empty(l:ant_root)
|
||||
return l:ant_root
|
||||
endif
|
||||
|
||||
return ''
|
||||
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