| 
									
										
										
										
											2025-01-05 23:45:23 +00:00
										 |  |  | # typed: strict | 
					
						
							| 
									
										
										
										
											2021-12-31 11:08:47 +11:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module RuboCop | 
					
						
							|  |  |  |   module Cop | 
					
						
							|  |  |  |     module Cask | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |       # This cop checks for `version.before_comma` and `version.after_comma`. | 
					
						
							| 
									
										
										
										
											2023-03-05 16:32:40 +00:00
										 |  |  |       class UrlLegacyCommaSeparators < Url | 
					
						
							| 
									
										
										
										
											2021-12-31 11:08:47 +11:00
										 |  |  |         include OnUrlStanza | 
					
						
							|  |  |  |         extend AutoCorrector | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-08 11:02:44 +02:00
										 |  |  |         MSG_CSV = "Use `version.csv.first` instead of `version.before_comma` " \ | 
					
						
							|  |  |  |                   "and `version.csv.second` instead of `version.after_comma`." | 
					
						
							| 
									
										
										
										
											2021-12-31 11:08:47 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-05 23:45:23 +00:00
										 |  |  |         sig { override.params(stanza: RuboCop::Cask::AST::Stanza).void } | 
					
						
							| 
									
										
										
										
											2022-01-10 21:34:51 +11:00
										 |  |  |         def on_url_stanza(stanza) | 
					
						
							| 
									
										
										
										
											2025-01-25 21:35:21 +00:00
										 |  |  |           return if stanza.stanza_node.block_type? | 
					
						
							| 
									
										
										
										
											2022-01-10 21:34:51 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-25 21:35:21 +00:00
										 |  |  |           url_node = T.cast(stanza.stanza_node, RuboCop::AST::SendNode).first_argument | 
					
						
							| 
									
										
										
										
											2021-12-31 11:08:47 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-12 10:40:22 +11:00
										 |  |  |           legacy_comma_separator_pattern = /version\.(before|after)_comma/ | 
					
						
							| 
									
										
										
										
											2021-12-31 11:08:47 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  |           url = url_node.source | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           return unless url.match?(legacy_comma_separator_pattern) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           corrected_url = url.sub("before_comma", "csv.first")&.sub("after_comma", "csv.second") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-07 16:20:20 +00:00
										 |  |  |           add_offense(url_node.loc.expression, message: format(MSG_CSV, url:)) do |corrector| | 
					
						
							| 
									
										
										
										
											2021-12-31 11:08:47 +11:00
										 |  |  |             corrector.replace(url_node.source_range, corrected_url) | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |