xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision a5792f58)
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$
5*a5792f58SBram Moolenaar" URL:		http://vim-ruby.rubyforge.org
66b730e11SBram Moolenaar" Anon CVS:	See above site
76b730e11SBram Moolenaar" ----------------------------------------------------------------------------
86b730e11SBram Moolenaar"
9071d4279SBram Moolenaar" Previous Maintainer:	Mirko Nasato
10071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
116b730e11SBram Moolenaar" ----------------------------------------------------------------------------
12071d4279SBram Moolenaar
13071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
14071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
15071d4279SBram Moolenaarif version < 600
16071d4279SBram Moolenaar  syntax clear
17071d4279SBram Moolenaarelseif exists("b:current_syntax")
18071d4279SBram Moolenaar  finish
19071d4279SBram Moolenaarendif
20071d4279SBram Moolenaar
216b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
226b730e11SBram Moolenaar  setlocal foldmethod=syntax
236b730e11SBram Moolenaarendif
246b730e11SBram Moolenaar
256b730e11SBram Moolenaarif exists("ruby_space_errors")
266b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
276b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
286b730e11SBram Moolenaar  endif
296b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
306b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
316b730e11SBram Moolenaar  endif
326b730e11SBram Moolenaarendif
336b730e11SBram Moolenaar
34071d4279SBram Moolenaar" Expression Substitution and Backslash Notation
356b730e11SBram Moolenaarsyn match rubyEscape		"\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"								contained display
366b730e11SBram Moolenaarsyn match rubyEscape		"\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)"	contained display
376b730e11SBram Moolenaarsyn match rubyInterpolation	"#{[^}]*}"				contained
386b730e11SBram Moolenaarsyn match rubyInterpolation	"#\%(\$\|@@\=\)\w\+"			contained display
396b730e11SBram Moolenaarsyn match rubyNoInterpolation	"\\#{[^}]*}"				contained
406b730e11SBram Moolenaarsyn match rubyNoInterpolation	"\\#\%(\$\|@@\=\)\w\+"			contained display
416b730e11SBram Moolenaar
426b730e11SBram Moolenaarsyn match rubyDelimEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
436b730e11SBram Moolenaar
446b730e11SBram Moolenaarsyn region rubyNestedParentheses	start="("	end=")"		skip="\\\\\|\\)"	transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape
456b730e11SBram Moolenaarsyn region rubyNestedCurlyBraces	start="{"	end="}"		skip="\\\\\|\\}"	transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape
466b730e11SBram Moolenaarsyn region rubyNestedAngleBrackets	start="<"	end=">"		skip="\\\\\|\\>"	transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape
476b730e11SBram Moolenaarsyn region rubyNestedSquareBrackets	start="\["	end="\]"	skip="\\\\\|\\\]"	transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape
486b730e11SBram Moolenaar
496b730e11SBram Moolenaarsyn cluster rubyStringSpecial		contains=rubyInterpolation,rubyNoInterpolation,rubyEscape
506b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial	contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
51071d4279SBram Moolenaar
52071d4279SBram Moolenaar" Numbers and ASCII Codes
536b730e11SBram Moolenaarsyn match rubyASCIICode	"\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
546b730e11SBram Moolenaarsyn match rubyInteger	"\<0[xX]\x\+\%(_\x\+\)*\>"								display
556b730e11SBram Moolenaarsyn match rubyInteger	"\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>"						display
566b730e11SBram Moolenaarsyn match rubyInteger	"\<0[oO]\=\o\+\%(_\o\+\)*\>"								display
576b730e11SBram Moolenaarsyn match rubyInteger	"\<0[bB][01]\+\%(_[01]\+\)*\>"								display
586b730e11SBram Moolenaarsyn match rubyFloat	"\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>"					display
596b730e11SBram Moolenaarsyn match rubyFloat	"\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>"	display
60071d4279SBram Moolenaar
616b730e11SBram Moolenaar" Identifiers
626b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
636b730e11SBram Moolenaarsyn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
64071d4279SBram Moolenaar
656b730e11SBram Moolenaarsyn match  rubyConstant			"\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!"
666b730e11SBram Moolenaarsyn match  rubyClassVariable		"@@\h\w*" display
676b730e11SBram Moolenaarsyn match  rubyInstanceVariable		"@\h\w*"  display
686b730e11SBram Moolenaarsyn match  rubyGlobalVariable		"$\%(\h\w*\|-.\)"
696b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
706b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
716b730e11SBram Moolenaarsyn match  rubySymbol			":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\="
726b730e11SBram Moolenaarsyn region rubySymbol			start=":\@<!:\"" end="\"" skip="\\\\\|\\\""
736b730e11SBram Moolenaarsyn match  rubyBlockParameter		"\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
74071d4279SBram Moolenaar
756b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
766b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"											   display
776b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
786b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
791e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
806b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
816b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
826b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
83071d4279SBram Moolenaar"Obsolete Global Constants
846b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
856b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
86071d4279SBram Moolenaar
87071d4279SBram Moolenaar" Normal Regular Expression
88d5cdbeb8SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
896b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
906b730e11SBram Moolenaar
916b730e11SBram Moolenaar" Normal String and Shell Command Output
926b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
936b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"
946b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial
956b730e11SBram Moolenaar
966b730e11SBram Moolenaar" Generalized Regular Expression
976b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
986b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r{"				end="}[iomx]*"	 skip="\\\\\|\\}"   contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
996b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r<"				end=">[iomx]*"	 skip="\\\\\|\\>"   contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
1006b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\["				end="\][iomx]*"	 skip="\\\\\|\\\]"  contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
1016b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r("				end=")[iomx]*"	 skip="\\\\\|\\)"   contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
1026b730e11SBram Moolenaar
1036b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings
1046b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
1056b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{"				    end="}"   skip="\\\\\|\\}"	 fold	contains=rubyNestedCurlyBraces,rubyDelimEscape
1066b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<"				    end=">"   skip="\\\\\|\\>"	 fold	contains=rubyNestedAngleBrackets,rubyDelimEscape
1076b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\["				    end="\]"  skip="\\\\\|\\\]"	 fold	contains=rubyNestedSquareBrackets,rubyDelimEscape
1086b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]("				    end=")"   skip="\\\\\|\\)"	 fold	contains=rubyNestedParentheses,rubyDelimEscape
1096b730e11SBram Moolenaar
1106b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output
1116b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string
1126b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	    end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1136b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
1146b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
1156b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
1166b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
1176b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
118071d4279SBram Moolenaar
119071d4279SBram Moolenaar" Here Document
1206b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+   end=+$+ oneline contains=TOP
1216b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ 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
124071d4279SBram Moolenaar
1256b730e11SBram 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
1266b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\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		      nextgroup=rubyFunction fold keepend
1286b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1296b730e11SBram Moolenaar
1306b730e11SBram 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
1316b730e11SBram 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
1326b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     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,@rubyStringSpecial nextgroup=rubyFunction fold keepend
1346b730e11SBram Moolenaar
1356b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
136d5cdbeb8SBram Moolenaar  let b:ruby_no_expensive = 1
1376b730e11SBram Moolenaarend
138071d4279SBram Moolenaar
139071d4279SBram Moolenaar" Expensive Mode - colorize *end* according to opening statement
140d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
141d5cdbeb8SBram Moolenaar  syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+"    end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline
142d5cdbeb8SBram Moolenaar  syn region rubyClass	  matchgroup=rubyDefine start="\<class\s\+"  end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline
1436b730e11SBram Moolenaar  syn match  rubyDefine   "\<class\ze<<"
144d5cdbeb8SBram Moolenaar  syn region rubyModule   matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@="	  oneline
145071d4279SBram Moolenaar
1466b730e11SBram Moolenaar  syn region rubyBlock start="\<def\>"	  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold
1476b730e11SBram Moolenaar  syn region rubyBlock start="\<class\>"  matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass	 fold
1486b730e11SBram Moolenaar  syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule	 fold
149071d4279SBram Moolenaar
1506b730e11SBram Moolenaar  " modifiers
1516b730e11SBram Moolenaar  syn match  rubyControl "\<\%(if\|unless\|while\|until\)\>" display
152071d4279SBram Moolenaar
153071d4279SBram Moolenaar  " *do* requiring *end*
1546b730e11SBram Moolenaar  syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
155071d4279SBram Moolenaar
156071d4279SBram Moolenaar  " *{* requiring *}*
1576b730e11SBram Moolenaar  syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
158071d4279SBram Moolenaar
159071d4279SBram Moolenaar  " statements without *do*
1606b730e11SBram Moolenaar  syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
161071d4279SBram Moolenaar
162071d4279SBram Moolenaar  " statement with optional *do*
1631e015460SBram Moolenaar  syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
1641e015460SBram Moolenaar  syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
165071d4279SBram Moolenaar
166071d4279SBram Moolenaar  if !exists("ruby_minlines")
167071d4279SBram Moolenaar    let ruby_minlines = 50
168071d4279SBram Moolenaar  endif
169071d4279SBram Moolenaar  exec "syn sync minlines=" . ruby_minlines
170071d4279SBram Moolenaar
1716b730e11SBram Moolenaarelse
1726b730e11SBram Moolenaar  syn region  rubyFunction matchgroup=rubyControl start="\<def\s\+"    end="\ze\%(\s\|(\|;\|$\)" oneline
1736b730e11SBram Moolenaar  syn region  rubyClass    matchgroup=rubyControl start="\<class\s\+"  end="\ze\%(\s\|<\|;\|$\)" oneline
1746b730e11SBram Moolenaar  syn match   rubyControl  "\<class\ze<<"
1756b730e11SBram Moolenaar  syn region  rubyModule   matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)"	 oneline
176071d4279SBram Moolenaar  syn keyword rubyControl case begin do for if unless while until end
1776b730e11SBram Moolenaarendif
178071d4279SBram Moolenaar
179071d4279SBram Moolenaar" Keywords
1806b730e11SBram Moolenaar" Note: the following keywords have already been defined:
1816b730e11SBram Moolenaar" begin case class def do end for if module unless until while
1826b730e11SBram Moolenaarsyn keyword rubyControl		and break else elsif ensure in next not or redo rescue retry return then when
1836b730e11SBram Moolenaarsyn match   rubyOperator	"\<defined?" display
1846b730e11SBram Moolenaarsyn keyword rubyKeyword		alias super undef yield
1856b730e11SBram Moolenaarsyn keyword rubyBoolean		true false
1866b730e11SBram Moolenaarsyn keyword rubyPseudoVariable	nil self __FILE__ __LINE__
187071d4279SBram Moolenaarsyn keyword rubyBeginEnd	BEGIN END
188071d4279SBram Moolenaar
1896b730e11SBram Moolenaar" Special Methods
1906b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
1916b730e11SBram Moolenaar  syn keyword rubyAccess    public protected private
1926b730e11SBram Moolenaar  syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
1931e015460SBram Moolenaar  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
1946b730e11SBram Moolenaar  syn keyword rubyEval	    eval class_eval instance_eval module_eval
1956b730e11SBram Moolenaar  syn keyword rubyException raise fail catch throw
1966b730e11SBram Moolenaar  syn keyword rubyInclude   autoload extend include load require
1976b730e11SBram Moolenaar  syn keyword rubyKeyword   callcc caller lambda proc
198071d4279SBram Moolenaarendif
199071d4279SBram Moolenaar
2006b730e11SBram Moolenaar" Comments and Documentation
2016b730e11SBram Moolenaarsyn match   rubySharpBang     "\%^#!.*" display
2026b730e11SBram Moolenaarsyn keyword rubyTodo	      FIXME NOTE TODO XXX contained
2036b730e11SBram Moolenaarsyn match   rubyComment       "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
2046b730e11SBram Moolenaarsyn region  rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold
2056b730e11SBram Moolenaar
2066b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
2076b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>"			transparent contains=NONE
2086b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>"			transparent contains=NONE
2096b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>"			transparent contains=NONE
2106b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>"	transparent contains=NONE
2116b730e11SBram Moolenaar
2126b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"	transparent contains=NONE
2136b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"		transparent contains=NONE
2146b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>"	transparent contains=NONE
2156b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"			transparent contains=NONE
2166b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>"			transparent contains=NONE
2176b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>"			transparent contains=NONE
218071d4279SBram Moolenaar
219071d4279SBram Moolenaar" __END__ Directive
2206b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
221071d4279SBram Moolenaar
222071d4279SBram Moolenaar" Define the default highlighting.
223071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
224071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
225071d4279SBram Moolenaarif version >= 508 || !exists("did_ruby_syntax_inits")
226071d4279SBram Moolenaar  if version < 508
227071d4279SBram Moolenaar    let did_ruby_syntax_inits = 1
228071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
229071d4279SBram Moolenaar  else
230071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
231071d4279SBram Moolenaar  endif
232071d4279SBram Moolenaar
233071d4279SBram Moolenaar  HiLink rubyDefine			Define
234071d4279SBram Moolenaar  HiLink rubyFunction			Function
235071d4279SBram Moolenaar  HiLink rubyControl			Statement
236071d4279SBram Moolenaar  HiLink rubyInclude			Include
2376b730e11SBram Moolenaar  HiLink rubyInteger			Number
2386b730e11SBram Moolenaar  HiLink rubyASCIICode			rubyInteger
2396b730e11SBram Moolenaar  HiLink rubyFloat			Float
2406b730e11SBram Moolenaar  HiLink rubyBoolean			rubyPseudoVariable
241071d4279SBram Moolenaar  HiLink rubyException			Exception
2426b730e11SBram Moolenaar  HiLink rubyClass			Type
2436b730e11SBram Moolenaar  HiLink rubyModule			Type
2446b730e11SBram Moolenaar  if !exists("ruby_no_identifiers")
245071d4279SBram Moolenaar    HiLink rubyIdentifier		Identifier
2466b730e11SBram Moolenaar  else
2476b730e11SBram Moolenaar    HiLink rubyIdentifier		NONE
2486b730e11SBram Moolenaar  endif
249071d4279SBram Moolenaar  HiLink rubyClassVariable		rubyIdentifier
250071d4279SBram Moolenaar  HiLink rubyConstant			rubyIdentifier
251071d4279SBram Moolenaar  HiLink rubyGlobalVariable		rubyIdentifier
2526b730e11SBram Moolenaar  HiLink rubyBlockParameter		rubyIdentifier
253071d4279SBram Moolenaar  HiLink rubyInstanceVariable		rubyIdentifier
254071d4279SBram Moolenaar  HiLink rubyPredefinedIdentifier	rubyIdentifier
255071d4279SBram Moolenaar  HiLink rubyPredefinedConstant		rubyPredefinedIdentifier
256071d4279SBram Moolenaar  HiLink rubyPredefinedVariable		rubyPredefinedIdentifier
257071d4279SBram Moolenaar  HiLink rubySymbol			rubyIdentifier
258071d4279SBram Moolenaar  HiLink rubyKeyword			Keyword
2596b730e11SBram Moolenaar  HiLink rubyOperator			Operator
260071d4279SBram Moolenaar  HiLink rubyBeginEnd			Statement
2616b730e11SBram Moolenaar  HiLink rubyAccess			Statement
2626b730e11SBram Moolenaar  HiLink rubyAttribute			Statement
2636b730e11SBram Moolenaar  HiLink rubyEval			Statement
2646b730e11SBram Moolenaar  HiLink rubyPseudoVariable		Constant
265071d4279SBram Moolenaar
266071d4279SBram Moolenaar  HiLink rubyComment			Comment
267071d4279SBram Moolenaar  HiLink rubyData			Comment
268071d4279SBram Moolenaar  HiLink rubyDataDirective		Delimiter
2696b730e11SBram Moolenaar  HiLink rubyDocumentation		Comment
2706b730e11SBram Moolenaar  HiLink rubyEscape			Special
2716b730e11SBram Moolenaar  HiLink rubyInterpolation		Special
2726b730e11SBram Moolenaar  HiLink rubyNoInterpolation		rubyString
2736b730e11SBram Moolenaar  HiLink rubySharpBang			PreProc
2746b730e11SBram Moolenaar  HiLink rubyStringDelimiter		Delimiter
2756b730e11SBram Moolenaar  HiLink rubyString			String
2766b730e11SBram Moolenaar  HiLink rubyTodo			Todo
2776b730e11SBram Moolenaar
2786b730e11SBram Moolenaar  HiLink rubyError			Error
2796b730e11SBram Moolenaar  HiLink rubySpaceError			rubyError
280071d4279SBram Moolenaar
281071d4279SBram Moolenaar  delcommand HiLink
282071d4279SBram Moolenaarendif
283071d4279SBram Moolenaar
284071d4279SBram Moolenaarlet b:current_syntax = "ruby"
285071d4279SBram Moolenaar
2866b730e11SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 ff=unix:
287