blob: e48279bd1a5fefd5ebf3e7413e453b023efdbf4f [file] [log] [blame]
Bram Moolenaarc01140a2006-03-24 22:21:52 +00001" Vim syntax file
2" Language: Groovy
Bram Moolenaar388a5d42020-05-26 21:20:45 +02003" Original Author: Alessio Pace <billy.corgan AT tiscali.it>
4" Maintainer: Tobias Rapp <yahuxo+vim AT mailbox.org>
Bram Moolenaar942db232021-02-13 18:14:48 +01005" Version: 0.1.18
Bram Moolenaar6be7f872012-01-20 21:08:56 +01006" URL: http://www.vim.org/scripts/script.php?script_id=945
Bram Moolenaar942db232021-02-13 18:14:48 +01007" Last Change: 2021 Feb 03
Bram Moolenaarc01140a2006-03-24 22:21:52 +00008
Bram Moolenaar81af9252010-12-10 20:35:50 +01009" THE ORIGINAL AUTHOR'S NOTES:
10"
Bram Moolenaarc01140a2006-03-24 22:21:52 +000011" This is my very first vim script, I hope to have
12" done it the right way.
Bram Moolenaar6be7f872012-01-20 21:08:56 +010013"
Bram Moolenaarc01140a2006-03-24 22:21:52 +000014" I must directly or indirectly thank the author of java.vim and ruby.vim:
15" I copied from them most of the stuff :-)
16"
17" Relies on html.vim
18
19" For version 5.x: Clear all syntax items
20" For version 6.x: Quit when a syntax file was already loaded
21"
Bram Moolenaar81af9252010-12-10 20:35:50 +010022" HOWTO USE IT (INSTALL) when not part of the distribution:
Bram Moolenaarc01140a2006-03-24 22:21:52 +000023"
24" 1) copy the file in the (global or user's $HOME/.vim/syntax/) syntax folder
Bram Moolenaar6be7f872012-01-20 21:08:56 +010025"
Bram Moolenaarc01140a2006-03-24 22:21:52 +000026" 2) add this line to recognize groovy files by filename extension:
27"
28" au BufNewFile,BufRead *.groovy setf groovy
29" in the global vim filetype.vim file or inside $HOME/.vim/filetype.vim
30"
31" 3) add this part to recognize by content groovy script (no extension needed :-)
32"
33" if did_filetype()
34" finish
35" endif
36" if getline(1) =~ '^#!.*[/\\]groovy\>'
37" setf groovy
38" endif
39"
40" in the global scripts.vim file or in $HOME/.vim/scripts.vim
Bram Moolenaar6be7f872012-01-20 21:08:56 +010041"
Bram Moolenaarc01140a2006-03-24 22:21:52 +000042" 4) open/write a .groovy file or a groovy script :-)
43"
44" Let me know if you like it or send me patches, so that I can improve it
45" when I have time
46
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020047" quit when a syntax file was already loaded
Bram Moolenaarc01140a2006-03-24 22:21:52 +000048if !exists("main_syntax")
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020049 if exists("b:current_syntax")
Bram Moolenaarc01140a2006-03-24 22:21:52 +000050 finish
51 endif
52 " we define it here so that included files can test for it
53 let main_syntax='groovy'
54endif
55
Bram Moolenaar6be7f872012-01-20 21:08:56 +010056let s:cpo_save = &cpo
57set cpo&vim
58
Bram Moolenaarc01140a2006-03-24 22:21:52 +000059" ##########################
60" Java stuff taken from java.vim
61" some characters that cannot be in a groovy program (outside a string)
62" syn match groovyError "[\\@`]"
63"syn match groovyError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
64"syn match groovyOK "\.\.\."
65
66" keyword definitions
67syn keyword groovyExternal native package
Bram Moolenaarff034192013-04-24 18:51:19 +020068syn match groovyExternal "\<import\>\(\s\+static\>\)\?"
Bram Moolenaarc01140a2006-03-24 22:21:52 +000069syn keyword groovyError goto const
70syn keyword groovyConditional if else switch
71syn keyword groovyRepeat while for do
72syn keyword groovyBoolean true false
73syn keyword groovyConstant null
74syn keyword groovyTypedef this super
75syn keyword groovyOperator new instanceof
76syn keyword groovyType boolean char byte short int long float double
77syn keyword groovyType void
78syn keyword groovyType Integer Double Date Boolean Float String Array Vector List
79syn keyword groovyStatement return
80syn keyword groovyStorageClass static synchronized transient volatile final strictfp serializable
81syn keyword groovyExceptions throw try catch finally
82syn keyword groovyAssert assert
83syn keyword groovyMethodDecl synchronized throws
84syn keyword groovyClassDecl extends implements interface
85" to differentiate the keyword class from MyClass.class we use a match here
86syn match groovyTypedef "\.\s*\<class\>"ms=s+1
87syn keyword groovyClassDecl enum
88syn match groovyClassDecl "^class\>"
89syn match groovyClassDecl "[^.]\s*\<class\>"ms=s+1
90syn keyword groovyBranch break continue nextgroup=groovyUserLabelRef skipwhite
91syn match groovyUserLabelRef "\k\+" contained
92syn keyword groovyScopeDecl public protected private abstract
93
94
95if exists("groovy_highlight_groovy_lang_ids") || exists("groovy_highlight_groovy_lang") || exists("groovy_highlight_all")
96 " groovy.lang.*
97 syn keyword groovyLangClass Closure MetaMethod GroovyObject
Bram Moolenaar6be7f872012-01-20 21:08:56 +010098
Bram Moolenaarc01140a2006-03-24 22:21:52 +000099 syn match groovyJavaLangClass "\<System\>"
100 syn keyword groovyJavaLangClass Cloneable Comparable Runnable Serializable Boolean Byte Class Object
101 syn keyword groovyJavaLangClass Character CharSequence ClassLoader Compiler
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100102 " syn keyword groovyJavaLangClass Integer Double Float Long
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000103 syn keyword groovyJavaLangClass InheritableThreadLocal Math Number Object Package Process
104 syn keyword groovyJavaLangClass Runtime RuntimePermission InheritableThreadLocal
105 syn keyword groovyJavaLangClass SecurityManager Short StrictMath StackTraceElement
106 syn keyword groovyJavaLangClass StringBuffer Thread ThreadGroup
107 syn keyword groovyJavaLangClass ThreadLocal Throwable Void ArithmeticException
108 syn keyword groovyJavaLangClass ArrayIndexOutOfBoundsException AssertionError
109 syn keyword groovyJavaLangClass ArrayStoreException ClassCastException
110 syn keyword groovyJavaLangClass ClassNotFoundException
111 syn keyword groovyJavaLangClass CloneNotSupportedException Exception
112 syn keyword groovyJavaLangClass IllegalAccessException
113 syn keyword groovyJavaLangClass IllegalArgumentException
114 syn keyword groovyJavaLangClass IllegalMonitorStateException
115 syn keyword groovyJavaLangClass IllegalStateException
116 syn keyword groovyJavaLangClass IllegalThreadStateException
117 syn keyword groovyJavaLangClass IndexOutOfBoundsException
118 syn keyword groovyJavaLangClass InstantiationException InterruptedException
119 syn keyword groovyJavaLangClass NegativeArraySizeException NoSuchFieldException
120 syn keyword groovyJavaLangClass NoSuchMethodException NullPointerException
121 syn keyword groovyJavaLangClass NumberFormatException RuntimeException
122 syn keyword groovyJavaLangClass SecurityException StringIndexOutOfBoundsException
123 syn keyword groovyJavaLangClass UnsupportedOperationException
124 syn keyword groovyJavaLangClass AbstractMethodError ClassCircularityError
125 syn keyword groovyJavaLangClass ClassFormatError Error ExceptionInInitializerError
126 syn keyword groovyJavaLangClass IllegalAccessError InstantiationError
127 syn keyword groovyJavaLangClass IncompatibleClassChangeError InternalError
128 syn keyword groovyJavaLangClass LinkageError NoClassDefFoundError
129 syn keyword groovyJavaLangClass NoSuchFieldError NoSuchMethodError
130 syn keyword groovyJavaLangClass OutOfMemoryError StackOverflowError
131 syn keyword groovyJavaLangClass ThreadDeath UnknownError UnsatisfiedLinkError
132 syn keyword groovyJavaLangClass UnsupportedClassVersionError VerifyError
133 syn keyword groovyJavaLangClass VirtualMachineError
134
135 syn keyword groovyJavaLangObject clone equals finalize getClass hashCode
136 syn keyword groovyJavaLangObject notify notifyAll toString wait
137
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200138 hi def link groovyLangClass groovyConstant
139 hi def link groovyJavaLangClass groovyExternal
140 hi def link groovyJavaLangObject groovyConstant
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000141 syn cluster groovyTop add=groovyJavaLangObject,groovyJavaLangClass,groovyLangClass
142 syn cluster groovyClasses add=groovyJavaLangClass,groovyLangClass
143endif
144
145
146" Groovy stuff
147syn match groovyOperator "\.\."
148syn match groovyOperator "<\{2,3}"
149syn match groovyOperator ">\{2,3}"
150syn match groovyOperator "->"
Bram Moolenaarf2571c62015-06-09 19:44:55 +0200151syn match groovyLineComment '^\%1l#!.*' " Shebang line
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000152syn match groovyExceptions "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>"
153
154" Groovy JDK stuff
155syn keyword groovyJDKBuiltin as def in
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100156syn keyword groovyJDKOperOverl div minus plus abs round power multiply
157syn keyword groovyJDKMethods each call inject sort print println
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000158syn keyword groovyJDKMethods getAt putAt size push pop toList getText writeLine eachLine readLines
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100159syn keyword groovyJDKMethods withReader withStream withWriter withPrintWriter write read leftShift
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000160syn keyword groovyJDKMethods withWriterAppend readBytes splitEachLine
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100161syn keyword groovyJDKMethods newInputStream newOutputStream newPrintWriter newReader newWriter
162syn keyword groovyJDKMethods compareTo next previous isCase
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000163syn keyword groovyJDKMethods times step toInteger upto any collect dump every find findAll grep
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100164syn keyword groovyJDKMethods inspect invokeMethods join
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000165syn keyword groovyJDKMethods getErr getIn getOut waitForOrKill
166syn keyword groovyJDKMethods count tokenize asList flatten immutable intersect reverse reverseEach
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100167syn keyword groovyJDKMethods subMap append asWritable eachByte eachLine eachFile
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000168syn cluster groovyTop add=groovyJDKBuiltin,groovyJDKOperOverl,groovyJDKMethods
169
170" no useful I think, so I comment it..
171"if filereadable(expand("<sfile>:p:h")."/groovyid.vim")
172 " source <sfile>:p:h/groovyid.vim
173"endif
174
175if exists("groovy_space_errors")
176 if !exists("groovy_no_trail_space_error")
177 syn match groovySpaceError "\s\+$"
178 endif
179 if !exists("groovy_no_tab_space_error")
180 syn match groovySpaceError " \+\t"me=e-1
181 endif
182endif
183
184" it is a better case construct than java.vim to match groovy syntax
185syn region groovyLabelRegion transparent matchgroup=groovyLabel start="\<case\>" matchgroup=NONE end=":\|$" contains=groovyNumber,groovyString,groovyLangClass,groovyJavaLangClass
186syn match groovyUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=groovyLabel
187syn keyword groovyLabel default
188
189if !exists("groovy_allow_cpp_keywords")
190 syn keyword groovyError auto delete extern friend inline redeclared
191 syn keyword groovyError register signed sizeof struct template typedef union
192 syn keyword groovyError unsigned operator
193endif
194
195" The following cluster contains all groovy groups except the contained ones
196syn cluster groovyTop add=groovyExternal,groovyError,groovyError,groovyBranch,groovyLabelRegion,groovyLabel,groovyConditional,groovyRepeat,groovyBoolean,groovyConstant,groovyTypedef,groovyOperator,groovyType,groovyType,groovyStatement,groovyStorageClass,groovyAssert,groovyExceptions,groovyMethodDecl,groovyClassDecl,groovyClassDecl,groovyClassDecl,groovyScopeDecl,groovyError,groovyError2,groovyUserLabel,groovyLangObject
197
198
199" Comments
200syn keyword groovyTodo contained TODO FIXME XXX
201if exists("groovy_comment_strings")
202 syn region groovyCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=groovySpecial,groovyCommentStar,groovySpecialChar,@Spell
203 syn region groovyComment2String contained start=+"+ end=+$\|"+ contains=groovySpecial,groovySpecialChar,@Spell
204 syn match groovyCommentCharacter contained "'\\[^']\{1,6\}'" contains=groovySpecialChar
205 syn match groovyCommentCharacter contained "'\\''" contains=groovySpecialChar
206 syn match groovyCommentCharacter contained "'[^\\]'"
207 syn cluster groovyCommentSpecial add=groovyCommentString,groovyCommentCharacter,groovyNumber
208 syn cluster groovyCommentSpecial2 add=groovyComment2String,groovyCommentCharacter,groovyNumber
209endif
210syn region groovyComment start="/\*" end="\*/" contains=@groovyCommentSpecial,groovyTodo,@Spell
211syn match groovyCommentStar contained "^\s*\*[^/]"me=e-1
212syn match groovyCommentStar contained "^\s*\*$"
213syn match groovyLineComment "//.*" contains=@groovyCommentSpecial2,groovyTodo,@Spell
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200214hi def link groovyCommentString groovyString
215hi def link groovyComment2String groovyString
216hi def link groovyCommentCharacter groovyCharacter
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000217
218syn cluster groovyTop add=groovyComment,groovyLineComment
219
220if !exists("groovy_ignore_groovydoc") && main_syntax != 'jsp'
221 syntax case ignore
222 " syntax coloring for groovydoc comments (HTML)
223 " syntax include @groovyHtml <sfile>:p:h/html.vim
224 syntax include @groovyHtml runtime! syntax/html.vim
225 unlet b:current_syntax
Bram Moolenaar5c736222010-01-06 20:54:52 +0100226 syntax spell default " added by Bram
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000227 syn region groovyDocComment start="/\*\*" end="\*/" keepend contains=groovyCommentTitle,@groovyHtml,groovyDocTags,groovyTodo,@Spell
228 syn region groovyCommentTitle contained matchgroup=groovyDocComment start="/\*\*" matchgroup=groovyCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@groovyHtml,groovyCommentStar,groovyTodo,@Spell,groovyDocTags
229
230 syn region groovyDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
231 syn match groovyDocTags contained "@\(see\|param\|exception\|throws\|since\)\s\+\S\+" contains=groovyDocParam
232 syn match groovyDocParam contained "\s\S\+"
233 syn match groovyDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
234 syntax case match
235endif
236
237" match the special comment /**/
238syn match groovyComment "/\*\*/"
239
240" Strings and constants
241syn match groovySpecialError contained "\\."
242syn match groovySpecialCharError contained "[^']"
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100243syn match groovySpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)"
244syn match groovyRegexChar contained "\\."
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000245syn region groovyString start=+"+ end=+"+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
Bram Moolenaar81af9252010-12-10 20:35:50 +0100246syn region groovyString start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell
247syn region groovyString start=+"""+ end=+"""+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
248syn region groovyString start=+'''+ end=+'''+ contains=groovySpecialChar,groovySpecialError,@Spell
Bram Moolenaar26852122016-05-24 20:02:38 +0200249if exists("groovy_regex_strings")
250 " regex strings interfere with the division operator and thus are disabled
251 " by default
252 syn region groovyString start='/[^/*]' end='/' contains=groovySpecialChar,groovyRegexChar,groovyELExpr
253endif
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000254" syn region groovyELExpr start=+${+ end=+}+ keepend contained
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100255syn match groovyELExpr /\${.\{-}}/ contained
Bram Moolenaar942db232021-02-13 18:14:48 +0100256" Fix: force use of the NFA regexp engine (2), see GitHub issue #7280
257syn match groovyELExpr /\%#=2\$[a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE_][a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE0-9_.]*/ contained
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200258hi def link groovyELExpr Identifier
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000259
260" TODO: better matching. I am waiting to understand how it really works in groovy
261" syn region groovyClosureParamsBraces start=+|+ end=+|+ contains=groovyClosureParams
262" syn match groovyClosureParams "[ a-zA-Z0-9_*]\+" contained
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200263" hi def link groovyClosureParams Identifier
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000264
265" next line disabled, it can cause a crash for a long line
266"syn match groovyStringError +"\([^"\\]\|\\.\)*$+
267
268" disabled: in groovy strings or characters are written the same
269" syn match groovyCharacter "'[^']*'" contains=groovySpecialChar,groovySpecialCharError
270" syn match groovyCharacter "'\\''" contains=groovySpecialChar
271" syn match groovyCharacter "'[^\\]'"
272syn match groovyNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
273syn match groovyNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
274syn match groovyNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
275syn match groovyNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
276
277" unicode characters
278syn match groovySpecial "\\u\d\{4\}"
279
280syn cluster groovyTop add=groovyString,groovyCharacter,groovyNumber,groovySpecial,groovyStringError
281
282if exists("groovy_highlight_functions")
283 if groovy_highlight_functions == "indent"
284 syn match groovyFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses
285 syn region groovyFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses
286 syn match groovyFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses
287 syn region groovyFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=groovyScopeDecl,groovyType,groovyStorageClass,@groovyClasses
288 else
289 " This line catches method declarations at any indentation>0, but it assumes
290 " two things:
291 " 1. class names are always capitalized (ie: Button)
292 " 2. method names are never capitalized (except constructors, of course)
293 syn region groovyFuncDef 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=groovyScopeDecl,groovyType,groovyStorageClass,groovyComment,groovyLineComment,@groovyClasses
294 endif
295 syn match groovyBraces "[{}]"
296 syn cluster groovyTop add=groovyFuncDef,groovyBraces
297endif
298
299if exists("groovy_highlight_debug")
300
301 " Strings and constants
302 syn match groovyDebugSpecial contained "\\\d\d\d\|\\."
303 syn region groovyDebugString contained start=+"+ end=+"+ contains=groovyDebugSpecial
304 syn match groovyDebugStringError +"\([^"\\]\|\\.\)*$+
305 syn match groovyDebugCharacter contained "'[^\\]'"
306 syn match groovyDebugSpecialCharacter contained "'\\.'"
307 syn match groovyDebugSpecialCharacter contained "'\\''"
308 syn match groovyDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
309 syn match groovyDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
310 syn match groovyDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
311 syn match groovyDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
312 syn keyword groovyDebugBoolean contained true false
313 syn keyword groovyDebugType contained null this super
314 syn region groovyDebugParen start=+(+ end=+)+ contained contains=groovyDebug.*,groovyDebugParen
315
316 " to make this work you must define the highlighting for these groups
317 syn match groovyDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen
318 syn match groovyDebug "\<p\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen
319 syn match groovyDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen
320 syn match groovyDebug "\<trace[SL]\=\s*("me=e-1 contains=groovyDebug.* nextgroup=groovyDebugParen
321
322 syn cluster groovyTop add=groovyDebug
323
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200324 hi def link groovyDebug Debug
325 hi def link groovyDebugString DebugString
326 hi def link groovyDebugStringError groovyError
327 hi def link groovyDebugType DebugType
328 hi def link groovyDebugBoolean DebugBoolean
329 hi def link groovyDebugNumber Debug
330 hi def link groovyDebugSpecial DebugSpecial
331 hi def link groovyDebugSpecialCharacter DebugSpecial
332 hi def link groovyDebugCharacter DebugString
333 hi def link groovyDebugParen Debug
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100334
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200335 hi def link DebugString String
336 hi def link DebugSpecial Special
337 hi def link DebugBoolean Boolean
338 hi def link DebugType Type
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000339endif
340
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100341" Match all Exception classes
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000342syn match groovyExceptions "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>"
343
344
345if !exists("groovy_minlines")
346 let groovy_minlines = 10
347endif
348exec "syn sync ccomment groovyComment minlines=" . groovy_minlines
349
350
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100351" ###################
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000352" Groovy stuff
353" syn match groovyOperator "|[ ,a-zA-Z0-9_*]\+|"
354
355" All groovy valid tokens
356" syn match groovyTokens ";\|,\|<=>\|<>\|:\|:=\|>\|>=\|=\|==\|<\|<=\|!=\|/\|/=\|\.\.|\.\.\.\|\~=\|\~=="
357" syn match groovyTokens "\*=\|&\|&=\|\*\|->\|\~\|+\|-\|/\|?\|<<<\|>>>\|<<\|>>"
358
359" Must put explicit these ones because groovy.vim mark them as errors otherwise
360" syn match groovyTokens "<=>\|<>\|==\~"
361"syn cluster groovyTop add=groovyTokens
362
363" Mark these as operators
364
Viktor Szépe3fc7a7e2023-08-23 21:20:00 +0200365" Highlight brackets
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000366" syn match groovyBraces "[{}]"
367" syn match groovyBraces "[\[\]]"
368" syn match groovyBraces "[\|]"
369
370if exists("groovy_mark_braces_in_parens_as_errors")
371 syn match groovyInParen contained "[{}]"
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200372 hi def link groovyInParen groovyError
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000373 syn cluster groovyTop add=groovyInParen
374endif
375
376" catch errors caused by wrong parenthesis
377syn region groovyParenT transparent matchgroup=groovyParen start="(" end=")" contains=@groovyTop,groovyParenT1
378syn region groovyParenT1 transparent matchgroup=groovyParen1 start="(" end=")" contains=@groovyTop,groovyParenT2 contained
379syn region groovyParenT2 transparent matchgroup=groovyParen2 start="(" end=")" contains=@groovyTop,groovyParenT contained
380syn match groovyParenError ")"
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200381hi def link groovyParenError groovyError
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000382
383" catch errors caused by wrong square parenthesis
384syn region groovyParenT transparent matchgroup=groovyParen start="\[" end="\]" contains=@groovyTop,groovyParenT1
385syn region groovyParenT1 transparent matchgroup=groovyParen1 start="\[" end="\]" contains=@groovyTop,groovyParenT2 contained
386syn region groovyParenT2 transparent matchgroup=groovyParen2 start="\[" end="\]" contains=@groovyTop,groovyParenT contained
387syn match groovyParenError "\]"
388
389" ###############################
390" java.vim default highlighting
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200391hi def link groovyFuncDef Function
392hi def link groovyBraces Function
393hi def link groovyBranch Conditional
394hi def link groovyUserLabelRef groovyUserLabel
395hi def link groovyLabel Label
396hi def link groovyUserLabel Label
397hi def link groovyConditional Conditional
398hi def link groovyRepeat Repeat
399hi def link groovyExceptions Exception
400hi def link groovyAssert Statement
401hi def link groovyStorageClass StorageClass
402hi def link groovyMethodDecl groovyStorageClass
403hi def link groovyClassDecl groovyStorageClass
404hi def link groovyScopeDecl groovyStorageClass
405hi def link groovyBoolean Boolean
406hi def link groovySpecial Special
407hi def link groovySpecialError Error
408hi def link groovySpecialCharError Error
409hi def link groovyString String
410hi def link groovyRegexChar String
411hi def link groovyCharacter Character
412hi def link groovySpecialChar SpecialChar
413hi def link groovyNumber Number
414hi def link groovyError Error
415hi def link groovyStringError Error
416hi def link groovyStatement Statement
417hi def link groovyOperator Operator
418hi def link groovyComment Comment
419hi def link groovyDocComment Comment
420hi def link groovyLineComment Comment
421hi def link groovyConstant Constant
422hi def link groovyTypedef Typedef
423hi def link groovyTodo Todo
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100424
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200425hi def link groovyCommentTitle SpecialComment
426hi def link groovyDocTags Special
427hi def link groovyDocParam Function
428hi def link groovyCommentStar groovyComment
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100429
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200430hi def link groovyType Type
431hi def link groovyExternal Include
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100432
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200433hi def link htmlComment Special
434hi def link htmlCommentPart Special
435hi def link groovySpaceError Error
436hi def link groovyJDKBuiltin Special
437hi def link groovyJDKOperOverl Operator
438hi def link groovyJDKMethods Function
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000439
440
441let b:current_syntax = "groovy"
442if main_syntax == 'groovy'
443 unlet main_syntax
444endif
445
446let b:spell_options="contained"
447
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100448let &cpo = s:cpo_save
449unlet s:cpo_save
450
Bram Moolenaarc01140a2006-03-24 22:21:52 +0000451" vim: ts=8