@@ -4601,6 +4601,7 @@ let s:has_projections = {
46014601 \ }
46024602 \}
46034603
4604+ let s: projections_for_gems = {}
46044605function ! s: app_projections () dict abort
46054606 let dict = s: combine_projections ({}, s: default_projections )
46064607 for [k , v ] in items (s: has_projections )
@@ -4610,28 +4611,43 @@ function! s:app_projections() dict abort
46104611 endfor
46114612 call s: combine_projections (dict , self .smart_projections ())
46124613 call s: combine_projections (dict , get (g: , ' rails_projections' , ' ' ))
4613- for gem in keys (get (g: , ' rails_gem_projections' , {}))
4614+ for [ gem, data] in items (get (g: , ' rails_gem_projections' , {}))
46144615 if self .has_gem (gem)
46154616 try
4616- if type (g: rails_gem_projections [gem]) == # v: t_string
4617- let file = g: rails_gem_projections [gem]
4618- if file !~# ' ^\a\+:\|^/'
4617+ if type (data) == # v: t_string && data isnot # ' lib/projections.json' && data isnot # ' lib/rails/projections.json'
4618+ if data !~# ' ^\a\+:\|^/\|^$'
46194619 if ! has_key (self .gems (), gem)
46204620 continue
46214621 endif
4622- let file = self .gems ()[gem] . ' /' . file
4622+ let data = self .gems ()[gem] . ' /' . data
46234623 endif
4624- if file = ~# ' /$'
4625- let file .= ' projections.json'
4624+ if data = ~# ' /$'
4625+ let data .= ' projections.json'
46264626 endif
4627- call s: combine_projections (dict , rails#json_parse (s: readfile (file )))
4628- else
4629- call s: combine_projections (dict , g: rails_gem_projections [gem] )
4627+ call s: combine_projections (dict , rails#json_parse (s: readfile (data )))
4628+ elseif type (data) == # v: t_dict
4629+ call s: combine_projections (dict , data )
46304630 endif
46314631 catch
46324632 endtry
46334633 endif
46344634 endfor
4635+ let gem_path = escape (join (values (self .gems ()),' ,' ), ' ' )
4636+ if get (g: , ' rails_projections_inside_gems' , 1 ) && ! empty (gem_path)
4637+ if ! has_key (s: projections_for_gems , gem_path)
4638+ let gem_projections = {}
4639+ for path in [' lib/' , ' lib/rails/' ]
4640+ for file in findfile (path .' projections.json' , gem_path, -1 )
4641+ try
4642+ call s: combine_projections (gem_projections, rails#json_parse (s: readfile (self .path (file ))))
4643+ catch
4644+ endtry
4645+ endfor
4646+ endfor
4647+ let s: projections_for_gems [gem_path] = gem_projections
4648+ endif
4649+ call s: combine_projections (dict , s: projections_for_gems [gem_path])
4650+ endif
46354651 if self .cache.needs (' projections' )
46364652 call self .cache.set (' projections' , {})
46374653
0 commit comments