0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00
vim/runtime/syntax/ruby.vim

371 lines
26 KiB
VimL
Raw Normal View History

2004-06-13 20:20:40 +00:00
" Vim syntax file
2006-04-15 20:25:09 +00:00
" Language: Ruby
" Maintainer: Doug Kearns <dougkearns@gmail.com>
2010-05-28 20:54:39 +02:00
" Last Change: 2009 Dec 2
2006-04-15 20:25:09 +00:00
" URL: http://vim-ruby.rubyforge.org
" Anon CVS: See above site
" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
2005-09-16 21:47:57 +00:00
" ----------------------------------------------------------------------------
"
2004-06-13 20:20:40 +00:00
" Previous Maintainer: Mirko Nasato
" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
2005-09-16 21:47:57 +00:00
" ----------------------------------------------------------------------------
2004-06-13 20:20:40 +00:00
2007-05-10 16:56:30 +00:00
if exists("b:current_syntax")
2004-06-13 20:20:40 +00:00
finish
endif
2005-09-16 21:47:57 +00:00
if has("folding") && exists("ruby_fold")
setlocal foldmethod=syntax
endif
2010-05-28 20:54:39 +02:00
syn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo
2008-07-13 17:41:49 +00:00
2005-09-16 21:47:57 +00:00
if exists("ruby_space_errors")
if !exists("ruby_no_trail_space_error")
syn match rubySpaceError display excludenl "\s\+$"
endif
if !exists("ruby_no_tab_space_error")
syn match rubySpaceError display " \+\t"me=e-1
endif
endif
2007-05-05 17:54:07 +00:00
" Operators
if exists("ruby_operators")
2007-05-10 16:56:30 +00:00
syn match rubyOperator "\%([~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::\)"
syn match rubyPseudoOperator "\%(-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=\)"
2008-07-13 17:41:49 +00:00
syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
2007-05-05 17:54:07 +00:00
endif
2004-06-13 20:20:40 +00:00
" Expression Substitution and Backslash Notation
2010-05-28 20:54:39 +02:00
syn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
syn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
syn match rubyQuoteEscape "\\[\\']" contained display
2007-05-05 17:54:07 +00:00
2008-07-13 17:41:49 +00:00
syn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
2010-05-28 20:54:39 +02:00
syn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable
2007-05-05 17:54:07 +00:00
syn match rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
2010-05-28 20:54:39 +02:00
syn match rubyInterpolation "#\$\%(-\w\|\W\)" display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable
2007-05-10 16:56:30 +00:00
syn match rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)" display contained
2010-05-28 20:54:39 +02:00
syn region rubyNoInterpolation start="\\#{" end="}" contained
2007-05-05 17:54:07 +00:00
syn match rubyNoInterpolation "\\#{" display contained
syn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained
2010-05-28 20:54:39 +02:00
syn match rubyNoInterpolation "\\#\$\W" display contained
2005-09-16 21:47:57 +00:00
syn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE
2010-05-28 20:54:39 +02:00
syn region rubyNestedParentheses start="(" skip="\\\\\|\\)" matchgroup=rubyString end=")" transparent contained
syn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" matchgroup=rubyString end="}" transparent contained
syn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" matchgroup=rubyString end=">" transparent contained
syn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]" transparent contained
2008-07-13 17:41:49 +00:00
" These are mostly Oniguruma ready
2010-05-28 20:54:39 +02:00
syn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\)" end=")" contained
syn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)" end=")" contained transparent contains=@rubyRegexpSpecial
syn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline
syn match rubyRegexpCharClass "\\[DdHhSsWw]" contained display
syn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained
syn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained
syn match rubyRegexpQuantifier "[*?+][?+]\=" contained display
syn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display
syn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display
syn match rubyRegexpDot "\." contained display
syn match rubyRegexpSpecial "|" contained display
syn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display
2008-07-13 17:41:49 +00:00
syn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
syn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
syn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display
syn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display
2010-05-28 20:54:39 +02:00
syn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape
syn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
syn cluster rubyRegexpSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment
2004-06-13 20:20:40 +00:00
" Numbers and ASCII Codes
2007-05-10 16:56:30 +00:00
syn match rubyASCIICode "\%(\w\|[]})\"'/]\)\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
2010-05-28 20:54:39 +02:00
syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*\>" display
syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display
syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*\>" display
syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*\>" display
syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display
syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display
2005-09-16 21:47:57 +00:00
" Identifiers
syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent
2010-05-28 20:54:39 +02:00
syn match rubyConstant "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
syn match rubyClassVariable "@@\h\w*" display
syn match rubyInstanceVariable "@\h\w*" display
syn match rubyGlobalVariable "$\%(\h\w*\|-.\)"
syn match rubySymbol "[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
syn match rubySymbol "[]})\"':]\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
syn match rubySymbol "[]})\"':]\@<!:\%(\$\|@@\=\)\=\h\w*"
syn match rubySymbol "[]})\"':]\@<!:\h\w*\%([?!=]>\@!\)\="
syn match rubySymbol "\%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!"he=e-1
syn match rubySymbol "[]})\"':]\@<!\h\w*[!?]\=:\s\@="he=e-1
syn region rubySymbol start="[]})\"':]\@<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold
syn region rubySymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
syn match rubyBlockParameter "\h\w*" contained
syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter
syn match rubyInvalidVariable "$[^ A-Za-z_-]"
2005-09-16 21:47:57 +00:00
syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
2005-09-25 22:16:38 +00:00
syn match rubyPredefinedVariable "$_\>" display
syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display
syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display
syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
2005-09-16 21:47:57 +00:00
syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
"Obsolete Global Constants
"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
2004-06-13 20:20:40 +00:00
2005-09-16 21:47:57 +00:00
" Normal Regular Expression
2008-07-13 17:41:49 +00:00
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial keepend fold
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
" Generalized Regular Expression
2010-05-28 20:54:39 +02:00
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial fold
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial fold
syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial fold
2004-06-13 20:20:40 +00:00
" Normal String and Shell Command Output
2007-05-05 17:54:07 +00:00
syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
2010-05-28 20:54:39 +02:00
syn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold
2007-05-05 17:54:07 +00:00
syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial fold
2004-06-13 20:20:40 +00:00
2005-09-16 21:47:57 +00:00
" Generalized Single Quoted String, Symbol and Array of Strings
2010-05-28 20:54:39 +02:00
syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape
syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape
syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape
syn region rubyString matchgroup=rubyStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape
syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape
syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape
syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape
syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape
2005-09-16 21:47:57 +00:00
" Generalized Double Quoted String and Array of Strings and Shell Command Output
" Note: %= is not matched here as the beginning of a double quoted string
syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
2010-05-28 20:54:39 +02:00
syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
2005-09-16 21:47:57 +00:00
syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
2010-05-28 20:54:39 +02:00
syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
2004-06-13 20:20:40 +00:00
" Here Document
2010-05-28 20:54:39 +02:00
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\h\w*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
2008-07-13 17:41:49 +00:00
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
2005-09-16 21:47:57 +00:00
2010-05-28 20:54:39 +02:00
syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart fold keepend
syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
2005-09-16 21:47:57 +00:00
2007-05-10 16:56:30 +00:00
syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart fold keepend
syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
2005-09-16 21:47:57 +00:00
if exists('main_syntax') && main_syntax == 'eruby'
2005-10-10 20:59:28 +00:00
let b:ruby_no_expensive = 1
2005-09-16 21:47:57 +00:00
end
2004-06-13 20:20:40 +00:00
2010-05-28 20:54:39 +02:00
syn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
syn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
syn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
syn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator
syn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator
syn match rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
2007-05-05 17:54:07 +00:00
syn match rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
syn match rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|==\|=\~\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
2007-05-10 16:56:30 +00:00
2010-05-28 20:54:39 +02:00
syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
" Keywords
" Note: the following keywords have already been defined:
" begin case class def do end for if module unless until while
syn match rubyControl "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!"
syn match rubyOperator "\<defined?" display
syn match rubyKeyword "\<\%(super\|yield\)\>[?!]\@!"
syn match rubyBoolean "\<\%(true\|false\)\>[?!]\@!"
syn match rubyPseudoVariable "\<\%(nil\|self\|__FILE__\|__LINE__\)\>[?!]\@!"
syn match rubyBeginEnd "\<\%(BEGIN\|END\)\>[?!]\@!"
2008-07-13 17:41:49 +00:00
2007-05-10 16:56:30 +00:00
" Expensive Mode - match 'end' with the appropriate opening keyword for syntax
" based folding and special highlighting of module/class/method definitions
2005-10-10 20:59:28 +00:00
if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
2010-05-28 20:54:39 +02:00
syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl
syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl
syn match rubyDefine "\<undef\>" nextgroup=rubyFunction skipwhite skipnl
syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl
syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop fold
syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop fold
2004-06-13 20:20:40 +00:00
2005-09-16 21:47:57 +00:00
" modifiers
2010-05-28 20:54:39 +02:00
syn match rubyConditionalModifier "\<\%(if\|unless\)\>" display
syn match rubyRepeatModifier "\<\%(while\|until\)\>" display
2004-06-13 20:20:40 +00:00
2010-05-28 20:54:39 +02:00
syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
2007-05-10 16:56:30 +00:00
" curly bracket block or hash literal
2010-05-28 20:54:39 +02:00
syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyNotTop fold
2008-07-13 17:41:49 +00:00
syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
2004-06-13 20:20:40 +00:00
2007-05-10 16:56:30 +00:00
" statements without 'do'
2008-07-13 17:41:49 +00:00
syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
2004-06-13 20:20:40 +00:00
2010-05-28 20:54:39 +02:00
syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=rubyCaseExpression
2008-07-13 17:41:49 +00:00
syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
2004-06-13 20:20:40 +00:00
2010-05-28 20:54:39 +02:00
syn match rubyExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression
syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock
2007-05-10 16:56:30 +00:00
" statements with optional 'do'
2008-07-13 17:41:49 +00:00
syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
2004-06-13 20:20:40 +00:00
if !exists("ruby_minlines")
let ruby_minlines = 50
endif
exec "syn sync minlines=" . ruby_minlines
2005-09-16 21:47:57 +00:00
else
2010-05-28 20:54:39 +02:00
syn match rubyControl "\<def\>[?!]\@!" nextgroup=rubyMethodDeclaration skipwhite skipnl
syn match rubyControl "\<class\>[?!]\@!" nextgroup=rubyClassDeclaration skipwhite skipnl
syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl
syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!"
syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!"
2005-09-16 21:47:57 +00:00
endif
2004-06-13 20:20:40 +00:00
2005-09-16 21:47:57 +00:00
" Special Methods
if !exists("ruby_no_special_methods")
2008-07-13 17:41:49 +00:00
syn keyword rubyAccess public protected private module_function
" attr is a common variable name
syn match rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
syn keyword rubyAttribute attr_accessor attr_reader attr_writer
syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)"
2005-10-10 20:59:28 +00:00
syn keyword rubyEval eval class_eval instance_eval module_eval
2005-09-16 21:47:57 +00:00
syn keyword rubyException raise fail catch throw
2008-07-13 17:41:49 +00:00
" false positive with 'include?'
syn match rubyInclude "\<include\>[?!]\@!"
syn keyword rubyInclude autoload extend load require
2005-09-16 21:47:57 +00:00
syn keyword rubyKeyword callcc caller lambda proc
2004-06-13 20:20:40 +00:00
endif
2005-09-16 21:47:57 +00:00
" Comments and Documentation
2010-05-28 20:54:39 +02:00
syn match rubySharpBang "\%^#!.*" display
syn keyword rubyTodo FIXME NOTE TODO OPTIMIZE XXX contained
syn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
2007-05-05 17:54:07 +00:00
if !exists("ruby_no_comment_fold")
syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
2007-05-10 16:56:30 +00:00
syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell fold
2007-05-05 17:54:07 +00:00
else
syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
endif
2005-09-16 21:47:57 +00:00
" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
2010-05-28 20:54:39 +02:00
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
2005-09-16 21:47:57 +00:00
2010-05-28 20:54:39 +02:00
syn match rubyKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE
syn match rubyKeywordAsMethod "\<\%(if\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
2008-07-13 17:41:49 +00:00
2010-05-28 20:54:39 +02:00
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE
syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE
2004-06-13 20:20:40 +00:00
" __END__ Directive
2005-09-16 21:47:57 +00:00
syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
2004-06-13 20:20:40 +00:00
2007-05-10 16:56:30 +00:00
hi def link rubyClass rubyDefine
hi def link rubyModule rubyDefine
2010-05-28 20:54:39 +02:00
hi def link rubyMethodExceptional rubyDefine
2007-05-10 16:56:30 +00:00
hi def link rubyDefine Define
hi def link rubyFunction Function
hi def link rubyConditional Conditional
hi def link rubyConditionalModifier rubyConditional
2010-05-28 20:54:39 +02:00
hi def link rubyExceptional rubyConditional
2007-05-10 16:56:30 +00:00
hi def link rubyRepeat Repeat
hi def link rubyRepeatModifier rubyRepeat
hi def link rubyOptionalDo rubyRepeat
hi def link rubyControl Statement
hi def link rubyInclude Include
hi def link rubyInteger Number
hi def link rubyASCIICode Character
hi def link rubyFloat Float
hi def link rubyBoolean Boolean
hi def link rubyException Exception
if !exists("ruby_no_identifiers")
hi def link rubyIdentifier Identifier
else
hi def link rubyIdentifier NONE
2004-06-13 20:20:40 +00:00
endif
2007-05-10 16:56:30 +00:00
hi def link rubyClassVariable rubyIdentifier
hi def link rubyConstant Type
hi def link rubyGlobalVariable rubyIdentifier
hi def link rubyBlockParameter rubyIdentifier
hi def link rubyInstanceVariable rubyIdentifier
hi def link rubyPredefinedIdentifier rubyIdentifier
hi def link rubyPredefinedConstant rubyPredefinedIdentifier
hi def link rubyPredefinedVariable rubyPredefinedIdentifier
hi def link rubySymbol Constant
hi def link rubyKeyword Keyword
hi def link rubyOperator Operator
hi def link rubyPseudoOperator rubyOperator
hi def link rubyBeginEnd Statement
hi def link rubyAccess Statement
hi def link rubyAttribute Statement
hi def link rubyEval Statement
hi def link rubyPseudoVariable Constant
hi def link rubyComment Comment
hi def link rubyData Comment
hi def link rubyDataDirective Delimiter
hi def link rubyDocumentation Comment
2008-07-13 17:41:49 +00:00
hi def link rubyTodo Todo
2010-05-28 20:54:39 +02:00
hi def link rubyQuoteEscape rubyStringEscape
2008-07-13 17:41:49 +00:00
hi def link rubyStringEscape Special
2007-05-10 16:56:30 +00:00
hi def link rubyInterpolationDelimiter Delimiter
hi def link rubyNoInterpolation rubyString
hi def link rubySharpBang PreProc
hi def link rubyRegexpDelimiter rubyStringDelimiter
2008-07-13 17:41:49 +00:00
hi def link rubySymbolDelimiter rubyStringDelimiter
2007-05-10 16:56:30 +00:00
hi def link rubyStringDelimiter Delimiter
hi def link rubyString String
2008-07-13 17:41:49 +00:00
hi def link rubyRegexpEscape rubyRegexpSpecial
hi def link rubyRegexpQuantifier rubyRegexpSpecial
hi def link rubyRegexpAnchor rubyRegexpSpecial
hi def link rubyRegexpDot rubyRegexpCharClass
hi def link rubyRegexpCharClass rubyRegexpSpecial
hi def link rubyRegexpSpecial Special
hi def link rubyRegexpComment Comment
hi def link rubyRegexp rubyString
2007-05-10 16:56:30 +00:00
hi def link rubyInvalidVariable Error
hi def link rubyError Error
hi def link rubySpaceError rubyError
2004-06-13 20:20:40 +00:00
let b:current_syntax = "ruby"
2008-07-13 17:41:49 +00:00
" vim: nowrap sw=2 sts=2 ts=8 noet: