|
1 | 1 | " Vim syntax file |
2 | | -" Language: Java |
3 | | -" Maintainer: Claudio Fleiner <claudio@fleiner.com> |
4 | | -" URL: https://github.com/fleiner/vim/blob/master/runtime/syntax/java.vim |
5 | | -" Last Change: 2024 Apr 04 |
| 2 | +" Language: Java |
| 3 | +" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com> |
| 4 | +" Former Maintainer: Claudio Fleiner <claudio@fleiner.com> |
| 5 | +" Repository: https://github.com/zzzyxwvut/java-vim.git |
| 6 | +" Last Change: 2024 Apr 13 |
6 | 7 |
|
7 | 8 | " Please check :help java.vim for comments on some of the options available. |
8 | 9 |
|
@@ -63,7 +64,7 @@ syn match javaClassDecl "\<permits\>\%(\s*(\)\@!" |
63 | 64 | syn match javaClassDecl "\<record\>\%(\s*(\)\@!" |
64 | 65 | syn match javaClassDecl "^class\>" |
65 | 66 | syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1 |
66 | | -syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" contains=javaString |
| 67 | +syn match javaAnnotation "@\%(\K\k*\.\)*\K\k*\>" |
67 | 68 | syn match javaClassDecl "@interface\>" |
68 | 69 | syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite |
69 | 70 | syn match javaUserLabelRef "\k\+" contained |
@@ -288,18 +289,24 @@ syn cluster javaTop add=javaString,javaStrTempl,javaCharacter,javaNumber,javaSpe |
288 | 289 |
|
289 | 290 | if exists("java_highlight_functions") |
290 | 291 | if java_highlight_functions == "indent" |
291 | | - syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,@javaClasses,javaAnnotation |
292 | | - syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,@javaClasses,javaAnnotation |
293 | | - syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,@javaClasses,javaAnnotation |
294 | | - syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,@javaClasses,javaAnnotation |
| 292 | + syn match javaFuncDef "^\%(\t\| \%( \{6\}\)\=\)\K\%(\k\|[ .,<>\[\]]\)*([^-+*/]*)" contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,@javaClasses,javaAnnotation |
| 293 | + syn region javaFuncDef start=+^\%(\t\| \%( \{6\}\)\=\)\K\%(\k\|[ .,<>\[\]]\)*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,@javaClasses,javaAnnotation |
295 | 294 | else |
296 | | - " This line catches method declarations at any indentation>0, but it assumes |
297 | | - " two things: |
298 | | - " 1. class names are always capitalized (ie: Button) |
299 | | - " 2. method names are never capitalized (except constructors, of course) |
300 | | - "syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses |
301 | | - syn region javaFuncDef start=+^\s\+\%(\%(public\|protected\|private\|static\|\%(abstract\|default\)\|final\|native\|synchronized\)\s\+\)*\%(<.*>\s\+\)\?\%(\%(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\%([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\%(<[^(){}]*>\)\=\%(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*(+ end=+)+ contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses,javaAnnotation |
| 295 | + " This is the "style" variant (:help ft-java-syntax). |
| 296 | + " |
| 297 | + " Match arbitrarily indented method and constructor declarations |
| 298 | + " and some enum constants. |
| 299 | + " |
| 300 | + " TODO: Come back to refine and fix the parts of javaFuncDef. |
| 301 | + " TODO: Request the new regexp engine for [:upper:] and [:lower:]. |
| 302 | + " |
| 303 | + " XXX: \C\<[^a-z0-9]\k*\> rejects "type", but matches "τύπος". |
| 304 | + " XXX: \C\<[^A-Z0-9]\k*\> rejects "Method", but matches "Μέθοδος". |
| 305 | + " |
| 306 | + " Match: [abstract] [<α, β>] [Τʬ][<γ>][[][]] [μΜ]ʭʭ(/* ... */); |
| 307 | + syn region javaFuncDef start=+^\s\+\%(\%(public\|protected\|private\|static\|\%(abstract\|default\)\|final\|native\|synchronized\)\s\+\)*\%(<.*>\s\+\)\=\%(\%(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\%(\K\k*\.\)*\<[^a-z0-9]\k*\>\)\%(<[^(){}]*>\)\=\%(\[\]\)*\s\+\<[^A-Z0-9]\k*\>\|\<[^a-z0-9]\k*\>\)\s*(+ end=+)+ contains=javaScopeDecl,javaConceptKind,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses,javaAnnotation |
302 | 308 | endif |
| 309 | + |
303 | 310 | syn match javaLambdaDef "\<\K\k*\>\%(\<default\>\)\@<!\s*->" |
304 | 311 | syn match javaBraces "[{}]" |
305 | 312 | syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef |
@@ -332,11 +339,13 @@ if exists("java_highlight_debug") |
332 | 339 | syn keyword javaDebugType contained null this super |
333 | 340 | syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen |
334 | 341 |
|
335 | | - " to make this work you must define the highlighting for these groups |
336 | | - syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
337 | | - syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
338 | | - syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
339 | | - syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
| 342 | + " To make this work, define the highlighting for these groups. |
| 343 | + syn match javaDebug "\<System\.\%(out\|err\)\.print\%(ln\)\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
| 344 | +" FIXME: What API does "p" belong to? |
| 345 | +" syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
| 346 | + syn match javaDebug "\<\K\k*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
| 347 | +" FIXME: What API do "trace*" belong to? |
| 348 | +" syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen |
340 | 349 |
|
341 | 350 | syn cluster javaTop add=javaDebug |
342 | 351 |
|
@@ -379,8 +388,8 @@ syn match javaParenError "\]" |
379 | 388 | hi def link javaParenError javaError |
380 | 389 |
|
381 | 390 | if exists("java_highlight_functions") |
382 | | - syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->" |
383 | | - " needs to be defined after the parenthesis error catcher to work |
| 391 | + " Make ()-matching definitions after the parenthesis error catcher. |
| 392 | + syn match javaLambdaDef "\k\@4<!(\%(\k\|[[:space:]<>?\[\]@,.]\)*)\s*->" |
384 | 393 | endif |
385 | 394 |
|
386 | 395 | if !exists("java_minlines") |
|
0 commit comments