xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision c6249bb2)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:		Ruby
3*c6249bb2SBram Moolenaar" Maintainer:		Doug Kearns <[email protected]>
46b730e11SBram Moolenaar" Info:			$Id$
5a5792f58SBram Moolenaar" URL:			http://vim-ruby.rubyforge.org
66b730e11SBram Moolenaar" Anon CVS:		See above site
7*c6249bb2SBram Moolenaar" Release Coordinator:	Doug Kearns <[email protected]>
86b730e11SBram Moolenaar" ----------------------------------------------------------------------------
96b730e11SBram Moolenaar"
10071d4279SBram Moolenaar" Previous Maintainer:	Mirko Nasato
11071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
126b730e11SBram Moolenaar" ----------------------------------------------------------------------------
13071d4279SBram Moolenaar
14071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
15071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
16071d4279SBram Moolenaarif version < 600
17071d4279SBram Moolenaar  syntax clear
18071d4279SBram Moolenaarelseif exists("b:current_syntax")
19071d4279SBram Moolenaar  finish
20071d4279SBram Moolenaarendif
21071d4279SBram Moolenaar
226b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
236b730e11SBram Moolenaar  setlocal foldmethod=syntax
246b730e11SBram Moolenaarendif
256b730e11SBram Moolenaar
266b730e11SBram Moolenaarif exists("ruby_space_errors")
276b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
286b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
296b730e11SBram Moolenaar  endif
306b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
316b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
326b730e11SBram Moolenaar  endif
336b730e11SBram Moolenaarendif
346b730e11SBram Moolenaar
35071d4279SBram Moolenaar" Expression Substitution and Backslash Notation
366b730e11SBram Moolenaarsyn match rubyEscape		"\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"								contained display
376b730e11SBram Moolenaarsyn match rubyEscape		"\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)"	contained display
386b730e11SBram Moolenaarsyn match rubyInterpolation	"#{[^}]*}"				contained
396b730e11SBram Moolenaarsyn match rubyInterpolation	"#\%(\$\|@@\=\)\w\+"			contained display
406b730e11SBram Moolenaarsyn match rubyNoInterpolation	"\\#{[^}]*}"				contained
416b730e11SBram Moolenaarsyn match rubyNoInterpolation	"\\#\%(\$\|@@\=\)\w\+"			contained display
426b730e11SBram Moolenaar
436b730e11SBram Moolenaarsyn match rubyDelimEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
446b730e11SBram Moolenaar
456b730e11SBram Moolenaarsyn region rubyNestedParentheses	start="("	end=")"		skip="\\\\\|\\)"	transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape
466b730e11SBram Moolenaarsyn region rubyNestedCurlyBraces	start="{"	end="}"		skip="\\\\\|\\}"	transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape
476b730e11SBram Moolenaarsyn region rubyNestedAngleBrackets	start="<"	end=">"		skip="\\\\\|\\>"	transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape
486b730e11SBram Moolenaarsyn region rubyNestedSquareBrackets	start="\["	end="\]"	skip="\\\\\|\\\]"	transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape
496b730e11SBram Moolenaar
506b730e11SBram Moolenaarsyn cluster rubyStringSpecial		contains=rubyInterpolation,rubyNoInterpolation,rubyEscape
516b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial	contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
52071d4279SBram Moolenaar
53071d4279SBram Moolenaar" Numbers and ASCII Codes
546b730e11SBram Moolenaarsyn match rubyASCIICode	"\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
556b730e11SBram Moolenaarsyn match rubyInteger	"\<0[xX]\x\+\%(_\x\+\)*\>"								display
566b730e11SBram Moolenaarsyn match rubyInteger	"\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>"						display
576b730e11SBram Moolenaarsyn match rubyInteger	"\<0[oO]\=\o\+\%(_\o\+\)*\>"								display
586b730e11SBram Moolenaarsyn match rubyInteger	"\<0[bB][01]\+\%(_[01]\+\)*\>"								display
596b730e11SBram Moolenaarsyn match rubyFloat	"\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>"					display
606b730e11SBram Moolenaarsyn match rubyFloat	"\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>"	display
61071d4279SBram Moolenaar
626b730e11SBram Moolenaar" Identifiers
636b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
646b730e11SBram Moolenaarsyn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
65071d4279SBram Moolenaar
666b730e11SBram Moolenaarsyn match  rubyConstant			"\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!"
676b730e11SBram Moolenaarsyn match  rubyClassVariable		"@@\h\w*" display
686b730e11SBram Moolenaarsyn match  rubyInstanceVariable		"@\h\w*"  display
696b730e11SBram Moolenaarsyn match  rubyGlobalVariable		"$\%(\h\w*\|-.\)"
706b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
716b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
726b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\="
736b730e11SBram Moolenaarsyn region rubySymbol			start=":\@<!:\"" end="\"" skip="\\\\\|\\\""
746b730e11SBram Moolenaarsyn match  rubyBlockParameter		"\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
75071d4279SBram Moolenaar
766b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
776b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"											   display
786b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
796b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
801e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
816b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
826b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
836b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
84071d4279SBram Moolenaar"Obsolete Global Constants
856b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
866b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
87071d4279SBram Moolenaar
88071d4279SBram Moolenaar" Normal Regular Expression
89d5cdbeb8SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
906b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
916b730e11SBram Moolenaar
926b730e11SBram Moolenaar" Normal String and Shell Command Output
936b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
946b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"
956b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial
966b730e11SBram Moolenaar
976b730e11SBram Moolenaar" Generalized Regular Expression
986b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
996b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r{"				end="}[iomx]*"	 skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
1006b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r<"				end=">[iomx]*"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
1016b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\["				end="\][iomx]*"	 skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
1026b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r("				end=")[iomx]*"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
1036b730e11SBram Moolenaar
1046b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings
1056b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
1066b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{"				    end="}"   skip="\\\\\|\\}"	 fold	contains=rubyNestedCurlyBraces,rubyDelimEscape
1076b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<"				    end=">"   skip="\\\\\|\\>"	 fold	contains=rubyNestedAngleBrackets,rubyDelimEscape
1086b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\["				    end="\]"  skip="\\\\\|\\\]"	 fold	contains=rubyNestedSquareBrackets,rubyDelimEscape
1096b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]("				    end=")"   skip="\\\\\|\\)"	 fold	contains=rubyNestedParentheses,rubyDelimEscape
1106b730e11SBram Moolenaar
1116b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output
1126b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string
1136b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	    end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1146b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1156b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
1166b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
1176b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
1186b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
119071d4279SBram Moolenaar
120071d4279SBram Moolenaar" Here Document
1216b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+   end=+$+ oneline contains=TOP
1226b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=TOP
1236b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP
1246b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP
125071d4279SBram Moolenaar
1266b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<\z(\h\w*\)\ze+hs=s+2    matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1276b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1286b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart		      nextgroup=rubyFunction fold keepend
1296b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1306b730e11SBram Moolenaar
1316b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\z(\h\w*\)\ze+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1326b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1336b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     nextgroup=rubyFunction fold keepend
1346b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1356b730e11SBram Moolenaar
1366b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
137d5cdbeb8SBram Moolenaar  let b:ruby_no_expensive = 1
1386b730e11SBram Moolenaarend
139071d4279SBram Moolenaar
140071d4279SBram Moolenaar" Expensive Mode - colorize *end* according to opening statement
141d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
142d5cdbeb8SBram Moolenaar  syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+"    end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline
143d5cdbeb8SBram Moolenaar  syn region rubyClass	  matchgroup=rubyDefine start="\<class\s\+"  end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline
1446b730e11SBram Moolenaar  syn match  rubyDefine   "\<class\ze<<"
145d5cdbeb8SBram Moolenaar  syn region rubyModule   matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@="	  oneline
146071d4279SBram Moolenaar
1476b730e11SBram Moolenaar  syn region rubyBlock start="\<def\>"	  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold
1486b730e11SBram Moolenaar  syn region rubyBlock start="\<class\>"  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass	 fold
1496b730e11SBram Moolenaar  syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule	 fold
150071d4279SBram Moolenaar
1516b730e11SBram Moolenaar  " modifiers
1526b730e11SBram Moolenaar  syn match  rubyControl "\<\%(if\|unless\|while\|until\)\>" display
153071d4279SBram Moolenaar
154071d4279SBram Moolenaar  " *do* requiring *end*
1556b730e11SBram Moolenaar  syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
156071d4279SBram Moolenaar
157071d4279SBram Moolenaar  " *{* requiring *}*
1586b730e11SBram Moolenaar  syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
159071d4279SBram Moolenaar
160071d4279SBram Moolenaar  " statements without *do*
1616b730e11SBram Moolenaar  syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
162071d4279SBram Moolenaar
163071d4279SBram Moolenaar  " statement with optional *do*
1641e015460SBram Moolenaar  syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
1651e015460SBram Moolenaar  syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
166071d4279SBram Moolenaar
167071d4279SBram Moolenaar  if !exists("ruby_minlines")
168071d4279SBram Moolenaar    let ruby_minlines = 50
169071d4279SBram Moolenaar  endif
170071d4279SBram Moolenaar  exec "syn sync minlines=" . ruby_minlines
171071d4279SBram Moolenaar
1726b730e11SBram Moolenaarelse
1736b730e11SBram Moolenaar  syn region  rubyFunction matchgroup=rubyControl start="\<def\s\+"    end="\ze\%(\s\|(\|;\|$\)" oneline
1746b730e11SBram Moolenaar  syn region  rubyClass    matchgroup=rubyControl start="\<class\s\+"  end="\ze\%(\s\|<\|;\|$\)" oneline
1756b730e11SBram Moolenaar  syn match   rubyControl  "\<class\ze<<"
1766b730e11SBram Moolenaar  syn region  rubyModule   matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)"	 oneline
177071d4279SBram Moolenaar  syn keyword rubyControl case begin do for if unless while until end
1786b730e11SBram Moolenaarendif
179071d4279SBram Moolenaar
180071d4279SBram Moolenaar" Keywords
1816b730e11SBram Moolenaar" Note: the following keywords have already been defined:
1826b730e11SBram Moolenaar" begin case class def do end for if module unless until while
1836b730e11SBram Moolenaarsyn keyword rubyControl		and break else elsif ensure in next not or redo rescue retry return then when
1846b730e11SBram Moolenaarsyn match   rubyOperator	"\<defined?" display
1856b730e11SBram Moolenaarsyn keyword rubyKeyword		alias super undef yield
1866b730e11SBram Moolenaarsyn keyword rubyBoolean		true false
1876b730e11SBram Moolenaarsyn keyword rubyPseudoVariable	nil self __FILE__ __LINE__
188071d4279SBram Moolenaarsyn keyword rubyBeginEnd	BEGIN END
189071d4279SBram Moolenaar
1906b730e11SBram Moolenaar" Special Methods
1916b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
1926b730e11SBram Moolenaar  syn keyword rubyAccess    public protected private
1936b730e11SBram Moolenaar  syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
1941e015460SBram Moolenaar  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
1956b730e11SBram Moolenaar  syn keyword rubyEval	    eval class_eval instance_eval module_eval
1966b730e11SBram Moolenaar  syn keyword rubyException raise fail catch throw
1976b730e11SBram Moolenaar  syn keyword rubyInclude   autoload extend include load require
1986b730e11SBram Moolenaar  syn keyword rubyKeyword   callcc caller lambda proc
199071d4279SBram Moolenaarendif
200071d4279SBram Moolenaar
2016b730e11SBram Moolenaar" Comments and Documentation
2026b730e11SBram Moolenaarsyn match   rubySharpBang     "\%^#!.*" display
2036b730e11SBram Moolenaarsyn keyword rubyTodo	      FIXME NOTE TODO XXX contained
2046b730e11SBram Moolenaarsyn match   rubyComment       "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
2056b730e11SBram Moolenaarsyn region  rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold
2066b730e11SBram Moolenaar
2076b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
2086b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>"			transparent contains=NONE
2096b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>"			transparent contains=NONE
2106b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>"			transparent contains=NONE
2116b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>"	transparent contains=NONE
2126b730e11SBram Moolenaar
2136b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"	transparent contains=NONE
2146b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"		transparent contains=NONE
2156b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>"	transparent contains=NONE
2166b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"			transparent contains=NONE
2176b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>"			transparent contains=NONE
2186b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>"			transparent contains=NONE
219071d4279SBram Moolenaar
220071d4279SBram Moolenaar" __END__ Directive
2216b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
222071d4279SBram Moolenaar
223071d4279SBram Moolenaar" Define the default highlighting.
224071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
225071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
226071d4279SBram Moolenaarif version >= 508 || !exists("did_ruby_syntax_inits")
227071d4279SBram Moolenaar  if version < 508
228071d4279SBram Moolenaar    let did_ruby_syntax_inits = 1
229071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
230071d4279SBram Moolenaar  else
231071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
232071d4279SBram Moolenaar  endif
233071d4279SBram Moolenaar
234071d4279SBram Moolenaar  HiLink rubyDefine			Define
235071d4279SBram Moolenaar  HiLink rubyFunction			Function
236071d4279SBram Moolenaar  HiLink rubyControl			Statement
237071d4279SBram Moolenaar  HiLink rubyInclude			Include
2386b730e11SBram Moolenaar  HiLink rubyInteger			Number
2396b730e11SBram Moolenaar  HiLink rubyASCIICode			rubyInteger
2406b730e11SBram Moolenaar  HiLink rubyFloat			Float
2416b730e11SBram Moolenaar  HiLink rubyBoolean			rubyPseudoVariable
242071d4279SBram Moolenaar  HiLink rubyException			Exception
2436b730e11SBram Moolenaar  HiLink rubyClass			Type
2446b730e11SBram Moolenaar  HiLink rubyModule			Type
2456b730e11SBram Moolenaar  if !exists("ruby_no_identifiers")
246071d4279SBram Moolenaar    HiLink rubyIdentifier		Identifier
2476b730e11SBram Moolenaar  else
2486b730e11SBram Moolenaar    HiLink rubyIdentifier		NONE
2496b730e11SBram Moolenaar  endif
250071d4279SBram Moolenaar  HiLink rubyClassVariable		rubyIdentifier
251071d4279SBram Moolenaar  HiLink rubyConstant			rubyIdentifier
252071d4279SBram Moolenaar  HiLink rubyGlobalVariable		rubyIdentifier
2536b730e11SBram Moolenaar  HiLink rubyBlockParameter		rubyIdentifier
254071d4279SBram Moolenaar  HiLink rubyInstanceVariable		rubyIdentifier
255071d4279SBram Moolenaar  HiLink rubyPredefinedIdentifier	rubyIdentifier
256071d4279SBram Moolenaar  HiLink rubyPredefinedConstant		rubyPredefinedIdentifier
257071d4279SBram Moolenaar  HiLink rubyPredefinedVariable		rubyPredefinedIdentifier
258071d4279SBram Moolenaar  HiLink rubySymbol			rubyIdentifier
259071d4279SBram Moolenaar  HiLink rubyKeyword			Keyword
2606b730e11SBram Moolenaar  HiLink rubyOperator			Operator
261071d4279SBram Moolenaar  HiLink rubyBeginEnd			Statement
2626b730e11SBram Moolenaar  HiLink rubyAccess			Statement
2636b730e11SBram Moolenaar  HiLink rubyAttribute			Statement
2646b730e11SBram Moolenaar  HiLink rubyEval			Statement
2656b730e11SBram Moolenaar  HiLink rubyPseudoVariable		Constant
266071d4279SBram Moolenaar
267071d4279SBram Moolenaar  HiLink rubyComment			Comment
268071d4279SBram Moolenaar  HiLink rubyData			Comment
269071d4279SBram Moolenaar  HiLink rubyDataDirective		Delimiter
2706b730e11SBram Moolenaar  HiLink rubyDocumentation		Comment
2716b730e11SBram Moolenaar  HiLink rubyEscape			Special
2726b730e11SBram Moolenaar  HiLink rubyInterpolation		Special
2736b730e11SBram Moolenaar  HiLink rubyNoInterpolation		rubyString
2746b730e11SBram Moolenaar  HiLink rubySharpBang			PreProc
2756b730e11SBram Moolenaar  HiLink rubyStringDelimiter		Delimiter
2766b730e11SBram Moolenaar  HiLink rubyString			String
2776b730e11SBram Moolenaar  HiLink rubyTodo			Todo
2786b730e11SBram Moolenaar
2796b730e11SBram Moolenaar  HiLink rubyError			Error
2806b730e11SBram Moolenaar  HiLink rubySpaceError			rubyError
281071d4279SBram Moolenaar
282071d4279SBram Moolenaar  delcommand HiLink
283071d4279SBram Moolenaarendif
284071d4279SBram Moolenaar
285071d4279SBram Moolenaarlet b:current_syntax = "ruby"
286071d4279SBram Moolenaar
2876b730e11SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
288