blob: bdd6e2e745cd96d2b67218ad463f795aecac4db0 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar6b730e12005-09-16 21:47:57 +00002" Language: Ruby
3" Maintainer: Doug Kearns <djkea2 at gus.gscit.monash.edu.au>
4" Info: $Id$
Bram Moolenaara5792f52005-11-23 21:25:05 +00005" URL: http://vim-ruby.rubyforge.org
Bram Moolenaar6b730e12005-09-16 21:47:57 +00006" Anon CVS: See above site
Bram Moolenaar6b730e12005-09-16 21:47:57 +00007" ----------------------------------------------------------------------------
8"
Bram Moolenaar071d4272004-06-13 20:20:40 +00009" Previous Maintainer: Mirko Nasato
Bram Moolenaar071d4272004-06-13 20:20:40 +000010" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
Bram Moolenaar6b730e12005-09-16 21:47:57 +000011" ----------------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +000012
13" For version 5.x: Clear all syntax items
14" For version 6.x: Quit when a syntax file was already loaded
15if version < 600
16 syntax clear
17elseif exists("b:current_syntax")
18 finish
19endif
20
Bram Moolenaar6b730e12005-09-16 21:47:57 +000021if has("folding") && exists("ruby_fold")
22 setlocal foldmethod=syntax
23endif
24
25if exists("ruby_space_errors")
26 if !exists("ruby_no_trail_space_error")
27 syn match rubySpaceError display excludenl "\s\+$"
28 endif
29 if !exists("ruby_no_tab_space_error")
30 syn match rubySpaceError display " \+\t"me=e-1
31 endif
32endif
33
Bram Moolenaar071d4272004-06-13 20:20:40 +000034" Expression Substitution and Backslash Notation
Bram Moolenaar6b730e12005-09-16 21:47:57 +000035syn match rubyEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
36syn match rubyEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
37syn match rubyInterpolation "#{[^}]*}" contained
38syn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" contained display
39syn match rubyNoInterpolation "\\#{[^}]*}" contained
40syn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" contained display
41
42syn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE
43
44syn region rubyNestedParentheses start="(" end=")" skip="\\\\\|\\)" transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape
45syn region rubyNestedCurlyBraces start="{" end="}" skip="\\\\\|\\}" transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape
46syn region rubyNestedAngleBrackets start="<" end=">" skip="\\\\\|\\>" transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape
47syn region rubyNestedSquareBrackets start="\[" end="\]" skip="\\\\\|\\\]" transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape
48
49syn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyEscape
50syn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
Bram Moolenaar071d4272004-06-13 20:20:40 +000051
52" Numbers and ASCII Codes
Bram Moolenaar6b730e12005-09-16 21:47:57 +000053syn match rubyASCIICode "\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
54syn match rubyInteger "\<0[xX]\x\+\%(_\x\+\)*\>" display
55syn match rubyInteger "\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display
56syn match rubyInteger "\<0[oO]\=\o\+\%(_\o\+\)*\>" display
57syn match rubyInteger "\<0[bB][01]\+\%(_[01]\+\)*\>" display
58syn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display
59syn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
Bram Moolenaar6b730e12005-09-16 21:47:57 +000061" Identifiers
62syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
63syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent
Bram Moolenaar071d4272004-06-13 20:20:40 +000064
Bram Moolenaar6b730e12005-09-16 21:47:57 +000065syn match rubyConstant "\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!"
66syn match rubyClassVariable "@@\h\w*" display
67syn match rubyInstanceVariable "@\h\w*" display
68syn match rubyGlobalVariable "$\%(\h\w*\|-.\)"
69syn match rubySymbol ":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
70syn match rubySymbol ":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
71syn match rubySymbol ":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\="
72syn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\""
73syn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000074
Bram Moolenaar6b730e12005-09-16 21:47:57 +000075syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
Bram Moolenaar1e015462005-09-25 22:16:38 +000076syn match rubyPredefinedVariable "$_\>" display
77syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display
78syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display
79syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
Bram Moolenaar6b730e12005-09-16 21:47:57 +000080syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
81syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
82syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
83"Obsolete Global Constants
84"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
85"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000086
87" Normal Regular Expression
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +000088syn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
Bram Moolenaar6b730e12005-09-16 21:47:57 +000089syn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
90
91" Normal String and Shell Command Output
92syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +000093syn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'"
94syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial
Bram Moolenaar6b730e12005-09-16 21:47:57 +000095
96" Generalized Regular Expression
97syn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
98syn region rubyString matchgroup=rubyStringDelimiter start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
99syn region rubyString matchgroup=rubyStringDelimiter start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
100syn region rubyString matchgroup=rubyStringDelimiter start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
101syn region rubyString matchgroup=rubyStringDelimiter start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
102
103" Generalized Single Quoted String, Symbol and Array of Strings
104syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
105syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape
106syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape
107syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape
108syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape
109
110" Generalized Double Quoted String and Array of Strings and Shell Command Output
111" Note: %= is not matched here as the beginning of a double quoted string
112syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
113syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
114syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
115syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
116syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
117syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118
119" Here Document
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000120syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+ end=+$+ oneline contains=TOP
121syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=TOP
122syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP
123syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000125syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
126syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
127syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend
128syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
129
130syn 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
131syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
132syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend
133syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
134
135if exists('main_syntax') && main_syntax == 'eruby'
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000136 let b:ruby_no_expensive = 1
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000137end
Bram Moolenaar071d4272004-06-13 20:20:40 +0000138
139" Expensive Mode - colorize *end* according to opening statement
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000140if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
141 syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+" end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline
142 syn region rubyClass matchgroup=rubyDefine start="\<class\s\+" end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000143 syn match rubyDefine "\<class\ze<<"
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000144 syn region rubyModule matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@=" oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000146 syn region rubyBlock start="\<def\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold
147 syn region rubyBlock start="\<class\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass fold
148 syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000149
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000150 " modifiers
151 syn match rubyControl "\<\%(if\|unless\|while\|until\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +0000152
153 " *do* requiring *end*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000154 syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155
156 " *{* requiring *}*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000157 syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158
159 " statements without *do*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000160 syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161
162 " statement with optional *do*
Bram Moolenaar1e015462005-09-25 22:16:38 +0000163 syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
164 syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000165
166 if !exists("ruby_minlines")
167 let ruby_minlines = 50
168 endif
169 exec "syn sync minlines=" . ruby_minlines
170
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000171else
172 syn region rubyFunction matchgroup=rubyControl start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline
173 syn region rubyClass matchgroup=rubyControl start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline
174 syn match rubyControl "\<class\ze<<"
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000175 syn region rubyModule matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000176 syn keyword rubyControl case begin do for if unless while until end
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000177endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000178
179" Keywords
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000180" Note: the following keywords have already been defined:
181" begin case class def do end for if module unless until while
182syn keyword rubyControl and break else elsif ensure in next not or redo rescue retry return then when
183syn match rubyOperator "\<defined?" display
184syn keyword rubyKeyword alias super undef yield
185syn keyword rubyBoolean true false
186syn keyword rubyPseudoVariable nil self __FILE__ __LINE__
187syn keyword rubyBeginEnd BEGIN END
188
189" Special Methods
190if !exists("ruby_no_special_methods")
191 syn keyword rubyAccess public protected private
192 syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
Bram Moolenaar1e015462005-09-25 22:16:38 +0000193 syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000194 syn keyword rubyEval eval class_eval instance_eval module_eval
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000195 syn keyword rubyException raise fail catch throw
196 syn keyword rubyInclude autoload extend include load require
197 syn keyword rubyKeyword callcc caller lambda proc
198endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199
200" Comments and Documentation
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000201syn match rubySharpBang "\%^#!.*" display
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000202syn keyword rubyTodo FIXME NOTE TODO XXX contained
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000203syn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
204syn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000206" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
207syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE
208syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE
209syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE
210syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
211
212syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE
213syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE
214syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
215syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE
216syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE
217syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000218
219" __END__ Directive
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000220syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221
222" Define the default highlighting.
223" For version 5.7 and earlier: only when not done already
224" For version 5.8 and later: only when an item doesn't have highlighting yet
225if version >= 508 || !exists("did_ruby_syntax_inits")
226 if version < 508
227 let did_ruby_syntax_inits = 1
228 command -nargs=+ HiLink hi link <args>
229 else
230 command -nargs=+ HiLink hi def link <args>
231 endif
232
233 HiLink rubyDefine Define
234 HiLink rubyFunction Function
235 HiLink rubyControl Statement
236 HiLink rubyInclude Include
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000237 HiLink rubyInteger Number
238 HiLink rubyASCIICode rubyInteger
239 HiLink rubyFloat Float
240 HiLink rubyBoolean rubyPseudoVariable
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241 HiLink rubyException Exception
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000242 HiLink rubyClass Type
243 HiLink rubyModule Type
244 if !exists("ruby_no_identifiers")
245 HiLink rubyIdentifier Identifier
246 else
247 HiLink rubyIdentifier NONE
248 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000249 HiLink rubyClassVariable rubyIdentifier
250 HiLink rubyConstant rubyIdentifier
251 HiLink rubyGlobalVariable rubyIdentifier
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000252 HiLink rubyBlockParameter rubyIdentifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000253 HiLink rubyInstanceVariable rubyIdentifier
254 HiLink rubyPredefinedIdentifier rubyIdentifier
255 HiLink rubyPredefinedConstant rubyPredefinedIdentifier
256 HiLink rubyPredefinedVariable rubyPredefinedIdentifier
257 HiLink rubySymbol rubyIdentifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000258 HiLink rubyKeyword Keyword
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000259 HiLink rubyOperator Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000260 HiLink rubyBeginEnd Statement
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000261 HiLink rubyAccess Statement
262 HiLink rubyAttribute Statement
263 HiLink rubyEval Statement
264 HiLink rubyPseudoVariable Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265
266 HiLink rubyComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267 HiLink rubyData Comment
268 HiLink rubyDataDirective Delimiter
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000269 HiLink rubyDocumentation Comment
270 HiLink rubyEscape Special
271 HiLink rubyInterpolation Special
272 HiLink rubyNoInterpolation rubyString
273 HiLink rubySharpBang PreProc
274 HiLink rubyStringDelimiter Delimiter
275 HiLink rubyString String
276 HiLink rubyTodo Todo
277
278 HiLink rubyError Error
279 HiLink rubySpaceError rubyError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280
281 delcommand HiLink
282endif
283
284let b:current_syntax = "ruby"
285
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000286" vim: nowrap sw=2 sts=2 ts=8 ff=unix: