aboutsummaryrefslogtreecommitdiff
path: root/runtime/ftplugin/java.vim
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-11-29 08:54:47 +0800
committerzeertzjq <zeertzjq@outlook.com>2024-11-29 08:57:00 +0800
commit8d7d225caa12e5a25f6853a54a2fd6d144342d3c (patch)
treef456f05a86d76bcb97f3b276d743fab227ef8def /runtime/ftplugin/java.vim
parent146b8300a145efa64e579527da8606546a36162b (diff)
downloadrneovim-8d7d225caa12e5a25f6853a54a2fd6d144342d3c.tar.gz
rneovim-8d7d225caa12e5a25f6853a54a2fd6d144342d3c.tar.bz2
rneovim-8d7d225caa12e5a25f6853a54a2fd6d144342d3c.zip
vim-patch:65311c6: runtime(compiler): include spotbugs Java linter
closes: vim/vim#16001 https://github.com/vim/vim/commit/65311c6f472de67b368d83441ca5e93da86161f4 Co-authored-by: Konfekt <Konfekt@users.noreply.github.com> Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
Diffstat (limited to 'runtime/ftplugin/java.vim')
-rw-r--r--runtime/ftplugin/java.vim138
1 files changed, 134 insertions, 4 deletions
diff --git a/runtime/ftplugin/java.vim b/runtime/ftplugin/java.vim
index 55b358374f..6e12fe2fe5 100644
--- a/runtime/ftplugin/java.vim
+++ b/runtime/ftplugin/java.vim
@@ -3,7 +3,7 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Dan Sharp
" Repository: https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2024 Sep 26
+" Last Change: 2024 Nov 24
" 2024 Jan 14 by Vim Project (browsefilter)
" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
@@ -90,10 +90,127 @@ if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
endif
endif
+" The support for pre- and post-compiler actions for SpotBugs.
+if exists("g:spotbugs_properties") && has_key(g:spotbugs_properties, 'compiler')
+ try
+ let spotbugs#compiler = g:spotbugs_properties.compiler
+ let g:spotbugs_properties = extend(
+ \ spotbugs#DefaultProperties(),
+ \ g:spotbugs_properties,
+ \ 'force')
+ catch
+ echomsg v:errmsg
+ finally
+ call remove(g:spotbugs_properties, 'compiler')
+ endtry
+endif
+
+if exists("g:spotbugs_properties") &&
+ \ filereadable($VIMRUNTIME . '/compiler/spotbugs.vim')
+ let s:request = 0
+
+ if has_key(g:spotbugs_properties, 'PreCompilerAction')
+ let s:dispatcher = 'call g:spotbugs_properties.PreCompilerAction() | '
+ let s:request += 1
+ endif
+
+ if has_key(g:spotbugs_properties, 'PreCompilerTestAction')
+ let s:dispatcher = 'call g:spotbugs_properties.PreCompilerTestAction() | '
+ let s:request += 2
+ endif
+
+ if has_key(g:spotbugs_properties, 'PostCompilerAction')
+ let s:request += 4
+ endif
+
+ if (s:request == 3 || s:request == 7) &&
+ \ has_key(g:spotbugs_properties, 'sourceDirPath') &&
+ \ has_key(g:spotbugs_properties, 'testSourceDirPath')
+ function! s:DispatchAction(path_action_pairs) abort
+ let name = expand('%:p')
+
+ for [path, Action] in a:path_action_pairs
+ if name =~# (path . '.\{-}\.java\=$')
+ call Action()
+ break
+ endif
+ endfor
+ endfunction
+
+ let s:dispatcher = printf('call s:DispatchAction(%s) | ',
+ \ string([[g:spotbugs_properties.sourceDirPath,
+ \ g:spotbugs_properties.PreCompilerAction],
+ \ [g:spotbugs_properties.testSourceDirPath,
+ \ g:spotbugs_properties.PreCompilerTestAction]]))
+ endif
+
+ if s:request
+ if exists("b:spotbugs_syntax_once")
+ let s:actions = [{'event': 'BufWritePost'}]
+ else
+ " XXX: Handle multiple FileType events when vimrc contains more
+ " than one filetype setting for the language, e.g.:
+ " :filetype plugin indent on
+ " :autocmd BufRead,BufNewFile *.java setlocal filetype=java ...
+ " XXX: DO NOT ADD b:spotbugs_syntax_once TO b:undo_ftplugin !
+ let b:spotbugs_syntax_once = 1
+ let s:actions = [{
+ \ 'event': 'Syntax',
+ \ 'once': 1,
+ \ }, {
+ \ 'event': 'BufWritePost',
+ \ }]
+ endif
+
+ for s:idx in range(len(s:actions))
+ if s:request == 7 || s:request == 6 || s:request == 5
+ let s:actions[s:idx].cmd = s:dispatcher . 'compiler spotbugs | ' .
+ \ 'call g:spotbugs_properties.PostCompilerAction()'
+ elseif s:request == 4
+ let s:actions[s:idx].cmd = 'compiler spotbugs | ' .
+ \ 'call g:spotbugs_properties.PostCompilerAction()'
+ elseif s:request == 3 || s:request == 2 || s:request == 1
+ let s:actions[s:idx].cmd = s:dispatcher . 'compiler spotbugs'
+ else
+ let s:actions[s:idx].cmd = ''
+ endif
+ endfor
+
+ if !exists("#java_spotbugs")
+ augroup java_spotbugs
+ augroup END
+ endif
+
+ " The events are defined in s:actions.
+ silent! autocmd! java_spotbugs BufWritePost <buffer>
+ silent! autocmd! java_spotbugs Syntax <buffer>
+
+ for s:action in s:actions
+ execute printf('autocmd java_spotbugs %s <buffer> %s',
+ \ s:action.event,
+ \ s:action.cmd . (has_key(s:action, 'once')
+ \ ? printf(' | autocmd! java_spotbugs %s <buffer>',
+ \ s:action.event)
+ \ : ''))
+ endfor
+
+ unlet! s:action s:actions s:idx s:dispatcher
+ endif
+
+ unlet s:request
+endif
+
+function! JavaFileTypeCleanUp() abort
+ setlocal suffixes< suffixesadd< formatoptions< comments< commentstring< path< includeexpr<
+ unlet! b:browsefilter
+
+ " The concatenated removals may be misparsed as a BufWritePost autocmd.
+ silent! autocmd! java_spotbugs BufWritePost <buffer>
+ silent! autocmd! java_spotbugs Syntax <buffer>
+endfunction
+
" Undo the stuff we changed.
-let b:undo_ftplugin = "setlocal suffixes< suffixesadd<" .
- \ " formatoptions< comments< commentstring< path< includeexpr<" .
- \ " | unlet! b:browsefilter"
+let b:undo_ftplugin = 'call JavaFileTypeCleanUp() | delfunction JavaFileTypeCleanUp'
" See ":help vim9-mix".
if !has("vim9script")
@@ -114,6 +231,19 @@ if exists("s:zip_func_upgradable")
setlocal suffixesadd<
endif
+if exists("*s:DispatchAction")
+ def! s:DispatchAction(path_action_pairs: list<list<any>>)
+ const name: string = expand('%:p')
+
+ for [path: string, Action: func: any] in path_action_pairs
+ if name =~# (path .. '.\{-}\.java\=$')
+ Action()
+ break
+ endif
+ endfor
+ enddef
+endif
+
" Restore the saved compatibility options.
let &cpo = s:save_cpo
unlet s:save_cpo