java.vim 18 KB

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