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