| 
									
										
										
										
											2017-07-12 09:43:47 +00:00
										 |  |  | " Author: Eddie Lebow https://github.com/elebow | 
					
						
							|  |  |  | " Description: rails_best_practices, a code metric tool for rails projects | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let g:ale_ruby_rails_best_practices_options = | 
					
						
							|  |  |  | \   get(g:, 'ale_ruby_rails_best_practices_options', '') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! ale_linters#ruby#rails_best_practices#Handle(buffer, lines) abort | 
					
						
							|  |  |  |     let l:output = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-26 23:45:25 +00:00
										 |  |  |     for l:warning in ale#util#FuzzyJSONDecode(a:lines, []) | 
					
						
							| 
									
										
										
										
											2017-07-12 09:43:47 +00:00
										 |  |  |         if !ale#path#IsBufferPath(a:buffer, l:warning.filename) | 
					
						
							| 
									
										
										
										
											2017-07-26 23:45:25 +00:00
										 |  |  |             continue | 
					
						
							| 
									
										
										
										
											2017-07-12 09:43:47 +00:00
										 |  |  |         endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         call add(l:output, { | 
					
						
							|  |  |  |         \    'lnum': l:warning.line_number + 0, | 
					
						
							|  |  |  |         \    'type': 'W', | 
					
						
							|  |  |  |         \    'text': l:warning.message, | 
					
						
							|  |  |  |         \}) | 
					
						
							|  |  |  |     endfor | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return l:output | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function! ale_linters#ruby#rails_best_practices#GetCommand(buffer) abort | 
					
						
							|  |  |  |     let l:executable = ale#handlers#rails_best_practices#GetExecutable(a:buffer) | 
					
						
							|  |  |  |     let l:exec_args = l:executable =~? 'bundle$' | 
					
						
							|  |  |  |     \   ? ' exec rails_best_practices' | 
					
						
							|  |  |  |     \   : '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-08 07:39:13 +00:00
										 |  |  |     if l:rails_root is? '' | 
					
						
							| 
									
										
										
										
											2017-07-12 09:43:47 +00:00
										 |  |  |         return '' | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let l:output_file = ale#Has('win32') ? '%t ' : '/dev/stdout ' | 
					
						
							|  |  |  |     let l:cat_file = ale#Has('win32') ? '; type %t' : '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return ale#Escape(l:executable) . l:exec_args | 
					
						
							|  |  |  |     \    . ' --silent -f json --output-file ' . l:output_file | 
					
						
							|  |  |  |     \    . ale#Var(a:buffer, 'ruby_rails_best_practices_options') | 
					
						
							|  |  |  |     \    . ale#Escape(l:rails_root) | 
					
						
							|  |  |  |     \    . l:cat_file | 
					
						
							|  |  |  | endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | call ale#linter#Define('ruby', { | 
					
						
							|  |  |  | \    'name': 'rails_best_practices', | 
					
						
							|  |  |  | \    'executable_callback': 'ale#handlers#rails_best_practices#GetExecutable', | 
					
						
							|  |  |  | \    'command_callback': 'ale_linters#ruby#rails_best_practices#GetCommand', | 
					
						
							|  |  |  | \    'callback': 'ale_linters#ruby#rails_best_practices#Handle', | 
					
						
							|  |  |  | \    'lint_file': 1, | 
					
						
							|  |  |  | \}) |