vim/syntax/groovy.vim

101 lines
5.6 KiB
VimL

" File: groovy.vim
" Author: Kenneth Benzie (Benie) <k.benzie83@gmail.com>
" Description: Extended groovy syntax for Jenkins DSL.
" Highlight shell('') and shell('''''') blocks with the sh filetype.
" unlet !b:current_syntax
" Highlight batchFile('') and batchFile('''''') blocks with the batch filetype.
" syn include @groovyHighlightBatch syntax/batch.vim
" syn region groovyHighlightBatch matchgroup=groovyString start="batchFile(\zs'\(''\)\=" end="\(''\)\='\ze)" contains=@groovyHighlightBatch
" keyword definitions
syn keyword groovyExternal native package
syn match groovyExternal "\<import\>\(\s\+static\>\)\?"
syn keyword groovyError goto const
syn keyword groovyConditional if else switch
syn keyword groovyRepeat while for do
syn keyword groovyBoolean true false
syn keyword groovyConstant null
syn keyword groovyTypedef this super
syn keyword groovyOperator new instanceof
syn keyword groovyType boolean char byte short int long float double void Integer Double Date Boolean Float String Array Vector List
syn keyword groovyStatement return
syn keyword groovyStorageClass static synchronized transient volatile final strictfp serializable
syn keyword groovyExceptions throw try catch finally
syn keyword groovyAssert assert
syn keyword groovyMethodDecl synchronized throws
syn keyword groovyClassDecl extends implements interface
" To differentiate the keyword class from MyClass.class we use a match here
syn match groovyTypedef "\.\s*\<class\>"ms=s+1
syn keyword groovyClassDecl enum
syn match groovyClassDecl "^class\>"
syn match groovyClassDecl "[^.]\s*\<class\>"ms=s+1
" syn keyword groovyBranch break continue nextgroup=groovyUserLabelRef skipwhite
" syn match groovyUserLabelRef "\k\+" contained
syn keyword groovyScopeDecl public protected private abstract
syn match groovyNumber "\<\(0[bB][0-1]\+\|0[0-7]*\|0[xX]\x\+\|\d\(\d\|_\d\)*\)[lL]\=\>"
syn match groovyNumber "\(\<\d\(\d\|_\d\)*\.\(\d\(\d\|_\d\)*\)\=\|\.\d\(\d\|_\d\)*\)\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\="
syn match groovyNumber "\<\d\(\d\|_\d\)*[eE][-+]\=\d\(\d\|_\d\)*[fFdD]\=\>"
syn match groovyNumber "\<\d\(\d\|_\d\)*\([eE][-+]\=\d\(\d\|_\d\)*\)\=[fFdD]\>"
syn match groovyTodo "\(TODO\|FIXME\)" contained
syn region groovyComment start='\/\*' end='\*\/' contains=groovyTodo fold
syn match groovyComment '\/\/.*$' contains=groovyTodo
syn match groovyDelimiter '[()\[\]]'
syn region groovyBlock matchgroup=groovyDelimiter start='{' end='}' transparent fold
syn match groovyStructure '\w\+\ze\s*{'
syn match groovyFunction '\w\+\ze\s*('
syn region groovyIdentifier start='${' end='}' oneline
syn region groovyString start=+"+ end=+"+ oneline contains=groovyIdentifier
syn region groovyString start=+'+ end=+'+ oneline contains=groovyIdentifier
syn region groovyString start=+'''+ end=+'''+ fold contains=groovyIdentifier
syn match groovyKeywordParam "\w\+\ze\s*=\s*"
syn region groovyFunctionParams matchgroup=groovyDelimiter start='(' end=')' contains=groovyComment,groovyString,groovyIdentifier,groovyNumber,groovyBoolean,groovyKeywordParam transparent
syn cluster groovySyntax contains=groovyAssert,groovyBlock,groovyBoolean,groovyBranch,groovyClassDecl,groovyComment,groovyConditional,groovyConstant,groovyDelimiter,groovyError,groovyExceptions,groovyExternal,groovyFunction,groovyIdentifier,groovyMethodDecl,groovyNumber,groovyOperator,groovyRepeat,groovyScopeDecl,groovyStatement,groovyStorageClass,groovyString,groovyStructure,groovyType,groovyTypedef,groovyUserLabelRef
syn include @groovyShellSyntax syntax/sh.vim
unlet b:current_syntax
syn region groovyShellSyntax matchgroup=groovyString start=+\('''\|"""\)+ end=+\('''\|"""\)+ contains=@groovyShellSyntax contained
syn region groovyShell matchgroup=groovyFunction start='shell\s*\ze(' end='\ze)' fold contains=groovyShellSyntax,groovyDelimiter
syn include @groovyBatchSyntax syntax/dosbatch.vim
unlet b:current_syntax
syn region groovyBatchSyntax matchgroup=groovyString start=+\('''\|"""\)+ end=+\('''\|"""\)+ contains=@groovyBatchSyntax contained
syn region groovyBatch matchgroup=groovyFunction start='batchFile\s*\ze(' end='\ze)' fold contains=groovyBatchSyntax,groovyDelimiter
syn region groovyBuildFlowSyntax matchgroup=groovyString start=+\('''\|"""\)+ end=+\('''\|"""\)+ contained contains=groovyStructure,groovyFunction,groovyDelimiter,groovyComment,groovyBlock,groovyString,groovyIdentifier,groovyKeywords,@groovySyntax
syn region groovyBuildFlow matchgroup=groovyFunction start='buildFlow\s*\ze(' end='\ze)' fold contains=groovyBuildFlowSyntax,groovyDelimiter
hi default link groovyAssert Keyword
hi default link groovyBoolean Boolean
hi default link groovyBranch Conditional
hi default link groovyClassDecl Structure
hi default link groovyTodo Todo
hi default link groovyComment Comment
hi default link groovyConditional Conditional
hi default link groovyConstant Constant
hi default link groovyDelimiter Delimiter
hi default link groovyError Error
hi default link groovyExceptions Exception
hi default link groovyExternal Include
hi default link groovyFunction Function
hi default link groovyIdentifier Identifier
hi default link groovyKeywordParam Identifier
hi default link groovyMethodDecl Function
hi default link groovyNumber Number
hi default link groovyOperator Operator
hi default link groovyRepeat Repeat
hi default link groovyScopeDecl Keyword
hi default link groovyShellDelimiter groovyDelimiter
hi default link groovyStatement Statement
hi default link groovyStorageClass StorageClass
hi default link groovyString String
hi default link groovyStructure Structure
hi default link groovyType Type
hi default link groovyTypedef Typedef
hi default link groovyUserLabelRef Label
let b:current_syntax = 'groovy'