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