| 
									
										
										
										
											2025-01-22 23:17:22 +00:00
										 |  |  | # typed: strict | 
					
						
							| 
									
										
										
										
											2023-12-17 16:46:48 -05:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module RuboCop | 
					
						
							|  |  |  |   module Cop | 
					
						
							|  |  |  |     module Cask | 
					
						
							|  |  |  |       # This cop corrects `caveats { discontinued }` to `deprecate!`. | 
					
						
							|  |  |  |       class Discontinued < Base | 
					
						
							|  |  |  |         include CaskHelp | 
					
						
							|  |  |  |         extend AutoCorrector | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         MESSAGE = "Use `deprecate!` instead of `caveats { discontinued }`." | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-22 23:17:22 +00:00
										 |  |  |         sig { override.params(stanza_block: RuboCop::Cask::AST::StanzaBlock).void } | 
					
						
							| 
									
										
										
										
											2023-12-17 16:46:48 -05:00
										 |  |  |         def on_cask_stanza_block(stanza_block) | 
					
						
							|  |  |  |           stanza_block.stanzas.select(&:caveats?).each do |stanza| | 
					
						
							|  |  |  |             find_discontinued_method_call(stanza.stanza_node) do |node| | 
					
						
							| 
									
										
										
										
											2024-01-12 10:38:47 -08:00
										 |  |  |               if caveats_contains_only_discontinued?(node.parent) | 
					
						
							| 
									
										
										
										
											2023-12-17 16:46:48 -05:00
										 |  |  |                 add_offense(node.parent, message: MESSAGE) do |corrector| | 
					
						
							|  |  |  |                   corrector.replace(node.parent.source_range, | 
					
						
							|  |  |  |                                     "deprecate! date: \"#{Date.today}\", because: :discontinued") | 
					
						
							|  |  |  |                 end | 
					
						
							|  |  |  |               else | 
					
						
							|  |  |  |                 add_offense(node, message: MESSAGE) | 
					
						
							|  |  |  |               end | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-12 10:38:47 -08:00
										 |  |  |         def_node_matcher :caveats_contains_only_discontinued?, <<~EOS | 
					
						
							| 
									
										
										
										
											2023-12-17 16:46:48 -05:00
										 |  |  |           (block | 
					
						
							|  |  |  |             (send nil? :caveats) | 
					
						
							|  |  |  |             (args) | 
					
						
							|  |  |  |             (send nil? :discontinued)) | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         def_node_search :find_discontinued_method_call, <<~EOS | 
					
						
							|  |  |  |           $(send nil? :discontinued) | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |