xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision d5cdbeb8)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	Ruby
36b730e11SBram Moolenaar" Maintainer:	Doug Kearns <djkea2 at gus.gscit.monash.edu.au>
46b730e11SBram Moolenaar" Info:		$Id$
56b730e11SBram Moolenaar" URL:		http://vim-ruby.sourceforge.net
66b730e11SBram Moolenaar" Anon CVS:	See above site
76b730e11SBram Moolenaar" Licence:	GPL (http://www.gnu.org)
86b730e11SBram Moolenaar" Disclaimer:
96b730e11SBram Moolenaar"    This program is distributed in the hope that it will be useful,
106b730e11SBram Moolenaar"    but WITHOUT ANY WARRANTY; without even the implied warranty of
116b730e11SBram Moolenaar"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
126b730e11SBram Moolenaar"    GNU General Public License for more details.
136b730e11SBram Moolenaar" ----------------------------------------------------------------------------
146b730e11SBram Moolenaar"
15071d4279SBram Moolenaar" Previous Maintainer:	Mirko Nasato
16071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
176b730e11SBram Moolenaar" ----------------------------------------------------------------------------
18071d4279SBram Moolenaar
19071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
20071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
21071d4279SBram Moolenaarif version < 600
22071d4279SBram Moolenaar  syntax clear
23071d4279SBram Moolenaarelseif exists("b:current_syntax")
24071d4279SBram Moolenaar  finish
25071d4279SBram Moolenaarendif
26071d4279SBram Moolenaar
276b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
286b730e11SBram Moolenaar  setlocal foldmethod=syntax
296b730e11SBram Moolenaarendif
306b730e11SBram Moolenaar
316b730e11SBram Moolenaarif exists("ruby_space_errors")
326b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
336b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
346b730e11SBram Moolenaar  endif
356b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
366b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
376b730e11SBram Moolenaar  endif
386b730e11SBram Moolenaarendif
396b730e11SBram Moolenaar
40071d4279SBram Moolenaar" Expression Substitution and Backslash Notation
416b730e11SBram Moolenaarsyn match rubyEscape		"\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"								contained display
426b730e11SBram Moolenaarsyn match rubyEscape		"\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)"	contained display
436b730e11SBram Moolenaarsyn match rubyInterpolation	"#{[^}]*}"				contained
446b730e11SBram Moolenaarsyn match rubyInterpolation	"#\%(\$\|@@\=\)\w\+"			contained display
456b730e11SBram Moolenaarsyn match rubyNoInterpolation	"\\#{[^}]*}"				contained
466b730e11SBram Moolenaarsyn match rubyNoInterpolation	"\\#\%(\$\|@@\=\)\w\+"			contained display
476b730e11SBram Moolenaar
486b730e11SBram Moolenaarsyn match rubyDelimEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
496b730e11SBram Moolenaar
506b730e11SBram Moolenaarsyn region rubyNestedParentheses	start="("	end=")"		skip="\\\\\|\\)"	transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape
516b730e11SBram Moolenaarsyn region rubyNestedCurlyBraces	start="{"	end="}"		skip="\\\\\|\\}"	transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape
526b730e11SBram Moolenaarsyn region rubyNestedAngleBrackets	start="<"	end=">"		skip="\\\\\|\\>"	transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape
536b730e11SBram Moolenaarsyn region rubyNestedSquareBrackets	start="\["	end="\]"	skip="\\\\\|\\\]"	transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape
546b730e11SBram Moolenaar
556b730e11SBram Moolenaarsyn cluster rubyStringSpecial		contains=rubyInterpolation,rubyNoInterpolation,rubyEscape
566b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial	contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
57071d4279SBram Moolenaar
58071d4279SBram Moolenaar" Numbers and ASCII Codes
596b730e11SBram Moolenaarsyn match rubyASCIICode	"\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
606b730e11SBram Moolenaarsyn match rubyInteger	"\<0[xX]\x\+\%(_\x\+\)*\>"								display
616b730e11SBram Moolenaarsyn match rubyInteger	"\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>"						display
626b730e11SBram Moolenaarsyn match rubyInteger	"\<0[oO]\=\o\+\%(_\o\+\)*\>"								display
636b730e11SBram Moolenaarsyn match rubyInteger	"\<0[bB][01]\+\%(_[01]\+\)*\>"								display
646b730e11SBram Moolenaarsyn match rubyFloat	"\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>"					display
656b730e11SBram Moolenaarsyn match rubyFloat	"\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>"	display
66071d4279SBram Moolenaar
676b730e11SBram Moolenaar" Identifiers
686b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
696b730e11SBram Moolenaarsyn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
70071d4279SBram Moolenaar
716b730e11SBram Moolenaarsyn match  rubyConstant			"\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!"
726b730e11SBram Moolenaarsyn match  rubyClassVariable		"@@\h\w*" display
736b730e11SBram Moolenaarsyn match  rubyInstanceVariable		"@\h\w*"  display
746b730e11SBram Moolenaarsyn match  rubyGlobalVariable		"$\%(\h\w*\|-.\)"
756b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
766b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
776b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\="
786b730e11SBram Moolenaarsyn region rubySymbol			start=":\@<!:\"" end="\"" skip="\\\\\|\\\""
796b730e11SBram Moolenaarsyn match  rubyBlockParameter		"\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
80071d4279SBram Moolenaar
816b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
826b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"											   display
836b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
846b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
851e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
866b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
876b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
886b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
89071d4279SBram Moolenaar"Obsolete Global Constants
906b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
916b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
92071d4279SBram Moolenaar
93071d4279SBram Moolenaar" Normal Regular Expression
94*d5cdbeb8SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
956b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
966b730e11SBram Moolenaar
976b730e11SBram Moolenaar" Normal String and Shell Command Output
986b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
996b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"
1006b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial
1016b730e11SBram Moolenaar
1026b730e11SBram Moolenaar" Generalized Regular Expression
1036b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1046b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r{"				end="}[iomx]*"	 skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
1056b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r<"				end=">[iomx]*"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
1066b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\["				end="\][iomx]*"	 skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
1076b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r("				end=")[iomx]*"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
1086b730e11SBram Moolenaar
1096b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings
1106b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
1116b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{"				    end="}"   skip="\\\\\|\\}"	 fold	contains=rubyNestedCurlyBraces,rubyDelimEscape
1126b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<"				    end=">"   skip="\\\\\|\\>"	 fold	contains=rubyNestedAngleBrackets,rubyDelimEscape
1136b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\["				    end="\]"  skip="\\\\\|\\\]"	 fold	contains=rubyNestedSquareBrackets,rubyDelimEscape
1146b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]("				    end=")"   skip="\\\\\|\\)"	 fold	contains=rubyNestedParentheses,rubyDelimEscape
1156b730e11SBram Moolenaar
1166b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output
1176b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string
1186b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	    end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1196b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1206b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
1216b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
1226b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
1236b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
124071d4279SBram Moolenaar
125071d4279SBram Moolenaar" Here Document
1266b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+   end=+$+ oneline contains=TOP
1276b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=TOP
1286b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP
1296b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP
130071d4279SBram Moolenaar
1316b730e11SBram 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
1326b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1336b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart		      nextgroup=rubyFunction fold keepend
1346b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1356b730e11SBram Moolenaar
1366b730e11SBram 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
1376b730e11SBram 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
1386b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     nextgroup=rubyFunction fold keepend
1396b730e11SBram 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
1406b730e11SBram Moolenaar
1416b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
142*d5cdbeb8SBram Moolenaar  let b:ruby_no_expensive = 1
1436b730e11SBram Moolenaarend
144071d4279SBram Moolenaar
145071d4279SBram Moolenaar" Expensive Mode - colorize *end* according to opening statement
146*d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
147*d5cdbeb8SBram Moolenaar  syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+"    end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline
148*d5cdbeb8SBram Moolenaar  syn region rubyClass	  matchgroup=rubyDefine start="\<class\s\+"  end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline
1496b730e11SBram Moolenaar  syn match  rubyDefine   "\<class\ze<<"
150*d5cdbeb8SBram Moolenaar  syn region rubyModule   matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@="	  oneline
151071d4279SBram Moolenaar
1526b730e11SBram Moolenaar  syn region rubyBlock start="\<def\>"	  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold
1536b730e11SBram Moolenaar  syn region rubyBlock start="\<class\>"  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass	 fold
1546b730e11SBram Moolenaar  syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule	 fold
155071d4279SBram Moolenaar
1566b730e11SBram Moolenaar  " modifiers
1576b730e11SBram Moolenaar  syn match  rubyControl "\<\%(if\|unless\|while\|until\)\>" display
158071d4279SBram Moolenaar
159071d4279SBram Moolenaar  " *do* requiring *end*
1606b730e11SBram Moolenaar  syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
161071d4279SBram Moolenaar
162071d4279SBram Moolenaar  " *{* requiring *}*
1636b730e11SBram Moolenaar  syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
164071d4279SBram Moolenaar
165071d4279SBram Moolenaar  " statements without *do*
1666b730e11SBram Moolenaar  syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
167071d4279SBram Moolenaar
168071d4279SBram Moolenaar  " statement with optional *do*
1691e015460SBram Moolenaar  syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
1701e015460SBram Moolenaar  syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
171071d4279SBram Moolenaar
172071d4279SBram Moolenaar  if !exists("ruby_minlines")
173071d4279SBram Moolenaar    let ruby_minlines = 50
174071d4279SBram Moolenaar  endif
175071d4279SBram Moolenaar  exec "syn sync minlines=" . ruby_minlines
176071d4279SBram Moolenaar
1776b730e11SBram Moolenaarelse
1786b730e11SBram Moolenaar  syn region  rubyFunction matchgroup=rubyControl start="\<def\s\+"    end="\ze\%(\s\|(\|;\|$\)" oneline
1796b730e11SBram Moolenaar  syn region  rubyClass    matchgroup=rubyControl start="\<class\s\+"  end="\ze\%(\s\|<\|;\|$\)" oneline
1806b730e11SBram Moolenaar  syn match   rubyControl  "\<class\ze<<"
1816b730e11SBram Moolenaar  syn region  rubyModule   matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)"	 oneline
182071d4279SBram Moolenaar  syn keyword rubyControl case begin do for if unless while until end
1836b730e11SBram Moolenaarendif
184071d4279SBram Moolenaar
185071d4279SBram Moolenaar" Keywords
1866b730e11SBram Moolenaar" Note: the following keywords have already been defined:
1876b730e11SBram Moolenaar" begin case class def do end for if module unless until while
1886b730e11SBram Moolenaarsyn keyword rubyControl		and break else elsif ensure in next not or redo rescue retry return then when
1896b730e11SBram Moolenaarsyn match   rubyOperator	"\<defined?" display
1906b730e11SBram Moolenaarsyn keyword rubyKeyword		alias super undef yield
1916b730e11SBram Moolenaarsyn keyword rubyBoolean		true false
1926b730e11SBram Moolenaarsyn keyword rubyPseudoVariable	nil self __FILE__ __LINE__
193071d4279SBram Moolenaarsyn keyword rubyBeginEnd	BEGIN END
194071d4279SBram Moolenaar
1956b730e11SBram Moolenaar" Special Methods
1966b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
1976b730e11SBram Moolenaar  syn keyword rubyAccess    public protected private
1986b730e11SBram Moolenaar  syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
1991e015460SBram Moolenaar  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
2006b730e11SBram Moolenaar  syn keyword rubyEval	    eval class_eval instance_eval module_eval
2016b730e11SBram Moolenaar  syn keyword rubyException raise fail catch throw
2026b730e11SBram Moolenaar  syn keyword rubyInclude   autoload extend include load require
2036b730e11SBram Moolenaar  syn keyword rubyKeyword   callcc caller lambda proc
204071d4279SBram Moolenaarendif
205071d4279SBram Moolenaar
2066b730e11SBram Moolenaar" Comments and Documentation
2076b730e11SBram Moolenaarsyn match   rubySharpBang     "\%^#!.*" display
2086b730e11SBram Moolenaarsyn keyword rubyTodo	      FIXME NOTE TODO XXX contained
2096b730e11SBram Moolenaarsyn match   rubyComment       "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
2106b730e11SBram Moolenaarsyn region  rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold
2116b730e11SBram Moolenaar
2126b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
2136b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>"			transparent contains=NONE
2146b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>"			transparent contains=NONE
2156b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>"			transparent contains=NONE
2166b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>"	transparent contains=NONE
2176b730e11SBram Moolenaar
2186b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"	transparent contains=NONE
2196b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"		transparent contains=NONE
2206b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>"	transparent contains=NONE
2216b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"			transparent contains=NONE
2226b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>"			transparent contains=NONE
2236b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>"			transparent contains=NONE
224071d4279SBram Moolenaar
225071d4279SBram Moolenaar" __END__ Directive
2266b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
227071d4279SBram Moolenaar
228071d4279SBram Moolenaar" Define the default highlighting.
229071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
230071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
231071d4279SBram Moolenaarif version >= 508 || !exists("did_ruby_syntax_inits")
232071d4279SBram Moolenaar  if version < 508
233071d4279SBram Moolenaar    let did_ruby_syntax_inits = 1
234071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
235071d4279SBram Moolenaar  else
236071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
237071d4279SBram Moolenaar  endif
238071d4279SBram Moolenaar
239071d4279SBram Moolenaar  HiLink rubyDefine			Define
240071d4279SBram Moolenaar  HiLink rubyFunction			Function
241071d4279SBram Moolenaar  HiLink rubyControl			Statement
242071d4279SBram Moolenaar  HiLink rubyInclude			Include
2436b730e11SBram Moolenaar  HiLink rubyInteger			Number
2446b730e11SBram Moolenaar  HiLink rubyASCIICode			rubyInteger
2456b730e11SBram Moolenaar  HiLink rubyFloat			Float
2466b730e11SBram Moolenaar  HiLink rubyBoolean			rubyPseudoVariable
247071d4279SBram Moolenaar  HiLink rubyException			Exception
2486b730e11SBram Moolenaar  HiLink rubyClass			Type
2496b730e11SBram Moolenaar  HiLink rubyModule			Type
2506b730e11SBram Moolenaar  if !exists("ruby_no_identifiers")
251071d4279SBram Moolenaar    HiLink rubyIdentifier		Identifier
2526b730e11SBram Moolenaar  else
2536b730e11SBram Moolenaar    HiLink rubyIdentifier		NONE
2546b730e11SBram Moolenaar  endif
255071d4279SBram Moolenaar  HiLink rubyClassVariable		rubyIdentifier
256071d4279SBram Moolenaar  HiLink rubyConstant			rubyIdentifier
257071d4279SBram Moolenaar  HiLink rubyGlobalVariable		rubyIdentifier
2586b730e11SBram Moolenaar  HiLink rubyBlockParameter		rubyIdentifier
259071d4279SBram Moolenaar  HiLink rubyInstanceVariable		rubyIdentifier
260071d4279SBram Moolenaar  HiLink rubyPredefinedIdentifier	rubyIdentifier
261071d4279SBram Moolenaar  HiLink rubyPredefinedConstant		rubyPredefinedIdentifier
262071d4279SBram Moolenaar  HiLink rubyPredefinedVariable		rubyPredefinedIdentifier
263071d4279SBram Moolenaar  HiLink rubySymbol			rubyIdentifier
264071d4279SBram Moolenaar  HiLink rubyKeyword			Keyword
2656b730e11SBram Moolenaar  HiLink rubyOperator			Operator
266071d4279SBram Moolenaar  HiLink rubyBeginEnd			Statement
2676b730e11SBram Moolenaar  HiLink rubyAccess			Statement
2686b730e11SBram Moolenaar  HiLink rubyAttribute			Statement
2696b730e11SBram Moolenaar  HiLink rubyEval			Statement
2706b730e11SBram Moolenaar  HiLink rubyPseudoVariable		Constant
271071d4279SBram Moolenaar
272071d4279SBram Moolenaar  HiLink rubyComment			Comment
273071d4279SBram Moolenaar  HiLink rubyData			Comment
274071d4279SBram Moolenaar  HiLink rubyDataDirective		Delimiter
2756b730e11SBram Moolenaar  HiLink rubyDocumentation		Comment
2766b730e11SBram Moolenaar  HiLink rubyEscape			Special
2776b730e11SBram Moolenaar  HiLink rubyInterpolation		Special
2786b730e11SBram Moolenaar  HiLink rubyNoInterpolation		rubyString
2796b730e11SBram Moolenaar  HiLink rubySharpBang			PreProc
2806b730e11SBram Moolenaar  HiLink rubyStringDelimiter		Delimiter
2816b730e11SBram Moolenaar  HiLink rubyString			String
2826b730e11SBram Moolenaar  HiLink rubyTodo			Todo
2836b730e11SBram Moolenaar
2846b730e11SBram Moolenaar  HiLink rubyError			Error
2856b730e11SBram Moolenaar  HiLink rubySpaceError			rubyError
286071d4279SBram Moolenaar
287071d4279SBram Moolenaar  delcommand HiLink
288071d4279SBram Moolenaarendif
289071d4279SBram Moolenaar
290071d4279SBram Moolenaarlet b:current_syntax = "ruby"
291071d4279SBram Moolenaar
2926b730e11SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
293