Skip to content

Commit 928bafb

Browse files
committed
Better handling of model subtypes
This in particular adds support for detecting classes derived from ApplicationRecord as being derived from ActiveRecord.
1 parent a0f2e8c commit 928bafb

File tree

1 file changed

+16
-19
lines changed

1 file changed

+16
-19
lines changed

autoload/rails.vim

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -724,22 +724,19 @@ function! s:readable_calculate_file_type() dict abort
724724
elseif f =~ '\<app/mailers/.*\.rb'
725725
let r = "mailer"
726726
elseif f =~ '\<app/models/'
727-
let top = join(s:readfile(full_path,50),"\n")
728-
let class = matchstr(top,'\<Acti\w\w\u\w\+\%(::\h\w*\)\+\>')
729-
if class == "ActiveResource::Base"
730-
let class = "ares"
731-
let r = "model-ares"
732-
elseif class == 'ActionMailer::Base'
733-
let r = "mailer"
734-
elseif class != ''
735-
let class = tolower(s:gsub(class,'[^A-Z]',''))
736-
let r = "model-".class
737-
elseif f =~ '_mailer\.rb$'
738-
let r = "mailer"
727+
let top = "\n".join(s:readfile(full_path,50),"\n")
728+
let class = matchstr(top,"\n".'class\s\+\S\+\s*<\s*\<\zs\S\+\>')
729+
let type = tolower(matchstr(class, '^Application\zs[A-Z]\w*$\|^Acti\w\w\zs[A-Z]\w*\ze::Base'))
730+
if type ==# 'mailer' || f =~ '_mailer\.rb$'
731+
let r = 'mailer'
732+
elseif class ==# 'ActiveRecord::Observer'
733+
let r = 'model-observer'
734+
elseif !empty(type)
735+
let r = 'model-'.type
739736
elseif top =~ '\<\%(self\.\%(table_name\|primary_key\)\|has_one\|has_many\|belongs_to\)\>'
740-
let r = "model-arb"
737+
let r = 'model-record'
741738
else
742-
let r = "model"
739+
let r = 'model'
743740
endif
744741
elseif f =~ '\<app/views/.*/_\w\+\%(\.[[:alnum:]_+]\+\)\=\.\w\+$'
745742
let r = "view-partial-" . e
@@ -3289,13 +3286,13 @@ function! s:readable_alternate_candidates(...) dict abort
32893286
return [controller, controller2, mailer, model]
32903287
elseif self.type_name('controller')
32913288
return [s:sub(s:sub(f,'/controllers/','/helpers/'),'%(_controller)=\.rb$','_helper.rb')]
3292-
elseif self.type_name('model-arb')
3289+
elseif self.type_name('model-record')
32933290
let table_name = matchstr(join(self.getline(1,50),"\n"),'\n\s*self\.table_name\s*=\s*[:"'']\zs\w\+')
32943291
if table_name == ''
32953292
let table_name = rails#pluralize(s:gsub(s:sub(fnamemodify(f,':r'),'.{-}<app/models/',''),'/','_'))
32963293
endif
32973294
return ['db/schema.rb#'.table_name]
3298-
elseif self.type_name('model-aro')
3295+
elseif self.type_name('model-observer')
32993296
return [s:sub(f,'_observer\.rb$','.rb')]
33003297
elseif self.type_name('db-schema') && !empty(lastmethod)
33013298
return ['app/models/' . rails#singularize(lastmethod) . '.rb']
@@ -3744,7 +3741,7 @@ function! rails#buffer_syntax()
37443741
if buffer.type_name() == ''
37453742
syn keyword rubyRailsMethod params request response session headers cookies flash
37463743
endif
3747-
if buffer.type_name() ==# 'model' || buffer.type_name('model-arb')
3744+
if buffer.type_name() ==# 'model' || buffer.type_name('model-record')
37483745
syn keyword rubyRailsARMethod default_scope enum named_scope scope serialize store
37493746
syn keyword rubyRailsARAssociationMethod belongs_to has_one has_many has_and_belongs_to_many composed_of accepts_nested_attributes_for
37503747
syn keyword rubyRailsARCallbackMethod before_create before_destroy before_save before_update before_validation before_validation_on_create before_validation_on_update
@@ -3755,7 +3752,7 @@ function! rails#buffer_syntax()
37553752
syn keyword rubyRailsARValidationMethod validate validates validate_on_create validate_on_update validates_acceptance_of validates_associated validates_confirmation_of validates_each validates_exclusion_of validates_format_of validates_inclusion_of validates_length_of validates_numericality_of validates_presence_of validates_size_of validates_uniqueness_of validates_with
37563753
syn keyword rubyRailsMethod logger
37573754
endif
3758-
if buffer.type_name('model-aro')
3755+
if buffer.type_name('model-observer')
37593756
syn keyword rubyRailsARMethod observe
37603757
endif
37613758
if buffer.type_name('mailer')
@@ -4296,7 +4293,7 @@ function! s:BufAbbreviations()
42964293
Rabbrev rst( respond_to
42974294
" ))
42984295
endif
4299-
if buffer.type_name() ==# 'model' || buffer.type_name('model-arb')
4296+
if buffer.type_name() ==# 'model' || buffer.type_name('model-record')
43004297
Rabbrev bt( belongs_to
43014298
Rabbrev ho( has_one
43024299
Rabbrev hm( has_many

0 commit comments

Comments
 (0)