lib/rubocop/cop/style/end_of_line.rb in rubocop-0.47.1 vs lib/rubocop/cop/style/end_of_line.rb in rubocop-0.48.0

- old
+ new

@@ -3,26 +3,48 @@ module RuboCop module Cop module Style # This cop checks for Windows-style line endings in the source code. class EndOfLine < Cop - MSG = 'Carriage return character detected.'.freeze + include ConfigurableEnforcedStyle + MSG_DETECTED = 'Carriage return character detected.'.freeze + MSG_MISSING = 'Carriage return character missing.'.freeze + def investigate(processed_source) last_token = processed_source.tokens.last last_line = last_token ? last_token.pos.line : processed_source.lines.length processed_source.raw_source.each_line.with_index do |line, index| break if index >= last_line - next unless line =~ /\r$/ + msg = offense_message(line) + next unless msg + next if unimportant_missing_cr?(index, last_line, line) range = source_range(processed_source.buffer, index + 1, 0, line.length) - add_offense(nil, range, MSG) + add_offense(nil, range, msg) # Usually there will be carriage return characters on all or none # of the lines in a file, so we report only one offense. break + end + end + + # If there is no LF on the last line, we don't care if there's no CR. + def unimportant_missing_cr?(index, last_line, line) + style == :crlf && index == last_line - 1 && line !~ /\n$/ + end + + def offense_message(line) + effective_style = if style == :native + Platform.windows? ? :crlf : :lf + else + style + end + case effective_style + when :lf then MSG_DETECTED if line =~ /\r$/ + else MSG_MISSING if line !~ /\r$/ end end end end end