xref: /vim-8.2.3635/runtime/syntax/ruby.vim (revision ec7944aa)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:		Ruby
3c6249bb2SBram Moolenaar" Maintainer:		Doug Kearns <[email protected]>
4*ec7944aaSBram Moolenaar" URL:			https://github.com/vim-ruby/vim-ruby
5c6249bb2SBram Moolenaar" Release Coordinator:	Doug Kearns <[email protected]>
66b730e11SBram Moolenaar" ----------------------------------------------------------------------------
76b730e11SBram Moolenaar"
8071d4279SBram Moolenaar" Previous Maintainer:	Mirko Nasato
9071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
106b730e11SBram Moolenaar" ----------------------------------------------------------------------------
11071d4279SBram Moolenaar
12c1762ccbSBram Moolenaarif exists("b:current_syntax")
13071d4279SBram Moolenaar  finish
14071d4279SBram Moolenaarendif
15071d4279SBram Moolenaar
166b730e11SBram Moolenaarif has("folding") && exists("ruby_fold")
176b730e11SBram Moolenaar  setlocal foldmethod=syntax
186b730e11SBram Moolenaarendif
196b730e11SBram Moolenaar
201d68952aSBram Moolenaarsyn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo
21c236c16dSBram Moolenaar
226b730e11SBram Moolenaarif exists("ruby_space_errors")
236b730e11SBram Moolenaar  if !exists("ruby_no_trail_space_error")
246b730e11SBram Moolenaar    syn match rubySpaceError display excludenl "\s\+$"
256b730e11SBram Moolenaar  endif
266b730e11SBram Moolenaar  if !exists("ruby_no_tab_space_error")
276b730e11SBram Moolenaar    syn match rubySpaceError display " \+\t"me=e-1
286b730e11SBram Moolenaar  endif
296b730e11SBram Moolenaarendif
306b730e11SBram Moolenaar
319964e468SBram Moolenaar" Operators
329964e468SBram Moolenaarif exists("ruby_operators")
33*ec7944aaSBram Moolenaar  syn match  rubyOperator "[~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::"
34*ec7944aaSBram Moolenaar  syn match  rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
35c236c16dSBram Moolenaar  syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
369964e468SBram Moolenaarendif
379964e468SBram Moolenaar
38071d4279SBram Moolenaar" Expression Substitution and Backslash Notation
39c236c16dSBram Moolenaarsyn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}"						    contained display
40c236c16dSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
411d68952aSBram Moolenaarsyn match rubyQuoteEscape  "\\[\\']"											    contained display
429964e468SBram Moolenaar
43c236c16dSBram Moolenaarsyn region rubyInterpolation	      matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
449964e468SBram Moolenaarsyn match  rubyInterpolation	      "#\%(\$\|@@\=\)\w\+"    display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable
459964e468SBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
46c1762ccbSBram Moolenaarsyn match  rubyInterpolation	      "#\$\%(-\w\|\W\)"       display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable
47c1762ccbSBram Moolenaarsyn match  rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)"    display contained
489964e468SBram Moolenaarsyn region rubyNoInterpolation	      start="\\#{" end="}"            contained
499964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#{"		      display contained
509964e468SBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\%(\$\|@@\=\)\w\+"  display contained
51c1762ccbSBram Moolenaarsyn match  rubyNoInterpolation	      "\\#\$\W"		      display contained
526b730e11SBram Moolenaar
536b730e11SBram Moolenaarsyn match rubyDelimEscape	"\\[(<{\[)>}\]]" transparent display contained contains=NONE
546b730e11SBram Moolenaar
55c236c16dSBram Moolenaarsyn region rubyNestedParentheses    start="("  skip="\\\\\|\\)"  matchgroup=rubyString end=")"	transparent contained
56c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces    start="{"  skip="\\\\\|\\}"  matchgroup=rubyString end="}"	transparent contained
57c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets  start="<"  skip="\\\\\|\\>"  matchgroup=rubyString end=">"	transparent contained
58c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]"	transparent contained
596b730e11SBram Moolenaar
60c236c16dSBram Moolenaar" These are mostly Oniguruma ready
61c236c16dSBram Moolenaarsyn region rubyRegexpComment	matchgroup=rubyRegexpSpecial   start="(?#"								  skip="\\)"  end=")"  contained
62c236c16dSBram Moolenaarsyn region rubyRegexpParens	matchgroup=rubyRegexpSpecial   start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)"  end=")"  contained transparent contains=@rubyRegexpSpecial
63c236c16dSBram Moolenaarsyn region rubyRegexpBrackets	matchgroup=rubyRegexpCharClass start="\[\^\="								  skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline
64c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\\[DdHhSsWw]"	       contained display
65c236c16dSBram Moolenaarsyn match  rubyRegexpCharClass	"\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained
661d68952aSBram Moolenaarsyn match  rubyRegexpEscape	"\\[].*?+^$|\\/(){}[]" contained
67c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"[*?+][?+]\="	       contained display
68c236c16dSBram Moolenaarsyn match  rubyRegexpQuantifier	"{\d\+\%(,\d*\)\=}?\=" contained display
69c236c16dSBram Moolenaarsyn match  rubyRegexpAnchor	"[$^]\|\\[ABbGZz]"     contained display
70c236c16dSBram Moolenaarsyn match  rubyRegexpDot	"\."		       contained display
71c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"|"		       contained display
72c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\[1-9]\d\=\d\@!"     contained display
73c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
74c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
75c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display
76c236c16dSBram Moolenaarsyn match  rubyRegexpSpecial	"\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display
77c236c16dSBram Moolenaar
78c236c16dSBram Moolenaarsyn cluster rubyStringSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape
796b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
80c236c16dSBram Moolenaarsyn cluster rubyRegexpSpecial	      contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment
81071d4279SBram Moolenaar
82071d4279SBram Moolenaar" Numbers and ASCII Codes
83c1762ccbSBram Moolenaarsyn match rubyASCIICode	"\%(\w\|[]})\"'/]\)\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
841d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*\>"								display
851d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>"						display
861d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*\>"								display
871d68952aSBram Moolenaarsyn match rubyInteger	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*\>"								display
881d68952aSBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>"					display
891d68952aSBram Moolenaarsyn match rubyFloat	"\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>"	display
90071d4279SBram Moolenaar
916b730e11SBram Moolenaar" Identifiers
926b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
936b730e11SBram Moolenaarsyn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
94071d4279SBram Moolenaar
959964e468SBram Moolenaarsyn match  rubyConstant		"\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
96*ec7944aaSBram Moolenaarsyn match  rubyClassVariable	"@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
97*ec7944aaSBram Moolenaarsyn match  rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"  display
98*ec7944aaSBram Moolenaarsyn match  rubyGlobalVariable	"$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
99*ec7944aaSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
100c1762ccbSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
101*ec7944aaSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"
102*ec7944aaSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\="
1031d68952aSBram Moolenaarsyn match  rubySymbol		"\%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!"he=e-1
104*ec7944aaSBram Moolenaarsyn match  rubySymbol		"[]})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="he=e-1
105*ec7944aaSBram Moolenaarsyn match  rubySymbol		"\%([{(,]\_s*\)\@<=[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
106*ec7944aaSBram Moolenaarsyn match  rubySymbol		"[[:space:],{]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="hs=s+1,he=e-1
1071d68952aSBram Moolenaarsyn region rubySymbol		start="[]})\"':]\@<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape fold
108c1762ccbSBram Moolenaarsyn region rubySymbol		start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
109071d4279SBram Moolenaar
110*ec7944aaSBram Moolenaarsyn match  rubyBlockParameter	  "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained
111c1762ccbSBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter
112c1762ccbSBram Moolenaar
113c236c16dSBram Moolenaarsyn match rubyInvalidVariable	 "$[^ A-Za-z_-]"
114*ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]#
115*ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+"										   display
1166b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>"											   display
1176b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
1186b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
1191e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
1206b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
121*ec7944aaSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!"
122*ec7944aaSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
123*ec7944aaSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
124071d4279SBram Moolenaar
125071d4279SBram Moolenaar" Normal Regular Expression
126*ec7944aaSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
127c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
128c236c16dSBram Moolenaar
129c236c16dSBram Moolenaar" Generalized Regular Expression
130c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
131c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				 end="}[iomxneus]*"   skip="\\\\\|\\}"	 contains=@rubyRegexpSpecial fold
132c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				 end=">[iomxneus]*"   skip="\\\\\|\\>"	 contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
133c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				 end="\][iomxneus]*"  skip="\\\\\|\\\]"	 contains=@rubyRegexpSpecial fold
134c236c16dSBram Moolenaarsyn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				 end=")[iomxneus]*"   skip="\\\\\|\\)"	 contains=@rubyRegexpSpecial fold
1356b730e11SBram Moolenaar
1366b730e11SBram Moolenaar" Normal String and Shell Command Output
137*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial,@Spell fold
138*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape,@Spell    fold
1399964e468SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial fold
1406b730e11SBram Moolenaar
1416b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings
142*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
143*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
144*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
145*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
146*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
147*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%q "				   end=" "   skip="\\\\\|\\)"	fold
148*ec7944aaSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)"   end="\z1" skip="\\\\\|\\\z1" fold
149*ec7944aaSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
150*ec7944aaSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
151*ec7944aaSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
152*ec7944aaSBram Moolenaarsyn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
1536b730e11SBram Moolenaar
1546b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output
1556b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string
1566b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	    end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
157*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
158*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
159*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
160*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
161*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
162*ec7944aaSBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[Qx] "				    end=" "   skip="\\\\\|\\)"   contains=@rubyStringSpecial fold
163071d4279SBram Moolenaar
164071d4279SBram Moolenaar" Here Document
165*ec7944aaSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
166c236c16dSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
167c236c16dSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
168c236c16dSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
169071d4279SBram Moolenaar
170*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
171*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
172*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc			fold keepend
173*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
1746b730e11SBram Moolenaar
175*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
176*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
177*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     fold keepend
178*ec7944aaSBram Moolenaarsyn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
1796b730e11SBram Moolenaar
1806b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby'
181d5cdbeb8SBram Moolenaar  let b:ruby_no_expensive = 1
1826b730e11SBram Moolenaarend
183071d4279SBram Moolenaar
1849964e468SBram Moolenaarsyn match  rubyAliasDeclaration    "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
1859964e468SBram Moolenaarsyn match  rubyAliasDeclaration2   "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
1869964e468SBram Moolenaarsyn match  rubyMethodDeclaration   "[^[:space:];#(]\+"	 contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
187c236c16dSBram Moolenaarsyn match  rubyClassDeclaration    "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
188c236c16dSBram Moolenaarsyn match  rubyModuleDeclaration   "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
1891d68952aSBram Moolenaarsyn match  rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
1909964e468SBram Moolenaarsyn match  rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
191*ec7944aaSBram Moolenaarsyn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
192c1762ccbSBram Moolenaar
193c236c16dSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
194c236c16dSBram Moolenaar
1951d68952aSBram Moolenaar" Keywords
1961d68952aSBram Moolenaar" Note: the following keywords have already been defined:
1971d68952aSBram Moolenaar" begin case class def do end for if module unless until while
1981d68952aSBram Moolenaarsyn match   rubyControl	       "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!"
1991d68952aSBram Moolenaarsyn match   rubyOperator       "\<defined?" display
2001d68952aSBram Moolenaarsyn match   rubyKeyword	       "\<\%(super\|yield\)\>[?!]\@!"
2011d68952aSBram Moolenaarsyn match   rubyBoolean	       "\<\%(true\|false\)\>[?!]\@!"
202*ec7944aaSBram Moolenaarsyn match   rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise
2031d68952aSBram Moolenaarsyn match   rubyBeginEnd       "\<\%(BEGIN\|END\)\>[?!]\@!"
2041d68952aSBram Moolenaar
205c1762ccbSBram Moolenaar" Expensive Mode - match 'end' with the appropriate opening keyword for syntax
206c1762ccbSBram Moolenaar" based folding and special highlighting of module/class/method definitions
207d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
2089964e468SBram Moolenaar  syn match  rubyDefine "\<alias\>"  nextgroup=rubyAliasDeclaration  skipwhite skipnl
2099964e468SBram Moolenaar  syn match  rubyDefine "\<def\>"    nextgroup=rubyMethodDeclaration skipwhite skipnl
210c236c16dSBram Moolenaar  syn match  rubyDefine "\<undef\>"  nextgroup=rubyFunction	     skipwhite skipnl
2119964e468SBram Moolenaar  syn match  rubyClass	"\<class\>"  nextgroup=rubyClassDeclaration  skipwhite skipnl
2129964e468SBram Moolenaar  syn match  rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
2131d68952aSBram Moolenaar
2141d68952aSBram Moolenaar  syn region rubyMethodBlock start="\<def\>"	matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
215c236c16dSBram Moolenaar  syn region rubyBlock	     start="\<class\>"	matchgroup=rubyClass  end="\<end\>"		       contains=ALLBUT,@rubyNotTop fold
216c236c16dSBram Moolenaar  syn region rubyBlock	     start="\<module\>" matchgroup=rubyModule end="\<end\>"		       contains=ALLBUT,@rubyNotTop fold
217071d4279SBram Moolenaar
2186b730e11SBram Moolenaar  " modifiers
219c1762ccbSBram Moolenaar  syn match rubyConditionalModifier "\<\%(if\|unless\)\>"    display
220c1762ccbSBram Moolenaar  syn match rubyRepeatModifier	     "\<\%(while\|until\)\>" display
221071d4279SBram Moolenaar
222c236c16dSBram Moolenaar  syn region rubyDoBlock      matchgroup=rubyControl start="\<do\>" end="\<end\>"                 contains=ALLBUT,@rubyNotTop fold
223c1762ccbSBram Moolenaar  " curly bracket block or hash literal
224*ec7944aaSBram Moolenaar  syn region rubyCurlyBlock	matchgroup=rubyCurlyBlockDelimiter  start="{" end="}"				contains=ALLBUT,@rubyNotTop fold
225c236c16dSBram Moolenaar  syn region rubyArrayLiteral	matchgroup=rubyArrayDelimiter	    start="\%(\w\|[\]})]\)\@<!\[" end="]"	contains=ALLBUT,@rubyNotTop fold
226071d4279SBram Moolenaar
227c1762ccbSBram Moolenaar  " statements without 'do'
228c236c16dSBram Moolenaar  syn region rubyBlockExpression       matchgroup=rubyControl	  start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
229c236c16dSBram Moolenaar  syn region rubyCaseExpression	       matchgroup=rubyConditional start="\<case\>"  end="\<end\>" contains=ALLBUT,@rubyNotTop fold
230*ec7944aaSBram Moolenaar  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
231071d4279SBram Moolenaar
232c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!"	contained containedin=rubyCaseExpression
233c236c16dSBram Moolenaar  syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
234c1762ccbSBram Moolenaar
2351d68952aSBram Moolenaar  syn match rubyExceptional	  "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression
2361d68952aSBram Moolenaar  syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock
2371d68952aSBram Moolenaar
238c1762ccbSBram Moolenaar  " statements with optional 'do'
239c236c16dSBram Moolenaar  syn region rubyOptionalDoLine   matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
240c236c16dSBram Moolenaar  syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
241071d4279SBram Moolenaar
242071d4279SBram Moolenaar  if !exists("ruby_minlines")
243*ec7944aaSBram Moolenaar    let ruby_minlines = 500
244071d4279SBram Moolenaar  endif
245071d4279SBram Moolenaar  exec "syn sync minlines=" . ruby_minlines
246071d4279SBram Moolenaar
2476b730e11SBram Moolenaarelse
248c236c16dSBram Moolenaar  syn match rubyControl "\<def\>[?!]\@!"    nextgroup=rubyMethodDeclaration skipwhite skipnl
249c236c16dSBram Moolenaar  syn match rubyControl "\<class\>[?!]\@!"  nextgroup=rubyClassDeclaration  skipwhite skipnl
250c236c16dSBram Moolenaar  syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl
2511d68952aSBram Moolenaar  syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!"
252c236c16dSBram Moolenaar  syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!"
2536b730e11SBram Moolenaarendif
254071d4279SBram Moolenaar
2556b730e11SBram Moolenaar" Special Methods
2566b730e11SBram Moolenaarif !exists("ruby_no_special_methods")
257*ec7944aaSBram Moolenaar  syn keyword rubyAccess    public protected private public_class_method private_class_method public_constant private_constant module_function
258c236c16dSBram Moolenaar  " attr is a common variable name
259c236c16dSBram Moolenaar  syn match   rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
260c236c16dSBram Moolenaar  syn keyword rubyAttribute attr_accessor attr_reader attr_writer
261c236c16dSBram Moolenaar  syn match   rubyControl   "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)"
2626b730e11SBram Moolenaar  syn keyword rubyEval	    eval class_eval instance_eval module_eval
2636b730e11SBram Moolenaar  syn keyword rubyException raise fail catch throw
264c236c16dSBram Moolenaar  " false positive with 'include?'
265c236c16dSBram Moolenaar  syn match   rubyInclude   "\<include\>[?!]\@!"
266*ec7944aaSBram Moolenaar  syn keyword rubyInclude   autoload extend load prepend require require_relative
2676b730e11SBram Moolenaar  syn keyword rubyKeyword   callcc caller lambda proc
268071d4279SBram Moolenaarendif
269071d4279SBram Moolenaar
2706b730e11SBram Moolenaar" Comments and Documentation
2716b730e11SBram Moolenaarsyn match   rubySharpBang "\%^#!.*" display
272*ec7944aaSBram Moolenaarsyn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE XXX todo contained
2736b730e11SBram Moolenaarsyn match   rubyComment   "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
2749964e468SBram Moolenaarif !exists("ruby_no_comment_fold")
2759964e468SBram Moolenaar  syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
276*ec7944aaSBram Moolenaar  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
2779964e468SBram Moolenaarelse
2789964e468SBram Moolenaar  syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
2799964e468SBram Moolenaarendif
2806b730e11SBram Moolenaar
2816b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
2826b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>"		  transparent contains=NONE
2836b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>"		  transparent contains=NONE
2846b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>"		  transparent contains=NONE
2856b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
2866b730e11SBram Moolenaar
287c236c16dSBram Moolenaarsyn match rubyKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE
288c236c16dSBram Moolenaarsyn match rubyKeywordAsMethod "\<\%(if\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
289c236c16dSBram Moolenaar
2906b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"	transparent contains=NONE
2916b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"		transparent contains=NONE
2926b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>"	transparent contains=NONE
2936b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"			transparent contains=NONE
294*ec7944aaSBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|prepend\|private\|proc\|protected\)\>"		transparent contains=NONE
295*ec7944aaSBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|require_relative\|raise\|throw\|trap\)\>"	transparent contains=NONE
296071d4279SBram Moolenaar
297071d4279SBram Moolenaar" __END__ Directive
2986b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
299071d4279SBram Moolenaar
300c1762ccbSBram Moolenaarhi def link rubyClass			rubyDefine
301c1762ccbSBram Moolenaarhi def link rubyModule			rubyDefine
3021d68952aSBram Moolenaarhi def link rubyMethodExceptional	rubyDefine
303c1762ccbSBram Moolenaarhi def link rubyDefine			Define
304c1762ccbSBram Moolenaarhi def link rubyFunction		Function
305c1762ccbSBram Moolenaarhi def link rubyConditional		Conditional
306c1762ccbSBram Moolenaarhi def link rubyConditionalModifier	rubyConditional
3071d68952aSBram Moolenaarhi def link rubyExceptional		rubyConditional
308c1762ccbSBram Moolenaarhi def link rubyRepeat			Repeat
309c1762ccbSBram Moolenaarhi def link rubyRepeatModifier		rubyRepeat
310c1762ccbSBram Moolenaarhi def link rubyOptionalDo		rubyRepeat
311c1762ccbSBram Moolenaarhi def link rubyControl			Statement
312c1762ccbSBram Moolenaarhi def link rubyInclude			Include
313c1762ccbSBram Moolenaarhi def link rubyInteger			Number
314c1762ccbSBram Moolenaarhi def link rubyASCIICode		Character
315c1762ccbSBram Moolenaarhi def link rubyFloat			Float
316c1762ccbSBram Moolenaarhi def link rubyBoolean			Boolean
317c1762ccbSBram Moolenaarhi def link rubyException		Exception
3186b730e11SBram Moolenaarif !exists("ruby_no_identifiers")
319c1762ccbSBram Moolenaar  hi def link rubyIdentifier		Identifier
3206b730e11SBram Moolenaarelse
321c1762ccbSBram Moolenaar  hi def link rubyIdentifier		NONE
3226b730e11SBram Moolenaarendif
323c1762ccbSBram Moolenaarhi def link rubyClassVariable		rubyIdentifier
324c1762ccbSBram Moolenaarhi def link rubyConstant		Type
325c1762ccbSBram Moolenaarhi def link rubyGlobalVariable		rubyIdentifier
326c1762ccbSBram Moolenaarhi def link rubyBlockParameter		rubyIdentifier
327c1762ccbSBram Moolenaarhi def link rubyInstanceVariable	rubyIdentifier
328c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier	rubyIdentifier
329c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant	rubyPredefinedIdentifier
330c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable	rubyPredefinedIdentifier
331c1762ccbSBram Moolenaarhi def link rubySymbol			Constant
332c1762ccbSBram Moolenaarhi def link rubyKeyword			Keyword
333c1762ccbSBram Moolenaarhi def link rubyOperator		Operator
334c1762ccbSBram Moolenaarhi def link rubyBeginEnd		Statement
335c1762ccbSBram Moolenaarhi def link rubyAccess			Statement
336c1762ccbSBram Moolenaarhi def link rubyAttribute		Statement
337c1762ccbSBram Moolenaarhi def link rubyEval			Statement
338c1762ccbSBram Moolenaarhi def link rubyPseudoVariable		Constant
339071d4279SBram Moolenaar
340c1762ccbSBram Moolenaarhi def link rubyComment			Comment
341c1762ccbSBram Moolenaarhi def link rubyData			Comment
342c1762ccbSBram Moolenaarhi def link rubyDataDirective		Delimiter
343c1762ccbSBram Moolenaarhi def link rubyDocumentation		Comment
344c236c16dSBram Moolenaarhi def link rubyTodo			Todo
345c236c16dSBram Moolenaar
3461d68952aSBram Moolenaarhi def link rubyQuoteEscape		rubyStringEscape
347c236c16dSBram Moolenaarhi def link rubyStringEscape		Special
348c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter	Delimiter
349c1762ccbSBram Moolenaarhi def link rubyNoInterpolation		rubyString
350c1762ccbSBram Moolenaarhi def link rubySharpBang		PreProc
351c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter		rubyStringDelimiter
352c236c16dSBram Moolenaarhi def link rubySymbolDelimiter		rubyStringDelimiter
353c1762ccbSBram Moolenaarhi def link rubyStringDelimiter		Delimiter
354*ec7944aaSBram Moolenaarhi def link rubyHeredoc			rubyString
355c1762ccbSBram Moolenaarhi def link rubyString			String
356c236c16dSBram Moolenaarhi def link rubyRegexpEscape		rubyRegexpSpecial
357c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier	rubyRegexpSpecial
358c236c16dSBram Moolenaarhi def link rubyRegexpAnchor		rubyRegexpSpecial
359c236c16dSBram Moolenaarhi def link rubyRegexpDot		rubyRegexpCharClass
360c236c16dSBram Moolenaarhi def link rubyRegexpCharClass		rubyRegexpSpecial
361c236c16dSBram Moolenaarhi def link rubyRegexpSpecial		Special
362c236c16dSBram Moolenaarhi def link rubyRegexpComment		Comment
363c236c16dSBram Moolenaarhi def link rubyRegexp			rubyString
3646b730e11SBram Moolenaar
365c1762ccbSBram Moolenaarhi def link rubyInvalidVariable		Error
366c1762ccbSBram Moolenaarhi def link rubyError			Error
367c1762ccbSBram Moolenaarhi def link rubySpaceError		rubyError
368071d4279SBram Moolenaar
369071d4279SBram Moolenaarlet b:current_syntax = "ruby"
370071d4279SBram Moolenaar
371a7241f5fSBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet:
372