mirror of
https://github.com/dense-analysis/ale.git
synced 2026-03-01 21:07:00 +08:00
Merge pull request #3173 from nibocn/feat#javac-sourcepath
feat(javac): Add java_javac_sourcepath variable
This commit is contained in:
@@ -6,6 +6,7 @@ let s:classpath_sep = has('unix') ? ':' : ';'
|
|||||||
call ale#Set('java_javac_executable', 'javac')
|
call ale#Set('java_javac_executable', 'javac')
|
||||||
call ale#Set('java_javac_options', '')
|
call ale#Set('java_javac_options', '')
|
||||||
call ale#Set('java_javac_classpath', '')
|
call ale#Set('java_javac_classpath', '')
|
||||||
|
call ale#Set('java_javac_sourcepath', '')
|
||||||
|
|
||||||
function! ale_linters#java#javac#RunWithImportPaths(buffer) abort
|
function! ale_linters#java#javac#RunWithImportPaths(buffer) abort
|
||||||
let l:command = ''
|
let l:command = ''
|
||||||
@@ -40,10 +41,15 @@ endfunction
|
|||||||
function! s:BuildClassPathOption(buffer, import_paths) abort
|
function! s:BuildClassPathOption(buffer, import_paths) abort
|
||||||
" Filter out lines like [INFO], etc.
|
" Filter out lines like [INFO], etc.
|
||||||
let l:class_paths = filter(a:import_paths[:], 'v:val !~# ''[''')
|
let l:class_paths = filter(a:import_paths[:], 'v:val !~# ''[''')
|
||||||
call extend(
|
let l:cls_path = ale#Var(a:buffer, 'java_javac_classpath')
|
||||||
\ l:class_paths,
|
|
||||||
\ split(ale#Var(a:buffer, 'java_javac_classpath'), s:classpath_sep),
|
if !empty(l:cls_path) && type(l:cls_path) is v:t_string
|
||||||
\)
|
call extend(l:class_paths, split(l:cls_path, s:classpath_sep))
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:cls_path) && type(l:cls_path) is v:t_list
|
||||||
|
call extend(l:class_paths, l:cls_path)
|
||||||
|
endif
|
||||||
|
|
||||||
return !empty(l:class_paths)
|
return !empty(l:class_paths)
|
||||||
\ ? '-cp ' . ale#Escape(join(l:class_paths, s:classpath_sep))
|
\ ? '-cp ' . ale#Escape(join(l:class_paths, s:classpath_sep))
|
||||||
@@ -79,6 +85,27 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths, meta) abort
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let l:source_paths = []
|
||||||
|
let l:source_path = ale#Var(a:buffer, 'java_javac_sourcepath')
|
||||||
|
|
||||||
|
if !empty(l:source_path) && type(l:source_path) is v:t_string
|
||||||
|
let l:source_paths = split(l:source_path, s:classpath_sep)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:source_path) && type(l:source_path) is v:t_list
|
||||||
|
let l:source_paths = l:source_path
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(l:source_paths)
|
||||||
|
for l:path in l:source_paths
|
||||||
|
let l:sp_path = ale#path#FindNearestDirectory(a:buffer, l:path)
|
||||||
|
|
||||||
|
if !empty(l:sp_path)
|
||||||
|
call add(l:sp_dirs, l:sp_path)
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
|
||||||
if !empty(l:sp_dirs)
|
if !empty(l:sp_dirs)
|
||||||
let l:sp_option = '-sourcepath '
|
let l:sp_option = '-sourcepath '
|
||||||
\ . ale#Escape(join(l:sp_dirs, s:classpath_sep))
|
\ . ale#Escape(join(l:sp_dirs, s:classpath_sep))
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ javac *ale-java-javac*
|
|||||||
|
|
||||||
g:ale_java_javac_classpath *g:ale_java_javac_classpath*
|
g:ale_java_javac_classpath *g:ale_java_javac_classpath*
|
||||||
*b:ale_java_javac_classpath*
|
*b:ale_java_javac_classpath*
|
||||||
Type: |String|
|
Type: |String| or |List|
|
||||||
Default: `''`
|
Default: `''`
|
||||||
|
|
||||||
This variable can be set to change the global classpath for Java.
|
This variable can be set to change the global classpath for Java.
|
||||||
@@ -67,6 +67,30 @@ g:ale_java_javac_options *g:ale_java_javac_options*
|
|||||||
|
|
||||||
This variable can be set to pass additional options to javac.
|
This variable can be set to pass additional options to javac.
|
||||||
|
|
||||||
|
g:ale_java_javac_sourcepath *g:ale_java_javac_sourcepath*
|
||||||
|
*b:ale_java_javac_sourcepath*
|
||||||
|
Type: |String| or |List|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
This variable can set multiple source code paths, the source code path is a
|
||||||
|
relative path (relative to the project root directory).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
String type:
|
||||||
|
Note that the unix system separator is a colon(`:`) window system
|
||||||
|
is a semicolon(`;`).
|
||||||
|
>
|
||||||
|
let g:ale_java_javac_sourcepath = 'build/gen/source/xx/main:build/gen/source'
|
||||||
|
<
|
||||||
|
List type:
|
||||||
|
>
|
||||||
|
let g:ale_java_javac_sourcepath = [
|
||||||
|
\ 'build/generated/source/querydsl/main',
|
||||||
|
\ 'target/generated-sources/source/querydsl/main'
|
||||||
|
\ ]
|
||||||
|
<
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
google-java-format *ale-java-google-java-format*
|
google-java-format *ale-java-google-java-format*
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ After:
|
|||||||
Execute(The javac callback should return the correct default value):
|
Execute(The javac callback should return the correct default value):
|
||||||
AssertLinter 'javac', g:prefix . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
AssertLinter 'javac', g:prefix . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
||||||
|
|
||||||
Execute(The javac callback should use g:ale_java_javac_classpath correctly):
|
Execute(The javac callback should use string type g:ale_java_javac_classpath correctly):
|
||||||
let g:ale_java_javac_classpath = 'foo.jar'
|
let g:ale_java_javac_classpath = 'foo.jar'
|
||||||
|
|
||||||
AssertLinter 'javac',
|
AssertLinter 'javac',
|
||||||
@@ -39,6 +39,14 @@ Execute(The javac callback should use g:ale_java_javac_classpath correctly):
|
|||||||
\ . ' -cp ' . ale#Escape('foo.jar')
|
\ . ' -cp ' . ale#Escape('foo.jar')
|
||||||
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
||||||
|
|
||||||
|
Execute(The javac callback should use list type g:ale_java_javac_classpath correctly):
|
||||||
|
let g:ale_java_javac_classpath = ['foo.jar']
|
||||||
|
|
||||||
|
AssertLinter 'javac',
|
||||||
|
\ g:prefix
|
||||||
|
\ . ' -cp ' . ale#Escape('foo.jar')
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
||||||
|
|
||||||
Execute(The executable should be configurable):
|
Execute(The executable should be configurable):
|
||||||
let g:ale_java_javac_executable = 'foobar'
|
let g:ale_java_javac_executable = 'foobar'
|
||||||
|
|
||||||
@@ -108,6 +116,137 @@ Execute(The javac callback should combine discovered classpaths and manual ones)
|
|||||||
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
||||||
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
||||||
|
|
||||||
|
let g:ale_java_javac_classpath = ['configured.jar']
|
||||||
|
let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [
|
||||||
|
\ '[DEBUG] Ignore this.',
|
||||||
|
\ '[INFO] Something we should ignore.',
|
||||||
|
\ '/foo/bar.jar',
|
||||||
|
\ '/xyz/abc.jar',
|
||||||
|
\], {})
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ g:prefix
|
||||||
|
\ . ' -cp '
|
||||||
|
\ . ale#Escape(join(
|
||||||
|
\ [
|
||||||
|
\ '/foo/bar.jar',
|
||||||
|
\ '/xyz/abc.jar',
|
||||||
|
\ 'configured.jar',
|
||||||
|
\ ],
|
||||||
|
\ g:cp_sep
|
||||||
|
\ ))
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
||||||
|
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
||||||
|
|
||||||
|
let g:ale_java_javac_classpath = ['configured.jar', 'configured2.jar']
|
||||||
|
let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [
|
||||||
|
\ '[DEBUG] Ignore this.',
|
||||||
|
\ '[INFO] Something we should ignore.',
|
||||||
|
\ '/foo/bar.jar',
|
||||||
|
\ '/xyz/abc.jar',
|
||||||
|
\], {})
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ g:prefix
|
||||||
|
\ . ' -cp '
|
||||||
|
\ . ale#Escape(join(
|
||||||
|
\ [
|
||||||
|
\ '/foo/bar.jar',
|
||||||
|
\ '/xyz/abc.jar',
|
||||||
|
\ 'configured.jar',
|
||||||
|
\ 'configured2.jar',
|
||||||
|
\ ],
|
||||||
|
\ g:cp_sep
|
||||||
|
\ ))
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
||||||
|
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
||||||
|
|
||||||
|
Execute(The javac callback should use string type g:ale_java_javac_sourcepath correctly):
|
||||||
|
let g:ale_java_javac_sourcepath = 'java_paths/build/gen/main'
|
||||||
|
|
||||||
|
AssertLinter 'javac',
|
||||||
|
\ g:prefix
|
||||||
|
\ . ' -sourcepath ' . ale#Escape(
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen/main/')
|
||||||
|
\ )
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
||||||
|
|
||||||
|
Execute(The javac callback should use list type g:ale_java_javac_sourcepath correctly):
|
||||||
|
let g:ale_java_javac_sourcepath = ['java_paths/build/gen/main']
|
||||||
|
|
||||||
|
AssertLinter 'javac',
|
||||||
|
\ g:prefix
|
||||||
|
\ . ' -sourcepath ' . ale#Escape(
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen/main/')
|
||||||
|
\ )
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
||||||
|
|
||||||
|
Execute(The javac callback shouldn't add -sourcepath when g:ale_java_javac_sourcepath variable path doesn't exist):
|
||||||
|
let g:ale_java_javac_sourcepath = 'java_paths/build/gen3/main'
|
||||||
|
|
||||||
|
AssertLinter 'javac',
|
||||||
|
\ g:prefix
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t'
|
||||||
|
|
||||||
|
Execute(The javac callback should combine discovered sourcepath and manual ones):
|
||||||
|
call ale#engine#Cleanup(bufnr(''))
|
||||||
|
call ale#test#SetFilename('java_paths/src/main/java/com/something/dummy.java')
|
||||||
|
call ale#engine#InitBufferInfo(bufnr(''))
|
||||||
|
|
||||||
|
let g:ale_java_javac_sourcepath = 'java_paths/build/gen/main'
|
||||||
|
let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {})
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ ale#path#CdString(expand('%:p:h')) . ale#Escape('javac') . ' -Xlint'
|
||||||
|
\ . ' -sourcepath ' . ale#Escape(join([
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/src/main/java/'),
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen/main/'),
|
||||||
|
\ ], g:cp_sep))
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
||||||
|
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
||||||
|
|
||||||
|
let g:ale_java_javac_sourcepath = 'java_paths/build/gen/main'
|
||||||
|
\ . g:cp_sep . 'java_paths/build/gen2/main'
|
||||||
|
let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {})
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ ale#path#CdString(expand('%:p:h')) . ale#Escape('javac') . ' -Xlint'
|
||||||
|
\ . ' -sourcepath ' . ale#Escape(join([
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/src/main/java/'),
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen/main/'),
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen2/main/')
|
||||||
|
\ ], g:cp_sep))
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
||||||
|
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
||||||
|
|
||||||
|
let g:ale_java_javac_sourcepath = ['java_paths/build/gen/main']
|
||||||
|
let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {})
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ ale#path#CdString(expand('%:p:h')) . ale#Escape('javac') . ' -Xlint'
|
||||||
|
\ . ' -sourcepath ' . ale#Escape(join([
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/src/main/java/'),
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen/main/')
|
||||||
|
\ ], g:cp_sep))
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
||||||
|
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
||||||
|
|
||||||
|
let g:ale_java_javac_sourcepath = [
|
||||||
|
\ 'java_paths/build/gen/main',
|
||||||
|
\ 'java_paths/build/gen2/main'
|
||||||
|
\ ]
|
||||||
|
let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {})
|
||||||
|
|
||||||
|
AssertEqual
|
||||||
|
\ ale#path#CdString(expand('%:p:h')) . ale#Escape('javac') . ' -Xlint'
|
||||||
|
\ . ' -sourcepath ' . ale#Escape(join([
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/src/main/java/'),
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen/main/'),
|
||||||
|
\ ale#path#Simplify(g:dir . '/java_paths/build/gen2/main/')
|
||||||
|
\ ], g:cp_sep))
|
||||||
|
\ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t',
|
||||||
|
\ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g')
|
||||||
|
|
||||||
Execute(The javac callback should detect source directories):
|
Execute(The javac callback should detect source directories):
|
||||||
call ale#engine#Cleanup(bufnr(''))
|
call ale#engine#Cleanup(bufnr(''))
|
||||||
noautocmd e! java_paths/src/main/java/com/something/dummy
|
noautocmd e! java_paths/src/main/java/com/something/dummy
|
||||||
|
|||||||
Reference in New Issue
Block a user