From 3b4193175ed75d099e40aad8d60033ab20b44521 Mon Sep 17 00:00:00 2001 From: NiBo Date: Fri, 15 May 2020 10:48:03 +0800 Subject: feat(javac): Add java_javac_sourcepath variable This variable can set multiple source code paths, the source code path is a relative path (relative to the project root directory) --- ale_linters/java/javac.vim | 11 +++++++++++ doc/ale-java.txt | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/ale_linters/java/javac.vim b/ale_linters/java/javac.vim index 8bb52c0b..e166bea4 100644 --- a/ale_linters/java/javac.vim +++ b/ale_linters/java/javac.vim @@ -6,6 +6,7 @@ let s:classpath_sep = has('unix') ? ':' : ';' call ale#Set('java_javac_executable', 'javac') call ale#Set('java_javac_options', '') call ale#Set('java_javac_classpath', '') +call ale#Set('java_javac_sourcepath', []) function! ale_linters#java#javac#RunWithImportPaths(buffer) abort let l:command = '' @@ -79,6 +80,16 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths, meta) abort endif endif + let l:sourcepath_item = ale#Var(a:buffer, 'java_javac_sourcepath') + if !empty(l:sourcepath_item) + for l:sourcepath in l:sourcepath_item + let l:sp_path = ale#path#FindNearestDirectory(a:buffer, l:sourcepath) + if !empty(l:sp_path) + call add(l:sp_dirs, l:sp_path) + endif + endfor + endif + if !empty(l:sp_dirs) let l:sp_option = '-sourcepath ' \ . ale#Escape(join(l:sp_dirs, s:classpath_sep)) diff --git a/doc/ale-java.txt b/doc/ale-java.txt index 15e9e679..ea426f0d 100644 --- a/doc/ale-java.txt +++ b/doc/ale-java.txt @@ -67,6 +67,21 @@ g:ale_java_javac_options *g:ale_java_javac_options* 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: |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: + > + 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* -- cgit v1.2.3 From 3635285c022ebaa0fe3d54ca74cac1207dda555b Mon Sep 17 00:00:00 2001 From: NiBo Date: Fri, 15 May 2020 11:19:06 +0800 Subject: style(javac): Code formatting --- ale_linters/java/javac.vim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ale_linters/java/javac.vim b/ale_linters/java/javac.vim index e166bea4..928f555f 100644 --- a/ale_linters/java/javac.vim +++ b/ale_linters/java/javac.vim @@ -81,9 +81,11 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths, meta) abort endif let l:sourcepath_item = ale#Var(a:buffer, 'java_javac_sourcepath') + if !empty(l:sourcepath_item) for l:sourcepath in l:sourcepath_item let l:sp_path = ale#path#FindNearestDirectory(a:buffer, l:sourcepath) + if !empty(l:sp_path) call add(l:sp_dirs, l:sp_path) endif -- cgit v1.2.3 From ff6bfc3d374706ab80d3dc40a4d3a15baffa8ad2 Mon Sep 17 00:00:00 2001 From: NiBo Date: Mon, 18 May 2020 17:35:16 +0800 Subject: refactor(javac): ale_java_javac_sourcepath variable supports String and List types --- ale_linters/java/javac.vim | 17 ++++- doc/ale-java.txt | 27 ++++--- .../build/gen/main/java/com/something/dummy | 0 .../build/gen2/main/java/com/something/dummy | 0 .../test_javac_command_callback.vader | 86 ++++++++++++++++++++++ 5 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 test/command_callback/java_paths/build/gen/main/java/com/something/dummy create mode 100644 test/command_callback/java_paths/build/gen2/main/java/com/something/dummy diff --git a/ale_linters/java/javac.vim b/ale_linters/java/javac.vim index 928f555f..5ea40026 100644 --- a/ale_linters/java/javac.vim +++ b/ale_linters/java/javac.vim @@ -80,11 +80,20 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths, meta) abort endif endif - let l:sourcepath_item = ale#Var(a:buffer, 'java_javac_sourcepath') + let l:source_paths = [] + let l:source_path = ale#Var(a:buffer, 'java_javac_sourcepath') - if !empty(l:sourcepath_item) - for l:sourcepath in l:sourcepath_item - let l:sp_path = ale#path#FindNearestDirectory(a:buffer, l: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) diff --git a/doc/ale-java.txt b/doc/ale-java.txt index ea426f0d..3016aede 100644 --- a/doc/ale-java.txt +++ b/doc/ale-java.txt @@ -69,18 +69,27 @@ g:ale_java_javac_options *g:ale_java_javac_options* g:ale_java_javac_sourcepath *g:ale_java_javac_sourcepath* *b:ale_java_javac_sourcepath* - Type: |List| + 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). +This variable can set multiple source code paths, the source code path is a +relative path (relative to the project root directory). - Example: - > - let g:ale_java_javac_sourcepath = [ - \ 'build/generated/source/querydsl/main', - \ 'target/generated-sources/source/querydsl/main' - \ ] +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' + \ ] +< =============================================================================== diff --git a/test/command_callback/java_paths/build/gen/main/java/com/something/dummy b/test/command_callback/java_paths/build/gen/main/java/com/something/dummy new file mode 100644 index 00000000..e69de29b diff --git a/test/command_callback/java_paths/build/gen2/main/java/com/something/dummy b/test/command_callback/java_paths/build/gen2/main/java/com/something/dummy new file mode 100644 index 00000000..e69de29b diff --git a/test/command_callback/test_javac_command_callback.vader b/test/command_callback/test_javac_command_callback.vader index 42c64e54..7e612ae2 100644 --- a/test/command_callback/test_javac_command_callback.vader +++ b/test/command_callback/test_javac_command_callback.vader @@ -108,6 +108,92 @@ Execute(The javac callback should combine discovered classpaths and manual ones) \ . ' -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): call ale#engine#Cleanup(bufnr('')) noautocmd e! java_paths/src/main/java/com/something/dummy -- cgit v1.2.3 From e61e1147b0cc33039c96f9518e22363d3d63d5a9 Mon Sep 17 00:00:00 2001 From: NiBo Date: Tue, 19 May 2020 10:43:16 +0800 Subject: refactor(javac): ale_java_javac_classpath variable supports String and List types --- ale_linters/java/javac.vim | 13 +++-- doc/ale-java.txt | 2 +- .../test_javac_command_callback.vader | 55 +++++++++++++++++++++- 3 files changed, 64 insertions(+), 6 deletions(-) diff --git a/ale_linters/java/javac.vim b/ale_linters/java/javac.vim index 5ea40026..949733f8 100644 --- a/ale_linters/java/javac.vim +++ b/ale_linters/java/javac.vim @@ -41,10 +41,15 @@ endfunction function! s:BuildClassPathOption(buffer, import_paths) abort " Filter out lines like [INFO], etc. let l:class_paths = filter(a:import_paths[:], 'v:val !~# ''[''') - call extend( - \ l:class_paths, - \ split(ale#Var(a:buffer, 'java_javac_classpath'), s:classpath_sep), - \) + let l:cls_path = ale#Var(a:buffer, 'java_javac_classpath') + + 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) \ ? '-cp ' . ale#Escape(join(l:class_paths, s:classpath_sep)) diff --git a/doc/ale-java.txt b/doc/ale-java.txt index 3016aede..1fcd663b 100644 --- a/doc/ale-java.txt +++ b/doc/ale-java.txt @@ -46,7 +46,7 @@ javac *ale-java-javac* g:ale_java_javac_classpath *g:ale_java_javac_classpath* *b:ale_java_javac_classpath* - Type: |String| + Type: |String| or |List| Default: `''` This variable can be set to change the global classpath for Java. diff --git a/test/command_callback/test_javac_command_callback.vader b/test/command_callback/test_javac_command_callback.vader index 7e612ae2..d2eebf7a 100644 --- a/test/command_callback/test_javac_command_callback.vader +++ b/test/command_callback/test_javac_command_callback.vader @@ -31,7 +31,7 @@ After: Execute(The javac callback should return the correct default value): 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' AssertLinter 'javac', @@ -39,6 +39,14 @@ Execute(The javac callback should use g:ale_java_javac_classpath correctly): \ . ' -cp ' . ale#Escape('foo.jar') \ . ' -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): let g:ale_java_javac_executable = 'foobar' @@ -108,6 +116,51 @@ Execute(The javac callback should combine discovered classpaths and manual ones) \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', \ 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' -- cgit v1.2.3 From 0b5d72fecdbb50e9c6b72af7356a10f755e1a764 Mon Sep 17 00:00:00 2001 From: NiBo Date: Tue, 19 May 2020 11:17:17 +0800 Subject: refactor(javac): ale_java_javac_sourcepath variable defaults to String --- ale_linters/java/javac.vim | 2 +- doc/ale-java.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ale_linters/java/javac.vim b/ale_linters/java/javac.vim index 949733f8..f866eb09 100644 --- a/ale_linters/java/javac.vim +++ b/ale_linters/java/javac.vim @@ -6,7 +6,7 @@ let s:classpath_sep = has('unix') ? ':' : ';' call ale#Set('java_javac_executable', 'javac') call ale#Set('java_javac_options', '') call ale#Set('java_javac_classpath', '') -call ale#Set('java_javac_sourcepath', []) +call ale#Set('java_javac_sourcepath', '') function! ale_linters#java#javac#RunWithImportPaths(buffer) abort let l:command = '' diff --git a/doc/ale-java.txt b/doc/ale-java.txt index 1fcd663b..d2001ca7 100644 --- a/doc/ale-java.txt +++ b/doc/ale-java.txt @@ -70,7 +70,7 @@ g:ale_java_javac_options *g:ale_java_javac_options* g:ale_java_javac_sourcepath *g:ale_java_javac_sourcepath* *b:ale_java_javac_sourcepath* Type: |String| or |List| - Default: `[]` + Default: `''` This variable can set multiple source code paths, the source code path is a relative path (relative to the project root directory). -- cgit v1.2.3