| 
									
										
										
										
											2020-11-25 17:03:23 +01:00
										 |  |  | # typed: true | 
					
						
							| 
									
										
										
										
											2020-11-18 10:25:12 +01:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							|  |  |  |   # Auditor for checking common violations in {Formula} text content. | 
					
						
							|  |  |  |   # | 
					
						
							|  |  |  |   # @api private | 
					
						
							|  |  |  |   class FormulaTextAuditor | 
					
						
							|  |  |  |     def initialize(path) | 
					
						
							|  |  |  |       @text = path.open("rb", &:read) | 
					
						
							|  |  |  |       @lines = @text.lines.to_a | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def without_patch | 
					
						
							|  |  |  |       @text.split("\n__END__").first | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def trailing_newline? | 
					
						
							| 
									
										
										
										
											2023-12-27 13:00:48 -08:00
										 |  |  |       /\Z\n/.match?(@text) | 
					
						
							| 
									
										
										
										
											2020-11-18 10:25:12 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def =~(other) | 
					
						
							|  |  |  |       other =~ @text | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 15:30:25 +00:00
										 |  |  |     def include?(string) | 
					
						
							|  |  |  |       @text.include? string | 
					
						
							| 
									
										
										
										
											2020-11-18 10:25:12 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-03 10:45:32 +01:00
										 |  |  |     def to_s | 
					
						
							|  |  |  |       @text | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-18 10:25:12 +01:00
										 |  |  |     def line_number(regex, skip = 0) | 
					
						
							| 
									
										
										
										
											2023-12-27 15:29:33 -08:00
										 |  |  |       index = @lines.drop(skip).index { |line| line.match?(regex) } | 
					
						
							| 
									
										
										
										
											2020-11-18 10:25:12 +01:00
										 |  |  |       index ? index + 1 : nil | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def reverse_line_number(regex) | 
					
						
							| 
									
										
										
										
											2023-12-27 15:29:33 -08:00
										 |  |  |       index = @lines.reverse.index { |line| line.match?(regex) } | 
					
						
							| 
									
										
										
										
											2020-11-18 10:25:12 +01:00
										 |  |  |       index ? @lines.count - index : nil | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |