| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  | module RuboCop | 
					
						
							|  |  |  |   module Cop | 
					
						
							| 
									
										
										
										
											2017-02-12 11:07:03 +05:30
										 |  |  |     module Homebrew | 
					
						
							| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  |       class CorrectBottleBlock < Cop | 
					
						
							| 
									
										
										
										
											2017-01-18 15:55:32 +05:30
										 |  |  |         MSG = "Use rebuild instead of revision in bottle block".freeze | 
					
						
							| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |         def on_block(node) | 
					
						
							|  |  |  |           return if block_length(node).zero? | 
					
						
							| 
									
										
										
										
											2017-01-18 15:55:32 +05:30
										 |  |  |           method, _args, body = *node | 
					
						
							|  |  |  |           _keyword, method_name = *method | 
					
						
							| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 22:37:11 +05:30
										 |  |  |           return unless method_name == :bottle | 
					
						
							|  |  |  |           check_revision?(body) | 
					
						
							| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def autocorrect(node) | 
					
						
							| 
									
										
										
										
											2017-01-18 15:55:32 +05:30
										 |  |  |           lambda do |corrector| | 
					
						
							| 
									
										
										
										
											2017-01-18 22:37:11 +05:30
										 |  |  |             correction = node.source.sub("revision", "rebuild") | 
					
						
							|  |  |  |             corrector.insert_before(node.source_range, correction) | 
					
						
							|  |  |  |             corrector.remove(node.source_range) | 
					
						
							| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-18 22:37:11 +05:30
										 |  |  |         def check_revision?(body) | 
					
						
							| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  |           body.children.each do |method_call_node| | 
					
						
							| 
									
										
										
										
											2017-01-18 15:55:32 +05:30
										 |  |  |             _receiver, method_name, _args = *method_call_node | 
					
						
							| 
									
										
										
										
											2017-01-18 22:37:11 +05:30
										 |  |  |             next unless method_name == :revision | 
					
						
							|  |  |  |             add_offense(method_call_node, :expression) | 
					
						
							| 
									
										
										
										
											2017-01-18 15:54:47 +05:30
										 |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |