1" Vim syntax file 2" Language: Java 3" Maintainer: Claudio Fleiner <[email protected]> 4" URL: https://github.com/fleiner/vim/blob/master/runtime/syntax/java.vim 5" Last Change: 2018 July 26 6 7" Please check :help java.vim for comments on some of the options available. 8 9" quit when a syntax file was already loaded 10if !exists("main_syntax") 11 if exists("b:current_syntax") 12 finish 13 endif 14 " we define it here so that included files can test for it 15 let main_syntax='java' 16 syn region javaFold start="{" end="}" transparent fold 17endif 18 19let s:cpo_save = &cpo 20set cpo&vim 21 22" some characters that cannot be in a java program (outside a string) 23syn match javaError "[\\@`]" 24syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/" 25 26syn match javaOK "\.\.\." 27 28" use separate name so that it can be deleted in javacc.vim 29syn match javaError2 "#\|=<" 30hi def link javaError2 javaError 31 32" keyword definitions 33syn keyword javaExternal native package 34syn match javaExternal "\<import\>\(\s\+static\>\)\?" 35syn keyword javaError goto const 36syn keyword javaConditional if else switch 37syn keyword javaRepeat while for do 38syn keyword javaBoolean true false 39syn keyword javaConstant null 40syn keyword javaTypedef this super 41syn keyword javaOperator var new instanceof 42syn keyword javaType boolean char byte short int long float double 43syn keyword javaType void 44syn keyword javaStatement return 45syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable 46syn keyword javaExceptions throw try catch finally 47syn keyword javaAssert assert 48syn keyword javaMethodDecl synchronized throws 49syn keyword javaClassDecl extends implements interface 50" to differentiate the keyword class from MyClass.class we use a match here 51syn match javaTypedef "\.\s*\<class\>"ms=s+1 52syn keyword javaClassDecl enum 53syn match javaClassDecl "^class\>" 54syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1 55syn match javaAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>" contains=javaString 56syn match javaClassDecl "@interface\>" 57syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite 58syn match javaUserLabelRef "\k\+" contained 59syn match javaVarArg "\.\.\." 60syn keyword javaScopeDecl public protected private abstract 61 62" Java Modules(Since Java 9, for "module-info.java" file) 63if fnamemodify(bufname("%"), ":t") == "module-info.java" 64 syn keyword javaModuleStorageClass module transitive 65 syn keyword javaModuleStmt open requires exports opens uses provides 66 syn keyword javaModuleExternal to with 67 syn cluster javaTop add=javaModuleStorageClass,javaModuleStmt,javaModuleExternal 68endif 69 70if exists("java_highlight_java_lang_ids") 71 let java_highlight_all=1 72endif 73if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang") 74 " java.lang.* 75 syn match javaLangClass "\<System\>" 76 syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException 77 syn cluster javaTop add=javaR_JavaLang 78 syn cluster javaClasses add=javaR_JavaLang 79 hi def link javaR_JavaLang javaR_Java 80 syn keyword javaC_JavaLang Process RuntimePermission StringKeySet CharacterData01 Class ThreadLocal ThreadLocalMap CharacterData0E Package Character StringCoding Long ProcessImpl ProcessEnvironment Short AssertionStatusDirectives 1PackageInfoProxy UnicodeBlock InheritableThreadLocal AbstractStringBuilder StringEnvironment ClassLoader ConditionalSpecialCasing CharacterDataPrivateUse StringBuffer StringDecoder Entry StringEntry WrappedHook StringBuilder StrictMath State ThreadGroup Runtime CharacterData02 MethodArray Object CharacterDataUndefined Integer Gate Boolean Enum Variable Subset StringEncoder Void Terminator CharsetSD IntegerCache CharacterCache Byte CharsetSE Thread SystemClassLoaderAction CharacterDataLatin1 StringValues StackTraceElement Shutdown ShortCache String ConverterSD ByteCache Lock EnclosingMethodInfo Math Float Value Double SecurityManager LongCache ProcessBuilder StringEntrySet Compiler Number UNIXProcess ConverterSE ExternalData CaseInsensitiveComparator CharacterData00 NativeLibrary 81 syn cluster javaTop add=javaC_JavaLang 82 syn cluster javaClasses add=javaC_JavaLang 83 hi def link javaC_JavaLang javaC_Java 84 syn keyword javaE_JavaLang IncompatibleClassChangeError InternalError UnknownError ClassCircularityError AssertionError ThreadDeath IllegalAccessError NoClassDefFoundError ClassFormatError UnsupportedClassVersionError NoSuchFieldError VerifyError ExceptionInInitializerError InstantiationError LinkageError NoSuchMethodError Error UnsatisfiedLinkError StackOverflowError AbstractMethodError VirtualMachineError OutOfMemoryError 85 syn cluster javaTop add=javaE_JavaLang 86 syn cluster javaClasses add=javaE_JavaLang 87 hi def link javaE_JavaLang javaE_Java 88 syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException 89 syn cluster javaTop add=javaX_JavaLang 90 syn cluster javaClasses add=javaX_JavaLang 91 hi def link javaX_JavaLang javaX_Java 92 93 hi def link javaR_Java javaR_ 94 hi def link javaC_Java javaC_ 95 hi def link javaE_Java javaE_ 96 hi def link javaX_Java javaX_ 97 hi def link javaX_ javaExceptions 98 hi def link javaR_ javaExceptions 99 hi def link javaE_ javaExceptions 100 hi def link javaC_ javaConstant 101 102 syn keyword javaLangObject clone equals finalize getClass hashCode 103 syn keyword javaLangObject notify notifyAll toString wait 104 hi def link javaLangObject javaConstant 105 syn cluster javaTop add=javaLangObject 106endif 107 108if filereadable(expand("<sfile>:p:h")."/javaid.vim") 109 source <sfile>:p:h/javaid.vim 110endif 111 112if exists("java_space_errors") 113 if !exists("java_no_trail_space_error") 114 syn match javaSpaceError "\s\+$" 115 endif 116 if !exists("java_no_tab_space_error") 117 syn match javaSpaceError " \+\t"me=e-1 118 endif 119endif 120 121syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter,javaString 122syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel 123syn keyword javaLabel default 124 125" highlighting C++ keywords as errors removed, too many people find it 126" annoying. Was: if !exists("java_allow_cpp_keywords") 127 128" The following cluster contains all java groups except the contained ones 129syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg 130 131 132" Comments 133syn keyword javaTodo contained TODO FIXME XXX 134if exists("java_comment_strings") 135 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell 136 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell 137 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar 138 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar 139 syn match javaCommentCharacter contained "'[^\\]'" 140 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber 141 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber 142endif 143syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell 144syn match javaCommentStar contained "^\s*\*[^/]"me=e-1 145syn match javaCommentStar contained "^\s*\*$" 146syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell 147hi def link javaCommentString javaString 148hi def link javaComment2String javaString 149hi def link javaCommentCharacter javaCharacter 150 151syn cluster javaTop add=javaComment,javaLineComment 152 153if !exists("java_ignore_javadoc") && main_syntax != 'jsp' 154 syntax case ignore 155 " syntax coloring for javadoc comments (HTML) 156 syntax include @javaHtml <sfile>:p:h/html.vim 157 unlet b:current_syntax 158 " HTML enables spell checking for all text that is not in a syntax item. This 159 " is wrong for Java (all identifiers would be spell-checked), so it's undone 160 " here. 161 syntax spell default 162 163 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell 164 syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag 165 166 syn region javaDocTags contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" 167 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam 168 syn match javaDocParam contained "\s\S\+" 169 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>" 170 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam 171 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend 172 syntax case match 173endif 174 175" match the special comment /**/ 176syn match javaComment "/\*\*/" 177 178" Strings and constants 179syn match javaSpecialError contained "\\." 180syn match javaSpecialCharError contained "[^']" 181syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)" 182syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell 183" next line disabled, it can cause a crash for a long line 184"syn match javaStringError +"\([^"\\]\|\\.\)*$+ 185syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError 186syn match javaCharacter "'\\''" contains=javaSpecialChar 187syn match javaCharacter "'[^\\]'" 188syn match javaNumber "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>" 189syn match javaNumber "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\=" 190syn match javaNumber "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>" 191syn match javaNumber "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>" 192 193" unicode characters 194syn match javaSpecial "\\u\d\{4\}" 195 196syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError 197 198if exists("java_highlight_functions") 199 if java_highlight_functions == "indent" 200 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation 201 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation 202 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation 203 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]<>]*([^-+*/]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses,javaAnnotation 204 else 205 " This line catches method declarations at any indentation>0, but it assumes 206 " two things: 207 " 1. class names are always capitalized (ie: Button) 208 " 2. method names are never capitalized (except constructors, of course) 209 "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 210 syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|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,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses,javaAnnotation 211 endif 212 syn match javaLambdaDef "[a-zA-Z_][a-zA-Z0-9_]*\s*->" 213 syn match javaBraces "[{}]" 214 syn cluster javaTop add=javaFuncDef,javaBraces,javaLambdaDef 215endif 216 217if exists("java_highlight_debug") 218 219 " Strings and constants 220 syn match javaDebugSpecial contained "\\\d\d\d\|\\." 221 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial 222 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+ 223 syn match javaDebugCharacter contained "'[^\\]'" 224 syn match javaDebugSpecialCharacter contained "'\\.'" 225 syn match javaDebugSpecialCharacter contained "'\\''" 226 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>" 227 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\=" 228 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" 229 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>" 230 syn keyword javaDebugBoolean contained true false 231 syn keyword javaDebugType contained null this super 232 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen 233 234 " to make this work you must define the highlighting for these groups 235 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 236 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 237 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 238 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen 239 240 syn cluster javaTop add=javaDebug 241 242 hi def link javaDebug Debug 243 hi def link javaDebugString DebugString 244 hi def link javaDebugStringError javaError 245 hi def link javaDebugType DebugType 246 hi def link javaDebugBoolean DebugBoolean 247 hi def link javaDebugNumber Debug 248 hi def link javaDebugSpecial DebugSpecial 249 hi def link javaDebugSpecialCharacter DebugSpecial 250 hi def link javaDebugCharacter DebugString 251 hi def link javaDebugParen Debug 252 253 hi def link DebugString String 254 hi def link DebugSpecial Special 255 hi def link DebugBoolean Boolean 256 hi def link DebugType Type 257endif 258 259if exists("java_mark_braces_in_parens_as_errors") 260 syn match javaInParen contained "[{}]" 261 hi def link javaInParen javaError 262 syn cluster javaTop add=javaInParen 263endif 264 265" catch errors caused by wrong parenthesis 266syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1 267syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained 268syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained 269syn match javaParenError ")" 270" catch errors caused by wrong square parenthesis 271syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1 272syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained 273syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained 274syn match javaParenError "\]" 275 276hi def link javaParenError javaError 277 278if exists("java_highlight_functions") 279 syn match javaLambdaDef "([a-zA-Z0-9_<>\[\], \t]*)\s*->" 280 " needs to be defined after the parenthesis error catcher to work 281endif 282 283if !exists("java_minlines") 284 let java_minlines = 10 285endif 286exec "syn sync ccomment javaComment minlines=" . java_minlines 287 288" The default highlighting. 289hi def link javaLambdaDef Function 290hi def link javaFuncDef Function 291hi def link javaVarArg Function 292hi def link javaBraces Function 293hi def link javaBranch Conditional 294hi def link javaUserLabelRef javaUserLabel 295hi def link javaLabel Label 296hi def link javaUserLabel Label 297hi def link javaConditional Conditional 298hi def link javaRepeat Repeat 299hi def link javaExceptions Exception 300hi def link javaAssert Statement 301hi def link javaStorageClass StorageClass 302hi def link javaMethodDecl javaStorageClass 303hi def link javaClassDecl javaStorageClass 304hi def link javaScopeDecl javaStorageClass 305 306hi def link javaBoolean Boolean 307hi def link javaSpecial Special 308hi def link javaSpecialError Error 309hi def link javaSpecialCharError Error 310hi def link javaString String 311hi def link javaCharacter Character 312hi def link javaSpecialChar SpecialChar 313hi def link javaNumber Number 314hi def link javaError Error 315hi def link javaStringError Error 316hi def link javaStatement Statement 317hi def link javaOperator Operator 318hi def link javaComment Comment 319hi def link javaDocComment Comment 320hi def link javaLineComment Comment 321hi def link javaConstant Constant 322hi def link javaTypedef Typedef 323hi def link javaTodo Todo 324hi def link javaAnnotation PreProc 325 326hi def link javaCommentTitle SpecialComment 327hi def link javaDocTags Special 328hi def link javaDocParam Function 329hi def link javaDocSeeTagParam Function 330hi def link javaCommentStar javaComment 331 332hi def link javaType Type 333hi def link javaExternal Include 334 335hi def link htmlComment Special 336hi def link htmlCommentPart Special 337hi def link javaSpaceError Error 338 339if fnamemodify(bufname("%"), ":t") == "module-info.java" 340 hi def link javaModuleStorageClass StorageClass 341 hi def link javaModuleStmt Statement 342 hi def link javaModuleExternal Include 343endif 344 345let b:current_syntax = "java" 346 347if main_syntax == 'java' 348 unlet main_syntax 349endif 350 351let b:spell_options="contained" 352let &cpo = s:cpo_save 353unlet s:cpo_save 354 355" vim: ts=8 356