Improve eclipselsp jar search logic.

- Set default value to $HOME/eclipse.jdt.ls
 - Make JAR search regexp more specific.
 - Allow to set the VSCode extensions folder as ale_java_eclipselsp_path.
This commit is contained in:
Horacio Sanson 2019-05-08 11:46:19 +09:00
parent 63abd2dfef
commit 53db52e713
3 changed files with 26 additions and 17 deletions

View file

@ -3,7 +3,7 @@
let s:version_cache = {} let s:version_cache = {}
call ale#Set('java_eclipselsp_path', 'eclipse.jdt.ls') call ale#Set('java_eclipselsp_path', ale#path#Simplify($HOME . '/eclipse.jdt.ls'))
call ale#Set('java_eclipselsp_executable', 'java') call ale#Set('java_eclipselsp_executable', 'java')
function! ale_linters#java#eclipselsp#Executable(buffer) abort function! ale_linters#java#eclipselsp#Executable(buffer) abort
@ -16,20 +16,27 @@ endfunction
function! ale_linters#java#eclipselsp#JarPath(buffer) abort function! ale_linters#java#eclipselsp#JarPath(buffer) abort
let l:path = ale_linters#java#eclipselsp#TargetPath(a:buffer) let l:path = ale_linters#java#eclipselsp#TargetPath(a:buffer)
let l:path = l:path . '/org.eclipse.jdt.ls.product/target/repository/plugins'
let l:files = globpath(l:path, 'org.eclipse.equinox.launcher_*.jar', 1, 1) " Search jar file within repository path when manually built using mvn
let l:repo_path = l:path . '/org.eclipse.jdt.ls.product/target/repository'
let l:files = globpath(l:repo_path, '**/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.jar', 1, 1)
if empty(l:files) if len(l:files) == 1
return '' return l:files[0]
endif endif
" Search jar file within VSCode extensions folder.
let l:files = globpath(l:path, '**/plugins/org.eclipse.equinox.launcher_\d\.\d\.\d\d\d\.*\.jar', 1, 1)
if len(l:files) == 1
return l:files[0] return l:files[0]
endif
return ''
endfunction endfunction
function! ale_linters#java#eclipselsp#ConfigurationPath(buffer) abort function! ale_linters#java#eclipselsp#ConfigurationPath(buffer) abort
let l:path = ale_linters#java#eclipselsp#TargetPath(a:buffer) let l:path = fnamemodify(ale_linters#java#eclipselsp#JarPath(a:buffer), ':p:h:h')
let l:path = l:path . '/org.eclipse.jdt.ls.product/target/repository'
if has('win32') if has('win32')
let l:path = l:path . '/config_win' let l:path = l:path . '/config_win'

View file

@ -104,7 +104,7 @@ This variable can be changed to use a different executable for java.
=============================================================================== ===============================================================================
eclipselsp *ale-java-eclipselsp* eclipselsp *ale-java-eclipselsp*
To enable Java LSP linter you need to clone and build the eclipse.jdt.ls To enable Eclipse LSP linter you need to clone and build the eclipse.jdt.ls
language server from https://github.com/eclipse/eclipse.jdt.ls. Simply language server from https://github.com/eclipse/eclipse.jdt.ls. Simply
clone the source code repo and then build the plugin: clone the source code repo and then build the plugin:
@ -114,21 +114,23 @@ Note: currently, the build can only run when launched with JDK 8. JDK 9 or more
recent versions can be used to run the server though. recent versions can be used to run the server though.
After build completes the files required to run the language server will be After build completes the files required to run the language server will be
located inside the repositoy folder `eclipse.jdt.ls`. Ensure to set located inside the repository folder `eclipse.jdt.ls`. Please ensure to set
|g:ale_java_eclipselsp_path| to the absolute path of that folder. |g:ale_java_eclipselsp_path| to the absolute path of that folder.
You could customize compiler options and code assists of the server. You could customize compiler options and code assists of the server.
Under your project folder, modify the file Under your project folder, modify the file `.settings/org.eclipse.jdt.core.prefs`
`.settings/org.eclipse.jdt.core.prefs` with options presented at with options presented at
https://help.eclipse.org/neon/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/JavaCore.html. https://help.eclipse.org/neon/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/JavaCore.html.
g:ale_java_eclipselsp_path *g:ale_java_eclipselsp_path* g:ale_java_eclipselsp_path *g:ale_java_eclipselsp_path*
*b:ale_java_eclipselsp_path* *b:ale_java_eclipselsp_path*
Type: |String| Type: |String|
Default: `'eclipse.jdt.ls'` Default: `'$HOME/eclipse.jdt.ls'`
Absolute path to the location of the eclipse.jdt.ls repository folder. Absolute path to the location of the eclipse.jdt.ls repository folder. Or if
you have VSCode extension installed the absolute path to the VSCode extensions
folder (e.g. $HOME/.vscode/extensions in Linux).
g:ale_java_eclipselsp_executable *g:ale_java_eclipse_executable* g:ale_java_eclipselsp_executable *g:ale_java_eclipse_executable*

View file

@ -3,12 +3,12 @@ Before:
let b:ale_java_eclipselsp_path = '/home/user/eclipse.dst.ls' let b:ale_java_eclipselsp_path = '/home/user/eclipse.dst.ls'
call ale#test#SetFilename('dummy.java') call ale#test#SetFilename('dummy.java')
let b:cfg = '/home/user/eclipse.dst.ls/org.eclipse.jdt.ls.product/target/repository/config_linux' let b:cfg = '/testplugin/test/config_linux'
if has('win32') if has('win32')
let b:cfg = '\home\user\eclipse.dst.ls\org.eclipse.jdt.ls.product\target\repository\config_win' let b:cfg = 'C:\testplugin\test\config_win'
elseif has('macunix') elseif has('macunix')
let b:cfg = '/home/user/eclipse.dst.ls/org.eclipse.jdt.ls.product/target/repository/config_mac' let b:cfg = '/testplugin/test/config_mac'
endif endif