blob: 94434aed38ab71068dc915b2f6bcd14efd40cb18 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00002" Language: Ruby
3" Maintainer: Doug Kearns <dougkearns@gmail.com>
4" Info: $Id$
5" URL: http://vim-ruby.rubyforge.org
6" Anon CVS: See above site
7" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
Bram Moolenaar6b730e12005-09-16 21:47:57 +00008" ----------------------------------------------------------------------------
9"
Bram Moolenaar071d4272004-06-13 20:20:40 +000010" Previous Maintainer: Mirko Nasato
Bram Moolenaar071d4272004-06-13 20:20:40 +000011" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
Bram Moolenaar6b730e12005-09-16 21:47:57 +000012" ----------------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +000013
14" For version 5.x: Clear all syntax items
15" For version 6.x: Quit when a syntax file was already loaded
16if version < 600
17 syntax clear
18elseif exists("b:current_syntax")
19 finish
20endif
21
Bram Moolenaar6b730e12005-09-16 21:47:57 +000022if has("folding") && exists("ruby_fold")
23 setlocal foldmethod=syntax
24endif
25
26if exists("ruby_space_errors")
27 if !exists("ruby_no_trail_space_error")
28 syn match rubySpaceError display excludenl "\s\+$"
29 endif
30 if !exists("ruby_no_tab_space_error")
31 syn match rubySpaceError display " \+\t"me=e-1
32 endif
33endif
34
Bram Moolenaar071d4272004-06-13 20:20:40 +000035" Expression Substitution and Backslash Notation
Bram Moolenaar6b730e12005-09-16 21:47:57 +000036syn match rubyEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
37syn match rubyEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
38syn match rubyInterpolation "#{[^}]*}" contained
39syn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" contained display
40syn match rubyNoInterpolation "\\#{[^}]*}" contained
41syn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" contained display
42
43syn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE
44
45syn region rubyNestedParentheses start="(" end=")" skip="\\\\\|\\)" transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape
46syn region rubyNestedCurlyBraces start="{" end="}" skip="\\\\\|\\}" transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape
47syn region rubyNestedAngleBrackets start="<" end=">" skip="\\\\\|\\>" transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape
48syn region rubyNestedSquareBrackets start="\[" end="\]" skip="\\\\\|\\\]" transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape
49
50syn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyEscape
51syn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
Bram Moolenaar071d4272004-06-13 20:20:40 +000052
53" Numbers and ASCII Codes
Bram Moolenaar6b730e12005-09-16 21:47:57 +000054syn match rubyASCIICode "\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
55syn match rubyInteger "\<0[xX]\x\+\%(_\x\+\)*\>" display
56syn match rubyInteger "\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display
57syn match rubyInteger "\<0[oO]\=\o\+\%(_\o\+\)*\>" display
58syn match rubyInteger "\<0[bB][01]\+\%(_[01]\+\)*\>" display
59syn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display
60syn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000061
Bram Moolenaar6b730e12005-09-16 21:47:57 +000062" Identifiers
63syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
64syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent
Bram Moolenaar071d4272004-06-13 20:20:40 +000065
Bram Moolenaar6b730e12005-09-16 21:47:57 +000066syn match rubyConstant "\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!"
67syn match rubyClassVariable "@@\h\w*" display
68syn match rubyInstanceVariable "@\h\w*" display
69syn match rubyGlobalVariable "$\%(\h\w*\|-.\)"
70syn match rubySymbol ":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
71syn match rubySymbol ":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
72syn match rubySymbol ":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\="
73syn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\""
74syn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000075
Bram Moolenaar6b730e12005-09-16 21:47:57 +000076syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
Bram Moolenaar1e015462005-09-25 22:16:38 +000077syn match rubyPredefinedVariable "$_\>" display
78syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display
79syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display
80syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
Bram Moolenaar6b730e12005-09-16 21:47:57 +000081syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
82syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
83syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
84"Obsolete Global Constants
85"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
86"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000087
88" Normal Regular Expression
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +000089syn 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 +000090syn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
91
92" Normal String and Shell Command Output
93syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +000094syn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'"
95syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial
Bram Moolenaar6b730e12005-09-16 21:47:57 +000096
97" Generalized Regular Expression
98syn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
99syn region rubyString matchgroup=rubyStringDelimiter start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
100syn region rubyString matchgroup=rubyStringDelimiter start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
101syn region rubyString matchgroup=rubyStringDelimiter start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
102syn region rubyString matchgroup=rubyStringDelimiter start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
103
104" Generalized Single Quoted String, Symbol and Array of Strings
105syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
106syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape
107syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape
108syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape
109syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape
110
111" Generalized Double Quoted String and Array of Strings and Shell Command Output
112" Note: %= is not matched here as the beginning of a double quoted string
113syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
114syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
115syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
116syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
117syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
118syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000119
120" Here Document
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000121syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+ 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
124syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000126syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<\z(\h\w*\)\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,@rubyStringSpecial nextgroup=rubyFunction fold keepend
128syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend
129syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
130
131syn 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
132syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
133syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend
134syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
135
136if exists('main_syntax') && main_syntax == 'eruby'
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000137 let b:ruby_no_expensive = 1
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000138end
Bram Moolenaar071d4272004-06-13 20:20:40 +0000139
140" Expensive Mode - colorize *end* according to opening statement
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000141if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
142 syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+" end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline
143 syn region rubyClass matchgroup=rubyDefine start="\<class\s\+" end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000144 syn match rubyDefine "\<class\ze<<"
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000145 syn region rubyModule matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@=" oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000146
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000147 syn region rubyBlock start="\<def\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold
148 syn region rubyBlock start="\<class\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass fold
149 syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000150
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000151 " modifiers
152 syn match rubyControl "\<\%(if\|unless\|while\|until\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153
154 " *do* requiring *end*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000155 syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
157 " *{* requiring *}*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000158 syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159
160 " statements without *do*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000161 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 +0000162
163 " statement with optional *do*
Bram Moolenaar1e015462005-09-25 22:16:38 +0000164 syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
165 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 +0000166
167 if !exists("ruby_minlines")
168 let ruby_minlines = 50
169 endif
170 exec "syn sync minlines=" . ruby_minlines
171
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000172else
173 syn region rubyFunction matchgroup=rubyControl start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline
174 syn region rubyClass matchgroup=rubyControl start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline
175 syn match rubyControl "\<class\ze<<"
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000176 syn region rubyModule matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000177 syn keyword rubyControl case begin do for if unless while until end
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000178endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000179
180" Keywords
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000181" Note: the following keywords have already been defined:
182" begin case class def do end for if module unless until while
183syn keyword rubyControl and break else elsif ensure in next not or redo rescue retry return then when
184syn match rubyOperator "\<defined?" display
185syn keyword rubyKeyword alias super undef yield
186syn keyword rubyBoolean true false
187syn keyword rubyPseudoVariable nil self __FILE__ __LINE__
188syn keyword rubyBeginEnd BEGIN END
189
190" Special Methods
191if !exists("ruby_no_special_methods")
192 syn keyword rubyAccess public protected private
193 syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
Bram Moolenaar1e015462005-09-25 22:16:38 +0000194 syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000195 syn keyword rubyEval eval class_eval instance_eval module_eval
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000196 syn keyword rubyException raise fail catch throw
197 syn keyword rubyInclude autoload extend include load require
198 syn keyword rubyKeyword callcc caller lambda proc
199endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000200
201" Comments and Documentation
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000202syn match rubySharpBang "\%^#!.*" display
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000203syn keyword rubyTodo FIXME NOTE TODO XXX contained
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000204syn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
205syn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000207" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
208syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE
209syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE
210syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE
211syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
212
213syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE
214syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE
215syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
216syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE
217syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE
218syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000219
220" __END__ Directive
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000221syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000222
223" Define the default highlighting.
224" For version 5.7 and earlier: only when not done already
225" For version 5.8 and later: only when an item doesn't have highlighting yet
226if version >= 508 || !exists("did_ruby_syntax_inits")
227 if version < 508
228 let did_ruby_syntax_inits = 1
229 command -nargs=+ HiLink hi link <args>
230 else
231 command -nargs=+ HiLink hi def link <args>
232 endif
233
234 HiLink rubyDefine Define
235 HiLink rubyFunction Function
236 HiLink rubyControl Statement
237 HiLink rubyInclude Include
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000238 HiLink rubyInteger Number
239 HiLink rubyASCIICode rubyInteger
240 HiLink rubyFloat Float
241 HiLink rubyBoolean rubyPseudoVariable
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242 HiLink rubyException Exception
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000243 HiLink rubyClass Type
244 HiLink rubyModule Type
245 if !exists("ruby_no_identifiers")
246 HiLink rubyIdentifier Identifier
247 else
248 HiLink rubyIdentifier NONE
249 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000250 HiLink rubyClassVariable rubyIdentifier
251 HiLink rubyConstant rubyIdentifier
252 HiLink rubyGlobalVariable rubyIdentifier
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000253 HiLink rubyBlockParameter rubyIdentifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000254 HiLink rubyInstanceVariable rubyIdentifier
255 HiLink rubyPredefinedIdentifier rubyIdentifier
256 HiLink rubyPredefinedConstant rubyPredefinedIdentifier
257 HiLink rubyPredefinedVariable rubyPredefinedIdentifier
258 HiLink rubySymbol rubyIdentifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259 HiLink rubyKeyword Keyword
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000260 HiLink rubyOperator Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261 HiLink rubyBeginEnd Statement
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000262 HiLink rubyAccess Statement
263 HiLink rubyAttribute Statement
264 HiLink rubyEval Statement
265 HiLink rubyPseudoVariable Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000266
267 HiLink rubyComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000268 HiLink rubyData Comment
269 HiLink rubyDataDirective Delimiter
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000270 HiLink rubyDocumentation Comment
271 HiLink rubyEscape Special
272 HiLink rubyInterpolation Special
273 HiLink rubyNoInterpolation rubyString
274 HiLink rubySharpBang PreProc
275 HiLink rubyStringDelimiter Delimiter
276 HiLink rubyString String
277 HiLink rubyTodo Todo
278
279 HiLink rubyError Error
280 HiLink rubySpaceError rubyError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281
282 delcommand HiLink
283endif
284
285let b:current_syntax = "ruby"
286
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000287" vim: nowrap sw=2 sts=2 ts=8 ff=unix: