33" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
44" Former Maintainer: Claudio Fleiner <claudio@fleiner.com>
55" Repository: https://github.com/zzzyxwvut/java-vim.git
6- " Last Change: 2025 Oct 04
6+ " Last Change: 2025 Oct 08
77
88" Please check ":help java.vim" for comments on some of the options
99" available.
5959 endfunction
6060endif
6161
62+ function ! s: ff .QueryFoldArgForSyntaxItems (kind) abort
63+ return stridx (s: java_ignore_folding , a: kind ) < 0 ? " fold" : " "
64+ endfunction
65+
6266if ! exists (" *s:ReportOnce" )
6367 function s: ReportOnce (message) abort
6468 echomsg ' syntax/java.vim: ' . a: message
@@ -90,6 +94,8 @@ if exists("g:java_foldtext_show_first_or_second_line")
9094 setlocal foldtext = JavaSyntaxFoldTextExpr ()
9195endif
9296
97+ let s: java_ignore_folding = get (g: , ' java_ignore_folding' , ' ' )
98+
9399" Admit the ASCII dollar sign to keyword characters (JLS-17, §3.8):
94100try
95101 exec ' syntax iskeyword ' . &l: iskeyword . ' ,$'
@@ -121,6 +127,11 @@ syn match javaOperator "\<var\>\%(\s*(\)\@!"
121127syn match javaExternal " \< import\s\+ module\> " contains =javaModuleImport
122128syn keyword javaModuleImport contained module
123129
130+ if ! empty (s: ff .QueryFoldArgForSyntaxItems (' i' ))
131+ " Group and fold adjacent "import" declarations.
132+ syn region javaImportDeclBlock transparent start =" \< import\s\+\K " skip =" \< import\s\+\K " end =" ^" contains =javaExternal,@javaClasses,javaComment,javaLineComment fold
133+ endif
134+
124135" Since the yield statement, which could take a parenthesised operand,
125136" and _qualified_ yield methods get along within the switch block
126137" (JLS-17, §3.8), it seems futile to make a region definition for this
@@ -380,7 +391,7 @@ syn keyword javaLabelDefault contained default
380391syn keyword javaLabelVarType contained var
381392" Allow for the contingency of the enclosing region not being able to
382393" _keep_ its _end_, e.g. case ':':.
383- syn region javaLabelWhenClause contained transparent matchgroup =javaLabel start =" \< when\> " matchgroup =NONE end =" :" me =e - 1 end =" ->" me =e - 2 contains =TOP,javaExternal,javaLambdaDef
394+ syn region javaLabelWhenClause contained transparent matchgroup =javaLabel start =" \< when\> " matchgroup =NONE end =" :" me =e - 1 end =" ->" me =e - 2 contains =TOP,javaImportDeclBlock, javaExternal,javaLambdaDef
384395
385396" Comments
386397syn keyword javaTodo contained TODO FIXME XXX
@@ -396,7 +407,7 @@ if exists("g:java_comment_strings")
396407 syn cluster javaCommentSpecial2 add =javaComment2String,javaCommentCharacter,javaNumber,javaStrTempl
397408endif
398409
399- syn region javaComment matchgroup =javaCommentStart start =" /\* " end =" \* /" contains =@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell fold
410+ exec ' syn region javaComment matchgroup=javaCommentStart start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,javaCommentError,javaSpaceError,@Spell ' . s: ff . QueryFoldArgForSyntaxItems ( ' c ' )
400411syn match javaCommentStar contained " ^\s *\* [^/]" me =e - 1
401412syn match javaCommentStar contained " ^\s *\* $"
402413syn match javaLineComment " //.*" contains =@javaCommentSpecial2,javaTodo,javaCommentMarkupTag,javaSpaceError,@Spell
@@ -510,7 +521,7 @@ if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:mai
510521 endtry
511522
512523 if s: with_markdown
513- syn region javaMarkdownComment start =" ///" skip =" ^\s *///.*$" end =" ^" keepend contains =javaMarkdownCommentTitle,javaMarkdownShortcutLink,@javaMarkdown,@javaDocTags,javaTodo,@Spell nextgroup =javaMarkdownCommentTitle fold
524+ exec ' syn region javaMarkdownComment start="///" skip="^\s*///.*$" end="^" keepend contains=javaMarkdownCommentTitle,javaMarkdownShortcutLink,@javaMarkdown,@javaDocTags,javaTodo,@Spell nextgroup=javaMarkdownCommentTitle ' . s: ff . QueryFoldArgForSyntaxItems ( ' d ' )
514525 syn match javaMarkdownCommentMask contained " ^\s *///"
515526 exec ' syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s: ff .PeekFor (' javaMarkdownCommentTitle' , 120 ) . ' <!///" matchgroup=javaMarkdownCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\n\%(\s*///\s*$\)\@=" end="\%(^\s*///\s*\)\@' . s: ff .PeekFor (' javaMarkdownCommentTitle' , 120 ) . ' <=@"me=s-2,he=s-1 contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags'
516527 exec ' syn region javaMarkdownCommentTitle contained matchgroup=javaMarkdownComment start="\%(///.*\r\=\n\s*\)\@' . s: ff .PeekFor (' javaMarkdownCommentTitle' , 120 ) . ' <!///\s*\%({@return\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}\%(\s*\.*\)*" contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
@@ -565,7 +576,7 @@ if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) && g:mai
565576 endif
566577
567578 if s: with_html
568- syn region javaDocComment start =" /\*\* " end =" \* /" keepend contains =javaCommentTitle,@javaHtml,@javaDocTags,javaTodo,javaCommentError,javaSpaceError,@Spell fold
579+ exec ' syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,@javaDocTags,javaTodo,javaCommentError,javaSpaceError,@Spell ' . s: ff . QueryFoldArgForSyntaxItems ( ' d ' )
569580 exec ' syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[ \t\r]\@=" end="\%(^\s*\**\s*\)\@' . s: ff .PeekFor (' javaCommentTitle' , 120 ) . ' <=@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags'
570581 syn region javaCommentTitle contained matchgroup =javaDocComment start =" /\*\*\s *\r\=\n\=\s *\* *\s *\% ({@return\>\)\@ =" matchgroup =javaCommentTitle end =" }\% (\s *\. *\) *" contains =@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
571582 syn region javaCommentTitle contained matchgroup =javaDocComment start =" /\*\*\s *\r\=\n\=\s *\* *\s *\% ({@summary\>\)\@ =" matchgroup =javaCommentTitle end =" }" contains =@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
@@ -690,7 +701,7 @@ syn region javaString start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=
690701syn match javaTextBlockError + """\s *"""+
691702
692703if s: ff .IsAnyRequestedPreviewFeatureOf ([430 ])
693- syn region javaStrTemplEmbExp contained matchgroup =javaStrTempl start =" \\ {" end =" }" contains =TOP
704+ syn region javaStrTemplEmbExp contained matchgroup =javaStrTempl start =" \\ {" end =" }" contains =TOP,javaImportDeclBlock
694705 exec ' syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s: ff .PeekFor (' javaStrTempl' , 80 ) . ' <="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
695706 exec ' syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s: ff .PeekFor (' javaStrTempl' , 80 ) . ' <="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
696707 hi def link javaStrTempl Macro
@@ -751,7 +762,7 @@ if exists("g:java_highlight_functions")
751762 " in order to not include javaFuncDef.
752763 syn region javaParenE transparent matchgroup =javaParen start =" (" end =" )" contains =@javaEnumConstants,javaInParen
753764 syn region javaParenE transparent matchgroup =javaParen start =" \[ " end =" \] " contains =@javaEnumConstants
754- syn cluster javaEnumConstants contains =TOP,javaTopEnumDeclaration,javaFuncDef,javaParenT
765+ syn cluster javaEnumConstants contains =TOP,javaTopEnumDeclaration,javaImportDeclBlock, javaFuncDef,javaParenT
755766 unlet s: indent s: last
756767 else
757768 " This is the "style" variant (:help ft-java-syntax).
@@ -822,7 +833,7 @@ syn region javaBlockOther transparent matchgroup=javaBlockOtherStart start="{" e
822833
823834" Try not to fold top-level-type bodies under assumption that there is
824835" but one such body.
825- exec ' syn region javaBlock transparent matchgroup=javaBlockStart start="\%(^\|^\S[^:]\+\)\@' . s: ff .PeekFor (' javaBlock' , 120 ) . ' <!{" end="}" fold '
836+ exec ' syn region javaBlock transparent matchgroup=javaBlockStart start="\%(^\|^\S[^:]\+\)\@' . s: ff .PeekFor (' javaBlock' , 120 ) . ' <!{" end="}" ' . s: ff . QueryFoldArgForSyntaxItems ( ' b ' )
826837
827838" See "D.2.1 Anonymous Classes" at
828839" https://web.archive.org/web/20010821025330/java.sun.com/docs/books/jls/first_edition/html/1.1Update.html#12959.
@@ -966,7 +977,7 @@ endif
966977
967978let b: spell_options = " contained"
968979let &cpo = s: cpo_save
969- unlet s: cpo_save s: ff s: with_html s: with_markdown
980+ unlet s: cpo_save s: ff s: java_ignore_folding s: with_html s: with_markdown
970981
971982" See ":help vim9-mix".
972983if ! has (" vim9script" )
0 commit comments