mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
8d7d225caa
closes: vim/vim#16001
65311c6f47
Co-authored-by: Konfekt <Konfekt@users.noreply.github.com>
Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
251 lines
7.4 KiB
VimL
251 lines
7.4 KiB
VimL
" Vim filetype plugin file
|
|
" Language: Java
|
|
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
|
|
" Former Maintainer: Dan Sharp
|
|
" Repository: https://github.com/zzzyxwvut/java-vim.git
|
|
" Last Change: 2024 Nov 24
|
|
" 2024 Jan 14 by Vim Project (browsefilter)
|
|
" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
|
|
|
|
" Make sure the continuation lines below do not cause problems in
|
|
" compatibility mode.
|
|
let s:save_cpo = &cpo
|
|
set cpo-=C
|
|
|
|
if (exists("g:java_ignore_javadoc") || exists("g:java_ignore_markdown")) &&
|
|
\ exists("*javaformat#RemoveCommonMarkdownWhitespace")
|
|
delfunction javaformat#RemoveCommonMarkdownWhitespace
|
|
unlet! g:loaded_javaformat
|
|
endif
|
|
|
|
if exists("b:did_ftplugin")
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|
|
finish
|
|
endif
|
|
|
|
let b:did_ftplugin = 1
|
|
|
|
" For filename completion, prefer the .java extension over the .class
|
|
" extension.
|
|
set suffixes+=.class
|
|
|
|
" Enable gf on import statements. Convert . in the package
|
|
" name to / and append .java to the name, then search the path.
|
|
setlocal includeexpr=substitute(v:fname,'\\.','/','g')
|
|
setlocal suffixesadd=.java
|
|
|
|
" Clean up in case this file is sourced again.
|
|
unlet! s:zip_func_upgradable
|
|
|
|
"""" STRIVE TO REMAIN COMPATIBLE FOR AT LEAST VIM 7.0.
|
|
|
|
" Documented in ":help ft-java-plugin".
|
|
if exists("g:ftplugin_java_source_path") &&
|
|
\ type(g:ftplugin_java_source_path) == type("")
|
|
if filereadable(g:ftplugin_java_source_path)
|
|
if exists("#zip") &&
|
|
\ g:ftplugin_java_source_path =~# '.\.\%(jar\|zip\)$'
|
|
if !exists("s:zip_files")
|
|
let s:zip_files = {}
|
|
endif
|
|
|
|
let s:zip_files[bufnr('%')] = g:ftplugin_java_source_path
|
|
let s:zip_files[0] = g:ftplugin_java_source_path
|
|
let s:zip_func_upgradable = 1
|
|
|
|
function! JavaFileTypeZipFile() abort
|
|
let @/ = substitute(v:fname, '\.', '\\/', 'g') . '.java'
|
|
return get(s:zip_files, bufnr('%'), s:zip_files[0])
|
|
endfunction
|
|
|
|
" E120 for "inex=s:JavaFileTypeZipFile()" before v8.2.3900.
|
|
setlocal includeexpr=JavaFileTypeZipFile()
|
|
setlocal suffixesadd<
|
|
endif
|
|
else
|
|
let &l:path = g:ftplugin_java_source_path . ',' . &l:path
|
|
endif
|
|
endif
|
|
|
|
" Set 'formatoptions' to break comment lines but not other lines,
|
|
" and insert the comment leader when hitting <CR> or using "o".
|
|
setlocal formatoptions-=t formatoptions+=croql
|
|
|
|
" Set 'comments' to format Markdown Javadoc comments and dashed lists
|
|
" in other multi-line comments (it behaves just like C).
|
|
setlocal comments& comments^=:///,sO:*\ -,mO:*\ \ ,exO:*/
|
|
|
|
setlocal commentstring=//\ %s
|
|
|
|
" Change the :browse e filter to primarily show Java-related files.
|
|
if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
|
|
let b:browsefilter="Java Files (*.java)\t*.java\n" .
|
|
\ "Properties Files (*.prop*)\t*.prop*\n" .
|
|
\ "Manifest Files (*.mf)\t*.mf\n"
|
|
if has("win32")
|
|
let b:browsefilter .= "All Files (*.*)\t*\n"
|
|
else
|
|
let b:browsefilter .= "All Files (*)\t*\n"
|
|
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 = 'call JavaFileTypeCleanUp() | delfunction JavaFileTypeCleanUp'
|
|
|
|
" See ":help vim9-mix".
|
|
if !has("vim9script")
|
|
let &cpo = s:save_cpo
|
|
unlet s:save_cpo
|
|
finish
|
|
endif
|
|
|
|
if exists("s:zip_func_upgradable")
|
|
delfunction! JavaFileTypeZipFile
|
|
|
|
def! s:JavaFileTypeZipFile(): string
|
|
@/ = substitute(v:fname, '\.', '\\/', 'g') .. '.java'
|
|
return get(zip_files, bufnr('%'), zip_files[0])
|
|
enddef
|
|
|
|
setlocal includeexpr=s:JavaFileTypeZipFile()
|
|
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
|
|
" vim: fdm=syntax sw=4 ts=8 noet sta
|