summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorfenuks <fenuks@protonmail.com>2019-12-09 23:38:53 +0100
committerfenuks <fenuks>2020-09-30 00:11:57 +0200
commit7186b0437f0b2d1726d594c04e580f26746368fc (patch)
treecbbdb78552d752cbcb96b39c72409e2873e32243 /autoload
parent96dcbd1f2069843acdc57646074b3d9f0e768044 (diff)
downloadale-7186b0437f0b2d1726d594c04e580f26746368fc.zip
Add maven helper file; use maven wrapper if available instead of global 'mvn' executable
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/maven.vim51
1 files changed, 51 insertions, 0 deletions
diff --git a/autoload/ale/maven.vim b/autoload/ale/maven.vim
new file mode 100644
index 00000000..745f8c93
--- /dev/null
+++ b/autoload/ale/maven.vim
@@ -0,0 +1,51 @@
+" Description: Functions for working with Maven projects.
+"
+" Given a buffer number, find a Maven project root.
+function! ale#maven#FindProjectRoot(buffer) abort
+ let l:wrapper_path = ale#path#FindNearestFile(a:buffer, 'mvnw')
+
+ if !empty(l:wrapper_path)
+ return fnamemodify(l:wrapper_path, ':h')
+ endif
+
+ let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml')
+
+ if !empty(l:pom_path)
+ return fnamemodify(l:pom_path, ':h')
+ endif
+
+ return ''
+endfunction
+
+
+" Given a buffer number, find the path to the executable.
+" First search on the path for 'mvnw' (mvnw.cmd on Windows), if nothing is found,
+" try the global command. Returns an empty string if cannot find the executable.
+function! ale#maven#FindExecutable(buffer) abort
+ let l:wrapper_cmd = has('unix') ? 'mvnw' : 'mvnw.cmd'
+ let l:wrapper_path = ale#path#FindNearestFile(a:buffer, l:wrapper_cmd)
+
+ if executable(l:wrapper_path)
+ return l:wrapper_path
+ endif
+
+ if executable('mvn')
+ return 'mvn'
+ 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#maven#BuildClasspathCommand(buffer) abort
+ let l:executable = ale#maven#FindExecutable(a:buffer)
+ let l:project_root = ale#maven#FindProjectRoot(a:buffer)
+
+ if !empty(l:executable) && !empty(l:project_root)
+ return ale#path#CdString(l:project_root)
+ \ . l:executable . ' dependency:build-classpath'
+ endif
+
+ return ''
+endfunction