blob: aba8697636eada95570c0950a0c496e4a5ca90bf [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$
5" URL: http://vim-ruby.sourceforge.net
6" Anon CVS: See above site
7" Licence: GPL (http://www.gnu.org)
8" Disclaimer:
9" This program is distributed in the hope that it will be useful,
10" but WITHOUT ANY WARRANTY; without even the implied warranty of
11" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12" GNU General Public License for more details.
13" ----------------------------------------------------------------------------
14"
Bram Moolenaar071d4272004-06-13 20:20:40 +000015" Previous Maintainer: Mirko Nasato
Bram Moolenaar071d4272004-06-13 20:20:40 +000016" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
Bram Moolenaar6b730e12005-09-16 21:47:57 +000017" ----------------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +000018
19" For version 5.x: Clear all syntax items
20" For version 6.x: Quit when a syntax file was already loaded
21if version < 600
22 syntax clear
23elseif exists("b:current_syntax")
24 finish
25endif
26
Bram Moolenaar6b730e12005-09-16 21:47:57 +000027if has("folding") && exists("ruby_fold")
28 setlocal foldmethod=syntax
29endif
30
31if exists("ruby_space_errors")
32 if !exists("ruby_no_trail_space_error")
33 syn match rubySpaceError display excludenl "\s\+$"
34 endif
35 if !exists("ruby_no_tab_space_error")
36 syn match rubySpaceError display " \+\t"me=e-1
37 endif
38endif
39
Bram Moolenaar071d4272004-06-13 20:20:40 +000040" Expression Substitution and Backslash Notation
Bram Moolenaar6b730e12005-09-16 21:47:57 +000041syn match rubyEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
42syn match rubyEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
43syn match rubyInterpolation "#{[^}]*}" contained
44syn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" contained display
45syn match rubyNoInterpolation "\\#{[^}]*}" contained
46syn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" contained display
47
48syn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE
49
50syn region rubyNestedParentheses start="(" end=")" skip="\\\\\|\\)" transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape
51syn region rubyNestedCurlyBraces start="{" end="}" skip="\\\\\|\\}" transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape
52syn region rubyNestedAngleBrackets start="<" end=">" skip="\\\\\|\\>" transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape
53syn region rubyNestedSquareBrackets start="\[" end="\]" skip="\\\\\|\\\]" transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape
54
55syn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyEscape
56syn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
Bram Moolenaar071d4272004-06-13 20:20:40 +000057
58" Numbers and ASCII Codes
Bram Moolenaar6b730e12005-09-16 21:47:57 +000059syn match rubyASCIICode "\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
60syn match rubyInteger "\<0[xX]\x\+\%(_\x\+\)*\>" display
61syn match rubyInteger "\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display
62syn match rubyInteger "\<0[oO]\=\o\+\%(_\o\+\)*\>" display
63syn match rubyInteger "\<0[bB][01]\+\%(_[01]\+\)*\>" display
64syn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display
65syn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000066
Bram Moolenaar6b730e12005-09-16 21:47:57 +000067" Identifiers
68syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
69syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent
Bram Moolenaar071d4272004-06-13 20:20:40 +000070
Bram Moolenaar6b730e12005-09-16 21:47:57 +000071syn match rubyConstant "\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!"
72syn match rubyClassVariable "@@\h\w*" display
73syn match rubyInstanceVariable "@\h\w*" display
74syn match rubyGlobalVariable "$\%(\h\w*\|-.\)"
75syn match rubySymbol ":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
76syn match rubySymbol ":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
77syn match rubySymbol ":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\="
78syn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\""
79syn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000080
Bram Moolenaar6b730e12005-09-16 21:47:57 +000081syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
Bram Moolenaar1e015462005-09-25 22:16:38 +000082syn match rubyPredefinedVariable "$_\>" display
83syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display
84syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display
85syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
Bram Moolenaar6b730e12005-09-16 21:47:57 +000086syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
87syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
88syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
89"Obsolete Global Constants
90"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
91"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +000092
93" Normal Regular Expression
Bram Moolenaar6b730e12005-09-16 21:47:57 +000094syn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[\~=!|&(,[]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
95syn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial
96
97" Normal String and Shell Command Output
98syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial
99syn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'"
100syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial
101
102" Generalized Regular Expression
103syn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
104syn region rubyString matchgroup=rubyStringDelimiter start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
105syn region rubyString matchgroup=rubyStringDelimiter start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
106syn region rubyString matchgroup=rubyStringDelimiter start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
107syn region rubyString matchgroup=rubyStringDelimiter start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
108
109" Generalized Single Quoted String, Symbol and Array of Strings
110syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
111syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape
112syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape
113syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape
114syn region rubyString matchgroup=rubyStringDelimiter start="%[qsw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape
115
116" Generalized Double Quoted String and Array of Strings and Shell Command Output
117" Note: %= is not matched here as the beginning of a double quoted string
118syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
119syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
120syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
121syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
122syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
123syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124
125" Here Document
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000126syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+ end=+$+ oneline contains=TOP
127syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=TOP
128syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP
129syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000131syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
132syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
133syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend
134syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
135
136syn 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
137syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
138syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend
139syn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend
140
141if exists('main_syntax') && main_syntax == 'eruby'
142 let ruby_no_expensive = 1
143end
Bram Moolenaar071d4272004-06-13 20:20:40 +0000144
145" Expensive Mode - colorize *end* according to opening statement
146if !exists("ruby_no_expensive")
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000147 syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline
148 syn region rubyClass matchgroup=rubyDefine start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline
149 syn match rubyDefine "\<class\ze<<"
150 syn region rubyModule matchgroup=rubyDefine start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000152 syn region rubyBlock start="\<def\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold
153 syn region rubyBlock start="\<class\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass fold
154 syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000155
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000156 " modifiers
157 syn match rubyControl "\<\%(if\|unless\|while\|until\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +0000158
159 " *do* requiring *end*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000160 syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000161
162 " *{* requiring *}*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000163 syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164
165 " statements without *do*
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000166 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 +0000167
168 " statement with optional *do*
Bram Moolenaar1e015462005-09-25 22:16:38 +0000169 syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo
170 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 +0000171
172 if !exists("ruby_minlines")
173 let ruby_minlines = 50
174 endif
175 exec "syn sync minlines=" . ruby_minlines
176
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000177else
178 syn region rubyFunction matchgroup=rubyControl start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline
179 syn region rubyClass matchgroup=rubyControl start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline
180 syn match rubyControl "\<class\ze<<"
181 syn region rubyModule matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182 syn keyword rubyControl case begin do for if unless while until end
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000183endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000184
185" Keywords
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000186" Note: the following keywords have already been defined:
187" begin case class def do end for if module unless until while
188syn keyword rubyControl and break else elsif ensure in next not or redo rescue retry return then when
189syn match rubyOperator "\<defined?" display
190syn keyword rubyKeyword alias super undef yield
191syn keyword rubyBoolean true false
192syn keyword rubyPseudoVariable nil self __FILE__ __LINE__
193syn keyword rubyBeginEnd BEGIN END
194
195" Special Methods
196if !exists("ruby_no_special_methods")
197 syn keyword rubyAccess public protected private
198 syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer
Bram Moolenaar1e015462005-09-25 22:16:38 +0000199 syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)"
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000200 syn keyword rubyEval eval class_eval instance_eval module_eval
201 syn keyword rubyException raise fail catch throw
202 syn keyword rubyInclude autoload extend include load require
203 syn keyword rubyKeyword callcc caller lambda proc
204endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000205
206" Comments and Documentation
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000207syn match rubySharpBang "\%^#!.*" display
208syn keyword rubyTodo FIXME NOTE TODO XXX contained
209syn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
210syn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000211
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000212" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
213syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE
214syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE
215syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE
216syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
217
218syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE
219syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE
220syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
221syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE
222syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE
223syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000224
225" __END__ Directive
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000226syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000227
228" Define the default highlighting.
229" For version 5.7 and earlier: only when not done already
230" For version 5.8 and later: only when an item doesn't have highlighting yet
231if version >= 508 || !exists("did_ruby_syntax_inits")
232 if version < 508
233 let did_ruby_syntax_inits = 1
234 command -nargs=+ HiLink hi link <args>
235 else
236 command -nargs=+ HiLink hi def link <args>
237 endif
238
239 HiLink rubyDefine Define
240 HiLink rubyFunction Function
241 HiLink rubyControl Statement
242 HiLink rubyInclude Include
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000243 HiLink rubyInteger Number
244 HiLink rubyASCIICode rubyInteger
245 HiLink rubyFloat Float
246 HiLink rubyBoolean rubyPseudoVariable
Bram Moolenaar071d4272004-06-13 20:20:40 +0000247 HiLink rubyException Exception
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000248 HiLink rubyClass Type
249 HiLink rubyModule Type
250 if !exists("ruby_no_identifiers")
251 HiLink rubyIdentifier Identifier
252 else
253 HiLink rubyIdentifier NONE
254 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000255 HiLink rubyClassVariable rubyIdentifier
256 HiLink rubyConstant rubyIdentifier
257 HiLink rubyGlobalVariable rubyIdentifier
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000258 HiLink rubyBlockParameter rubyIdentifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000259 HiLink rubyInstanceVariable rubyIdentifier
260 HiLink rubyPredefinedIdentifier rubyIdentifier
261 HiLink rubyPredefinedConstant rubyPredefinedIdentifier
262 HiLink rubyPredefinedVariable rubyPredefinedIdentifier
263 HiLink rubySymbol rubyIdentifier
Bram Moolenaar071d4272004-06-13 20:20:40 +0000264 HiLink rubyKeyword Keyword
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000265 HiLink rubyOperator Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000266 HiLink rubyBeginEnd Statement
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000267 HiLink rubyAccess Statement
268 HiLink rubyAttribute Statement
269 HiLink rubyEval Statement
270 HiLink rubyPseudoVariable Constant
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271
272 HiLink rubyComment Comment
Bram Moolenaar071d4272004-06-13 20:20:40 +0000273 HiLink rubyData Comment
274 HiLink rubyDataDirective Delimiter
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000275 HiLink rubyDocumentation Comment
276 HiLink rubyEscape Special
277 HiLink rubyInterpolation Special
278 HiLink rubyNoInterpolation rubyString
279 HiLink rubySharpBang PreProc
280 HiLink rubyStringDelimiter Delimiter
281 HiLink rubyString String
282 HiLink rubyTodo Todo
283
284 HiLink rubyError Error
285 HiLink rubySpaceError rubyError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000286
287 delcommand HiLink
288endif
289
290let b:current_syntax = "ruby"
291
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000292" vim: nowrap sw=2 sts=2 ts=8 ff=unix: