runtime(java): Manage byte limits for variable-width lookbehind assertions
Commit:
https://github.com/vim/vim/commit/7132935413dfda47e015015dbbc5b9eb097b90d6
Author: Aliaksei Budavei <[email protected]>
Date: Fri Aug 8 10:50:19 2025 +0200
runtime(java): Manage byte limits for variable-width lookbehind assertions
Raise the byte limits from 80 to 120 for "javaFuncDef" and
"java*CommentTitle"; and support selecting other arbitrary
values with
------------------------------------------------------------
let g:java_lookbehind_byte_counts = {
\ 'javaMarkdownCommentTitle': 240,
\ }
------------------------------------------------------------
for related groups of syntax definitions, referring to their
names with dictionary keys.
Over-80-Byte-Limit Lookbehind Examples:
https://raw.githubusercontent.com/openjdk/jdk/refs/tags/jdk-24%2B36/src/java.base/share/classes/sun/security/x509/NamedX509Key.java
[Lines 43 & 44]
https://raw.githubusercontent.com/openjdk/jdk/refs/tags/jdk-24%2B36/src/jdk.compiler/share/classes/com/sun/tools/javac/util/GraphUtils.java
[Line 154]
closes: #17921
Signed-off-by: Aliaksei Budavei <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 968853970..321f94889 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt* For Vim version 9.1. Last change: 2025 Aug 07
+*syntax.txt* For Vim version 9.1. Last change: 2025 Aug 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -2231,6 +2231,15 @@ Certain modifiers are incompatible with each other, e.g.
`abstract` and
and can be differently highlighted as a group than other modifiers with >
:hi link javaConceptKind NonText
+All instances of variable-width lookbehind assertions (|/\@<!| and |/\@<=|),
+resorted to in syntax item definitions, are confined to arbitrary byte counts.
+Another arbitrary value can be selected for a related group of definitions.
+For example: >
+ :let g:java_lookbehind_byte_counts = {'javaMarkdownCommentTitle': 240}
+Where each key name of this dictionary is the name of a syntax item. The use
+of these assertions in syntax items may vary among revisions, so no definitive
+set of supported key names is committed to.
+
If you notice highlighting errors while scrolling backwards, which are fixed
when redrawing with CTRL-L, try setting the "g:java_minlines" variable to
a larger number: >
diff --git a/runtime/syntax/java.vim b/runtime/syntax/java.vim
index 5df1d4fa3..22b86ed9d 100644
--- a/runtime/syntax/java.vim
+++ b/runtime/syntax/java.vim
@@ -3,7 +3,7 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Claudio Fleiner <[email protected]>
" Repository: https://github.com/zzzyxwvut/java-vim.git
-" Last Change: 2025 Jun 22
+" Last Change: 2025 Aug 07
" Please check ":help java.vim" for comments on some of the options
" available.
@@ -125,11 +125,29 @@ endif
" if necessary, on the line before that (h: \@<=), trying to match
" neither a method reference nor a qualified method invocation.
try
- syn match javaOperator "\%(\%(::\|\.\)[[:space:]
]*\)\@80<!\<yield\>"
+ if !empty(get(g:, 'java_lookbehind_byte_counts', {}))
+ exec 'syn match javaOperator "\%(\%(::\|\.\)[[:space:]
]*\)\@' . max([0, get(g:java_lookbehind_byte_counts, 'javaOperator', 80)]) .
'<!\<yield\>"'
+
+ function! s:ff.PeekFor(item, count) abort
+ return string(max([0, get(g:java_lookbehind_byte_counts, a:item,
a:count)]))
+ endfunction
+ else
+ syn match javaOperator "\%(\%(::\|\.\)[[:space:]
]*\)\@80<!\<yield\>"
+
+ function! s:ff.PeekFor(dummy, count) abort
+ return string(a:count)
+ endfunction
+ endif
+
let s:ff.Peek = s:ff.LeftConstant
catch /\<E59:/
call s:ReportOnce(v:exception)
syn match javaOperator "\%(\%(::\|\.\)[[:space:]
]*\)\@<!\<yield\>"
+
+ function! s:ff.PeekFor(dummy_a, dummy_b) abort
+ return ""
+ endfunction
+
let s:ff.Peek = s:ff.RightConstant
endtry
@@ -308,7 +326,7 @@ if exists("g:java_highlight_generics")
" Match sections of generic methods and constructors and their
" parameterised use.
exec 'syn region javaTypeParamSection transparent matchgroup=javaGenericsCX
start=/' . s:ff.Engine('\%#=2', '') . '\%(^\|\s\)\@' . s:ff.Peek('1', '') .
'<=<\%(\%([^(){}]\|
\)\+[[:space:]-]\@' . s:ff.Peek('1', '') .
'<!>\_s\+\%(\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<'
. s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<\%([^(){}]\|
\)\+[[:space:]-]\@' . s:ff.Peek('1', '') .
'<!>\)\=\)\%(\[\]\)*\)\_s\+\)\=\<\K\k*\>\s*(\)\@=/ end=/>/
contains=javaGenerics,@javaTypeParams'
- exec 'syn region javaTypeParamSection transparent matchgroup=javaGenericsCX
start=/\%(\%(\<new\|::\|\.\)[[:space:]
]*\)\@' . s:ff.Peek('80', '') . '<=<>\@!/ end=/>/
contains=javaGenerics,@javaTypeParams'
+ exec 'syn region javaTypeParamSection transparent matchgroup=javaGenericsCX
start=/\%(\%(\<new\|::\|\.\)[[:space:]
]*\)\@' . s:ff.PeekFor('javaTypeParamSection', 80) . '<=<>\@!/ end=/>/
contains=javaGenerics,@javaTypeParams'
for s:ctx in [{'gsg': 'javaGenerics', 'ghg': 'javaGenericsC1', 'csg':
'javaGenericsX', 'c': ''},
\ {'gsg': 'javaGenericsX', 'ghg': 'javaGenericsC2', 'csg':
'javaGenerics', 'c': ' contained'}]
@@ -376,7 +394,7 @@ syn match javaCommentStar contained "^\s*\*$"
syn match javaLineComment "//.*"
contains=@javaCommentSpecial2,javaTodo,javaCommentMarkupTag,javaSpaceError,@Spell
syn match javaCommentMarkupTag contained
"@\%(end\|highlight\|link\|replace\|start\)\>"
nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
syn match javaCommentMarkupTagAttr contained "\<region\>"
nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite
-exec 'syn region javaCommentMarkupTagAttr contained transparent
matchgroup=javaHtmlArg
start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/
matchgroup=javaHtmlString end=/\%(=\s*\)\@' . s:ff.Peek('80', '') .
'<=\%("[^"]\+"\|' . "\x27[^\x27]\+\x27" . '\|\%([.-]\|\k\)\+\)/
nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
+exec 'syn region javaCommentMarkupTagAttr contained transparent
matchgroup=javaHtmlArg
start=/\<\%(re\%(gex\|gion\|placement\)\|substring\|t\%(arget\|ype\)\)\%(\s*=\)\@=/
matchgroup=javaHtmlString end=/\%(=\s*\)\@' .
s:ff.PeekFor('javaCommentMarkupTagAttr', 80) . '<=\%("[^"]\+"\|' .
"\x27[^\x27]\+\x27" . '\|\%([.-]\|\k\)\+\)/
nextgroup=javaCommentMarkupTagAttr,javaSpaceError skipwhite oneline'
syn match javaCommentError contained "/\*"me=e-1 display
if !exists("g:java_ignore_javadoc") && (s:with_html || s:with_markdown) &&
g:main_syntax != 'jsp'
@@ -476,9 +494,9 @@ if !exists("g:java_ignore_javadoc") && (s:with_html ||
s:with_markdown) && g:mai
if s:with_markdown
syn region javaMarkdownComment start="///" skip="^\s*///.*$" end="^"
keepend
contains=javaMarkdownCommentTitle,javaMarkdownShortcutLink,@javaMarkdown,@javaDocTags,javaTodo,@Spell
nextgroup=javaMarkdownCommentTitle fold
syn match javaMarkdownCommentMask contained "^\s*///"
- exec 'syn region javaMarkdownCommentTitle contained
matchgroup=javaMarkdownComment start="\%(///.*
\=
\s*\)\@' . s:ff.Peek('80', '') . '<!///" matchgroup=javaMarkdownCommentTitle
end="\.$" end="\.[
]\@=" end="
\%(\s*///\s*$\)\@=" end="\%(^\s*///\s*\)\@' . s:ff.Peek('80', '') .
'<=@"me=s-2,he=s-1
contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags'
- exec 'syn region javaMarkdownCommentTitle contained
matchgroup=javaMarkdownComment start="\%(///.*
\=
\s*\)\@' . s:ff.Peek('80', '') . '<!///\s*\%({@return\>\)\@="
matchgroup=javaMarkdownCommentTitle end="}\%(\s*\.*\)*"
contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
- exec 'syn region javaMarkdownCommentTitle contained
matchgroup=javaMarkdownComment start="\%(///.*
\=
\s*\)\@' . s:ff.Peek('80', '') . '<!///\s*\%({@summary\>\)\@="
matchgroup=javaMarkdownCommentTitle end="}"
contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
+ exec 'syn region javaMarkdownCommentTitle contained
matchgroup=javaMarkdownComment start="\%(///.*
\=
\s*\)\@' . s:ff.PeekFor('javaMarkdownCommentTitle', 120) . '<!///"
matchgroup=javaMarkdownCommentTitle end="\.$" end="\.[
]\@=" end="
\%(\s*///\s*$\)\@=" end="\%(^\s*///\s*\)\@' .
s:ff.PeekFor('javaMarkdownCommentTitle', 120) . '<=@"me=s-2,he=s-1
contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags'
+ exec 'syn region javaMarkdownCommentTitle contained
matchgroup=javaMarkdownComment start="\%(///.*
\=
\s*\)\@' . s:ff.PeekFor('javaMarkdownCommentTitle', 120) .
'<!///\s*\%({@return\>\)\@=" matchgroup=javaMarkdownCommentTitle
end="}\%(\s*\.*\)*"
contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
+ exec 'syn region javaMarkdownCommentTitle contained
matchgroup=javaMarkdownComment start="\%(///.*
\=
\s*\)\@' . s:ff.PeekFor('javaMarkdownCommentTitle', 120) .
'<!///\s*\%({@summary\>\)\@=" matchgroup=javaMarkdownCommentTitle end="}"
contains=javaMarkdownShortcutLink,@javaMarkdown,javaMarkdownCommentMask,javaTodo,@Spell,@javaDocTags,javaTitleSkipBlock'
" REDEFINE THE MARKDOWN ITEMS ANCHORED WITH "^", OBSERVING THE
" DEFINITION ORDER.
@@ -530,7 +548,7 @@ if !exists("g:java_ignore_javadoc") && (s:with_html ||
s:with_markdown) && g:mai
if s:with_html
syn region javaDocComment start="/\*\*" end="\*/" keepend
contains=javaCommentTitle,@javaHtml,@javaDocTags,javaTodo,javaCommentError,javaSpaceError,@Spell
fold
- exec 'syn region javaCommentTitle contained matchgroup=javaDocComment
start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[
]\@=" end="\%(^\s*\**\s*\)\@' . s:ff.Peek('80', '') . '<=@"me=s-2,he=s-1
end="\*/"me=s-1,he=s-1
contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags'
+ exec 'syn region javaCommentTitle contained matchgroup=javaDocComment
start="/\*\*" matchgroup=javaCommentTitle end="\.$" end="\.[
]\@=" 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'
syn region javaCommentTitle contained matchgroup=javaDocComment
start="/\*\*\s*
\=
\=\s*\**\s*\%({@return\>\)\@=" matchgroup=javaCommentTitle end="}\%(\s*\.*\)*"
contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
syn region javaCommentTitle contained matchgroup=javaDocComment
start="/\*\*\s*
\=
\=\s*\**\s*\%({@summary\>\)\@=" matchgroup=javaCommentTitle end="}"
contains=@javaHtml,javaCommentStar,javaTodo,javaCommentError,javaSpaceError,@Spell,@javaDocTags,javaTitleSkipBlock
hi def link javaDocComment Comment
@@ -605,7 +623,7 @@ if !exists("g:java_ignore_javadoc") && (s:with_html ||
s:with_markdown) && g:mai
syn region javaCodeSkipBlock contained transparent start="{\%(@code\>\)\@!"
end="}" contains=javaCodeSkipBlock,javaDocCodeTag
syn region javaDocCodeTag contained start="{@code\>" end="}"
contains=javaDocCodeTag,javaCodeSkipBlock
- exec 'syn region javaDocSnippetTagAttr contained transparent
matchgroup=javaHtmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/
matchgroup=javaHtmlString end=/:$/ end=/\%(=\s*\)\@' . s:ff.Peek('80', '') .
'<=\%("[^"]\+"\|' . "\x27[^\x27]\+\x27" . '\|\%([.\/-]\|\k\)\+\)/
nextgroup=javaDocSnippetTagAttr skipwhite skipnl'
+ exec 'syn region javaDocSnippetTagAttr contained transparent
matchgroup=javaHtmlArg start=/\<\%(class\|file\|id\|lang\|region\)\%(\s*=\)\@=/
matchgroup=javaHtmlString end=/:$/ end=/\%(=\s*\)\@' .
s:ff.PeekFor('javaDocSnippetTagAttr', 80) . '<=\%("[^"]\+"\|' .
"\x27[^\x27]\+\x27" . '\|\%([.\/-]\|\k\)\+\)/ nextgroup=javaDocSnippetTagAttr
skipwhite skipnl'
syn region javaSnippetSkipBlock contained transparent
start="{\%(@snippet\>\)\@!" end="}"
contains=javaSnippetSkipBlock,javaDocSnippetTag,javaCommentMarkupTag
syn region javaDocSnippetTag contained start="{@snippet\>" end="}"
contains=javaDocSnippetTag,javaSnippetSkipBlock,javaDocSnippetTagAttr,javaCommentMarkupTag
@@ -655,8 +673,8 @@ syn match javaTextBlockError +"""\s*"""+
if s:ff.IsAnyRequestedPreviewFeatureOf([430])
syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl
start="\{" end="}" contains=TOP
- exec 'syn region javaStrTempl start=+\%(\.[[:space:]
]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+
contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
- exec 'syn region javaStrTempl start=+\%(\.[[:space:]
]*\)\@' . s:ff.Peek('80', '') . '<="""[ \x0c
]*$+hs=e+1 end=+"""+he=s-1
contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
+ exec 'syn region javaStrTempl start=+\%(\.[[:space:]
]*\)\@' . s:ff.PeekFor('javaStrTempl', 80) . '<="+ end=+"+
contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
+ exec 'syn region javaStrTempl start=+\%(\.[[:space:]
]*\)\@' . s:ff.PeekFor('javaStrTempl', 80) . '<="""[ \x0c
]*$+hs=e+1 end=+"""+he=s-1
contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
hi def link javaStrTempl Macro
endif
@@ -699,7 +717,7 @@ if exists("g:java_highlight_functions")
" definitions take care of constructor declarations and enum
" constants (with no support for @Foo(value = "bar")). Also,
" reject inlined declarations with "[^{]" for signature.
- exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent
matchgroup=javaFuncDefStart', '') . ' start="' . s:ff.PeekTo('\%(', '') . '^' .
s:indent . '\%(<\%(/\*.\{-}\*/\|[^(){}>]\|
\)\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^={]*\%(\<record\)\@'
. s:ff.Peek('6', '') . '<!\s' . s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') .
'<=', '') . '\K\k*\s*(" end=")" contains=@javaFuncParams'
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent
matchgroup=javaFuncDefStart', '') . ' start="' . s:ff.PeekTo('\%(', '') . '^' .
s:indent . '\%(<\%(/\*.\{-}\*/\|[^(){}>]\|
\)\+>\+\s\+\|\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)\+\)\=\%(\<\K\k*\>\.\)*\K\k*\>[^={]*\%(\<record\)\@'
. s:ff.Peek('6', '') . '<!\s' . s:ff.PeekFrom('\)\@' .
s:ff.PeekFor('javaFuncDef', 120) . '<=', '') . '\K\k*\s*(" end=")"
contains=@javaFuncParams'
" As long as package-private constructors cannot be matched with
" javaFuncDef, do not look with javaConstructorSkipDeclarator for
" them. (Approximate "javaTypeParamSection" if necessary.)
@@ -710,7 +728,7 @@ if exists("g:java_highlight_functions")
exec 'syn match javaEnumSkipConstant contained transparent /^' . s:indent
. '\%(\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\K\k*\s*\%((.*)\)\=\s*[,;({]\s*\)\+/
contains=@javaEnumConstants'
" (2) Define a syntax group for top level enumerations and tell
" apart their constants from method declarations.
- exec 'syn region javaTopEnumDeclaration transparent
start=/\%(^\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(strictfp\s\+\)\=\<enum\_s\+\)\@'
. s:ff.Peek('80', '') . '<=\K\k*\%(\_s\+implements\_s.\+\)\=\_s*{/ end=/}/
contains=@javaTop,javaEnumSkipConstant'
+ exec 'syn region javaTopEnumDeclaration transparent
start=/\%(^\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(strictfp\s\+\)\=\<enum\_s\+\)\@'
. s:ff.PeekFor('javaTopEnumDeclaration', 80) .
'<=\K\k*\%(\_s\+implements\_s.\+\)\=\_s*{/ end=/}/
contains=@javaTop,javaEnumSkipConstant'
" (3) Define a base variant of javaParenT without using @javaTop
" in order to not include javaFuncDef.
syn region javaParenE transparent matchgroup=javaParen start="(" end=")"
contains=@javaEnumConstants,javaInParen
@@ -722,7 +740,7 @@ if exists("g:java_highlight_functions")
" Match arbitrarily indented camelCasedName method declarations.
" Match: [@蓯] [abstract] [<伪, 尾>] 韦尸[<纬>][[][]] 渭虱虱(/* ... */);
- exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent
matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.Engine('\%#=2', '') .
s:ff.PeekTo('\%(', '') .
'^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<\%([^(){}]\|
\)\+[[:space:]-]\@' . s:ff.Peek('1', '') .
'<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<'
. s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<\%([^(){}]\|
\)\+[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+' .
s:ff.PeekFrom('\)\@' . s:ff.Peek('80', '') . '<=', '') . '\<' .
s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/
skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
+ exec 'syn region javaFuncDef ' . s:ff.GroupArgs('transparent
matchgroup=javaFuncDefStart', '') . ' start=/' . s:ff.Engine('\%#=2', '') .
s:ff.PeekTo('\%(', '') .
'^\s\+\%(\%(@\%(\K\k*\.\)*\K\k*\>\)\s\+\)*\%(p\%(ublic\|rotected\|rivate\)\s\+\)\=\%(\%(abstract\|default\)\s\+\|\%(\%(final\|\%(native\|strictfp\)\|s\%(tatic\|ynchronized\)\)\s\+\)*\)\=\%(<\%([^(){}]\|
\)\+[[:space:]-]\@' . s:ff.Peek('1', '') .
'<!>\s\+\)\=\%(void\|\%(b\%(oolean\|yte\)\|char\|short\|int\|long\|float\|double\|\%(\<\K\k*\>\.\)*\<'
. s:ff.UpperCase('[$_[:upper:]]', '[^a-z0-9]') . '\k*\>\%(<\%([^(){}]\|
\)\+[[:space:]-]\@' . s:ff.Peek('1', '') . '<!>\)\=\)\%(\[\]\)*\)\s\+' .
s:ff.PeekFrom('\)\@' . s:ff.PeekFor('javaFuncDef', 120) . '<=', '') . '\<' .
s:ff.LowerCase('[$_[:lower:]]', '[^A-Z0-9]') . '\k*\>\s*(/ end=/)/
skip=/\/\*.\{-}\*\/\|\/\/.*$/ contains=@javaFuncParams'
endif
endif
@@ -736,8 +754,8 @@ if exists("g:java_highlight_debug")
" The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,
" share one colour by default. Do not conflate unrelated parens.
syn region javaDebugStrTemplEmbExp contained matchgroup=javaDebugStrTempl
start="\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.*
- exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]
]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+
contains=javaDebugStrTemplEmbExp,javaDebugSpecial'
- exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]
]*\)\@' . s:ff.Peek('80', '') . '<="""[ \x0c
]*$+hs=e+1 end=+"""+he=s-1
contains=javaDebugStrTemplEmbExp,javaDebugSpecial,javaDebugTextBlockError'
+ exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]
]*\)\@' . s:ff.PeekFor('javaDebugStrTempl', 80) . '<="+ end=+"+
contains=javaDebugStrTemplEmbExp,javaDebugSpecial'
+ exec 'syn region javaDebugStrTempl contained start=+\%(\.[[:space:]
]*\)\@' . s:ff.PeekFor('javaDebugStrTempl', 80) . '<="""[ \x0c
]*$+hs=e+1 end=+"""+he=s-1
contains=javaDebugStrTemplEmbExp,javaDebugSpecial,javaDebugTextBlockError'
hi def link javaDebugStrTempl Macro
endif
@@ -786,7 +804,7 @@ syn region javaBlockOther transparent
matchgroup=javaBlockOtherStart start="{" e
" Try not to fold top-level-type bodies under assumption that there is
" but one such body.
-exec 'syn region javaBlock transparent matchgroup=javaBlockStart
start="\%(^\|^\S[^:]\+\)\@' . s:ff.Peek('120', '') . '<!{" end="}" fold'
+exec 'syn region javaBlock transparent matchgroup=javaBlockStart
start="\%(^\|^\S[^:]\+\)\@' . s:ff.PeekFor('javaBlock', 120) . '<!{" end="}"
fold'
" See "D.2.1 Anonymous Classes" at
"
https://web.archive.org/web/20010821025330/java.sun.com/docs/books/jls/first_edition/html/1.1Update.html#12959.
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_00.dump
b/runtime/syntax/testdir/dumps/java_enfoldment_00.dump
index 3f696ea7f..5fa18d715 100644
--- a/runtime/syntax/testdir/dumps/java_enfoldment_00.dump
+++ b/runtime/syntax/testdir/dumps/java_enfoldment_00.dump
@@ -1,9 +1,9 @@
| +0#0000e05#a8a8a8255@1>/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P|
|s|e|t|l|o|c|a|l| |f|o|l|d|e|n|a|b|l|e| |f|o|l|d|c|o|l|u|m|n|=|2|
|f|o|l|d|m|e|t|h|o|d|=|s|y|n|t|a|x| +0#0000000&@4
| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t|
|g|:|j|a|v|a|_|f|o|l|d|t|e|x|t|_|s|h|o|w|_|f|i|r|s|t|_|o|r|_|s|e|c|o|n|d|_|l|i|n|e|
|=| |1| +0#0000000&@5
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t|
|g|:|j|a|v|a|_|l|o@1|k|b|e|h|i|n|d|_|b|y|t|e|_|c|o|u|n|t|s| |=|
|{|'|j|a|v|a|B|l|o|c|k|'|:| |-|1|}| +0#0000000&@1
| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P|
|h|i|g|h|l|i|g|h|t| |l|i|n|k| |j|a|v|a|B|l|o|c|k|O|t|h|e|r|S|t|a|r|t|
|S|t|r|u|c|t|u|r|e| +0#0000000&@10
| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P|
|h|i|g|h|l|i|g|h|t| |l|i|n|k| |j|a|v|a|B|l|o|c|k|S|t|a|r|t| |T|o|d|o|
+0#0000000&@20
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
|++0#0000e05#a8a8a8255| |+|-@1| |1|9| |l|i|n|e|s|:|
|@|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|{|-@39
| @1|c+0#00e0003#ffffff0|l|a|s@1| +0#0000000&|F|o|l|d|i|n|g|T|e|s|t|s|
|{+0#00e0003&| +0#0000000&@52
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@3|i+0#00e0003&|n|t|e|r|f|a|c|e|
+0#0000000&|F|o|l|d|e|n|a|b|l|e| @48
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_02.dump
b/runtime/syntax/testdir/dumps/java_enfoldment_02.dump
index 1e455ead1..d64bafad5 100644
--- a/runtime/syntax/testdir/dumps/java_enfoldment_02.dump
+++ b/runtime/syntax/testdir/dumps/java_enfoldment_02.dump
@@ -15,6 +15,6 @@
| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |{| +0#0000000&@68
| +0#0000e05#a8a8a8255@1|/+0&#ffffff0@1| |}| +0#0000000&@68
| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@72
-|++0#0000e05#a8a8a8255| |+|-@1| @1|2| |l|i|n|e|s|:| |1|2@1|||.@54
-|~+0#4040ff13#ffffff0| @73
-| +0#0000000&@56|9|7|,|2|-|1| @7|B|o|t|
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0|*| |1|2@1|||.@65
+| +0&#a8a8a8255@1|.+0&#ffffff0@23|*|/|
+0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|F|o|l|d|e|n|a|b|l|e|
|{+0#00e0003&| +0#0000000&@23
+@57|9|7|,|2|-|1| @7|9|8|%|
diff --git a/runtime/syntax/testdir/dumps/java_enfoldment_03.dump
b/runtime/syntax/testdir/dumps/java_enfoldment_03.dump
new file mode 100644
index 000000000..3391d41b3
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/java_enfoldment_03.dump
@@ -0,0 +1,20 @@
+| +0#0000e05#a8a8a8255@1|/+0&#ffffff0|*| |1|2@1|||.@65
+| +0&#a8a8a8255@1|.+0&#ffffff0@23|*|/|
+0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e| +0#0000000&|F|o|l|d|e|n|a|b|l|e|
|{+0#00e0003&| +0#0000000&@23
+| +0#0000e05#a8a8a8255@1>}+0#00e0003#ffffff0| +0#0000000&@71
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|1|2@1|,|1| @8|B|o|t|
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_00.dump
b/runtime/syntax/testdir/dumps/java_unfoldment_00.dump
index 5fe284c13..d6e5cc9cd 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_00.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_00.dump
@@ -1,9 +1,9 @@
>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |s|e|t|l|o|c|a|l|
>|n|o|f|o|l|d|e|n|a|b|l|e| +0#0000000&@35
|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t|
|g|:|j|a|v|a|_|m|a|r|k|_|b|r|a|c|e|s|_|i|n|_|p|a|r|e|n|s|_|a|s|_|e|r@1|o|r|s|
|=| |1| +0#0000000&@10
+|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t|
|g|:|j|a|v|a|_|l|o@1|k|b|e|h|i|n|d|_|b|y|t|e|_|c|o|u|n|t|s| |=|
|{|'|j|a|v|a|B|l|o|c|k|'|:| |-|1|}| +0#0000000&@3
|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k|
|j|a|v|a|B|l|o|c|k|O|t|h|e|r|S|t|a|r|t| |S|t|r|u|c|t|u|r|e| +0#0000000&@12
|/+0#0000e05&@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i|g|h|l|i|g|h|t| |l|i|n|k|
|j|a|v|a|B|l|o|c|k|S|t|a|r|t| |T|o|d|o| +0#0000000&@22
@75
-@75
@4|@+0#e000e06&|S|u|p@1|r|e|s@1|W|a|r|n|i|n|g|s|(|{+0#0000001#ffff4012|
+0#0000000#ffffff0@51
@4|"@2| @67
| +0#e000002&@3|b|e|s|p|o|k|e| +0#0000000&@63
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_06.dump
b/runtime/syntax/testdir/dumps/java_unfoldment_06.dump
index bfec99fa3..3c6bf631a 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_06.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_06.dump
@@ -16,5 +16,5 @@
|/+0#0000e05&@1| |}| +0#0000000&@70
@75
|/+0#0000e05&|*| |1|2@1|||.@67
-@20|*|/| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e|
+0#0000000&|U|n|f|o|l|d|e|n|a|b|l|e| |{+0#0000001#ffff4012|
+0#0000000#ffffff0@27
+@20|*|/| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e|
+0#0000000&|U|n|f|o|l|d|e|n|a|b|l|e| |{+0#00e0003&| +0#0000000&@27
@57|1|0|9|,|1| @8|9@1|%|
diff --git a/runtime/syntax/testdir/dumps/java_unfoldment_07.dump
b/runtime/syntax/testdir/dumps/java_unfoldment_07.dump
index 69c530d59..5afae5646 100644
--- a/runtime/syntax/testdir/dumps/java_unfoldment_07.dump
+++ b/runtime/syntax/testdir/dumps/java_unfoldment_07.dump
@@ -1,6 +1,6 @@
|/+0#0000e05#ffffff0|*| |1|2@1|||.@67
-@20|*|/| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e|
+0#0000000&|U|n|f|o|l|d|e|n|a|b|l|e| |{+0#0000001#ffff4012|
+0#0000000#ffffff0@27
->}+0#0000001#ffff4012| +0#0000000#ffffff0@73
+@20|*|/| +0#0000000&|i+0#00e0003&|n|t|e|r|f|a|c|e|
+0#0000000&|U|n|f|o|l|d|e|n|a|b|l|e| |{+0#00e0003&| +0#0000000&@27
+>}+0#00e0003&| +0#0000000&@73
|~+0#4040ff13&| @73
|~| @73
|~| @73
diff --git a/runtime/syntax/testdir/input/java_enfoldment.java
b/runtime/syntax/testdir/input/java_enfoldment.java
index 4bfa5d65c..27f43798d 100644
--- a/runtime/syntax/testdir/input/java_enfoldment.java
+++ b/runtime/syntax/testdir/input/java_enfoldment.java
@@ -1,9 +1,9 @@
// VIM_TEST_SETUP setlocal foldenable foldcolumn=2 foldmethod=syntax
// VIM_TEST_SETUP let g:java_foldtext_show_first_or_second_line = 1
+// VIM_TEST_SETUP let g:java_lookbehind_byte_counts = {'javaBlock': -1}
// VIM_TEST_SETUP highlight link javaBlockOtherStart Structure
// VIM_TEST_SETUP highlight link javaBlockStart Todo
-
@SuppressWarnings({
"""
bespoke
diff --git a/runtime/syntax/testdir/input/java_unfoldment.java
b/runtime/syntax/testdir/input/java_unfoldment.java
index 92dd949d7..3d8bb6855 100644
--- a/runtime/syntax/testdir/input/java_unfoldment.java
+++ b/runtime/syntax/testdir/input/java_unfoldment.java
@@ -1,9 +1,9 @@
// VIM_TEST_SETUP setlocal nofoldenable
// VIM_TEST_SETUP let g:java_mark_braces_in_parens_as_errors = 1
+// VIM_TEST_SETUP let g:java_lookbehind_byte_counts = {'javaBlock': -1}
// VIM_TEST_SETUP highlight link javaBlockOtherStart Structure
// VIM_TEST_SETUP highlight link javaBlockStart Todo
-
@SuppressWarnings({
"""
bespoke
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1ukIxO-0027g7-1g%40256bit.org.