@@ -9,6 +9,7 @@ hi def link rubyMacro Macro
99hi def link rubyRoute rubyControl
1010hi def link rubySchema rubyControl
1111hi def link rubyResponse rubyControl
12+ hi def link rubyAction rubyControl
1213hi def link rubyUrlHelper rubyHelper
1314hi def link rubyViewHelper rubyHelper
1415hi def link rubyTestHelper rubyHelper
@@ -228,14 +229,31 @@ syn keyword rubyAttribute cattr_accessor cattr_reader cattr_writer mattr_accesso
228229syn keyword rubyAttribute thread_cattr_accessor thread_cattr_reader thread_cattr_writer thread_mattr_accessor thread_mattr_reader thread_mattr_writer
229230syn keyword rubyMacro alias_attribute concern concerning delegate delegate_missing_to with_options
230231
231- let s: keywords = split (join (filter (rails#buffer ().projected (' keywords' ),
232- \ ' type(v:val) == type("")' ), ' ' ))
233- let s: special = filter (copy (s: keywords ), ' v:val =~# '' ^\h\k*[?!]$'' ' )
234- let s: regular = filter (copy (s: keywords ), ' v:val =~# '' ^\h\k*$'' ' )
235- let s: group = rails#buffer ().type_name (' helper' , ' view' ) ? ' rubyHelper' : ' rubyMacro'
236- if ! empty (s: special )
237- exe ' syn match' s: group ' "\<\%(' .join (s: special , ' \|' ).' \)"'
238- endif
239- if ! empty (s: regular )
240- exe ' syn keyword' s: group join (s: regular , ' ' )
241- endif
232+ let s: special = {
233+ \ ' [' : ' \>\[\@=' ,
234+ \ ' ]' : ' \>[[.]\@!' ,
235+ \ ' {' : ' \>\%(\s*{\|\s*do\>\)\@=' ,
236+ \ ' }' : ' \>\%(\s*{\|\s*do\>\)\@!' }
237+ function ! s: highlight (group, ... ) abort
238+ let value = rails#buffer ().projected (a: 0 ? a: 1 : a: group )
239+ let words = split (join (filter (value, ' type(v:val) == type("")' ), ' ' ))
240+ let special = filter (copy (words), ' type(v:val) == type("") && v:val =~# '' ^\h\k*[][{}?!]$'' ' )
241+ let regular = filter (copy (words), ' type(v:val) == type("") && v:val =~# '' ^\h\k*$'' ' )
242+ if ! empty (special )
243+ exe ' syn match' a: group substitute (
244+ \ ' "\<\%(' .join (special , ' \|' ).' \)"' ,
245+ \ ' [][{}]' , ' \=get(s:special, submatch(0), submatch(0))' , ' g' )
246+ endif
247+ if ! empty (regular)
248+ exe ' syn keyword' a: group join (regular, ' ' )
249+ endif
250+ endfunction
251+
252+ call s: highlight (
253+ \ rails#buffer ().type_name (' helper' , ' view' ) ? ' rubyHelper' : ' rubyMacro' ,
254+ \ ' keywords' )
255+ call s: highlight (' rubyMacro' )
256+ call s: highlight (' rubyAction' )
257+ call s: highlight (' rubyHelper' )
258+ call s: highlight (' rubyEntity' )
259+ call s: highlight (' rubyEntities' )
0 commit comments