lib/i18n/tasks/scanners/pattern_scanner.rb in i18n-tasks-0.2.19 vs lib/i18n/tasks/scanners/pattern_scanner.rb in i18n-tasks-0.2.20

- old
+ new

@@ -1,25 +1,27 @@ # Scans for I18n.t usages require 'i18n/tasks/scanners/base_scanner' module I18n::Tasks::Scanners class PatternScanner < BaseScanner - LITERAL_RE = /:?".+?"|:?'.+?'|:\w+/ + LITERAL_RE = /:?".+?"|:?'.+?'|:\w+/ DEFAULT_PATTERN = /\bt(?:ranslate)?[( ]\s*(#{LITERAL_RE})/ # Extract i18n keys from file based on the pattern. The pattern must capture key literal. # @return [String] keys found in file - def scan_file(path) + def scan_file(path, text = read_file(path)) keys = [] - File.open(path, 'rb') do |f| - f.read.scan(pattern) do |match| - key = extract_key_from_match(match, path) - keys << key if valid_key?(key) - end + text.scan(pattern) do |match| + src_pos = Regexp.last_match.offset(0).first + key = extract_key_from_match(match, path) + next unless valid_key?(key) + keys << ::I18n::Tasks::Key.new(key, src: usage_context(text, src_pos)) end keys end protected + + def pattern @pattern ||= config[:pattern].present? ? Regexp.new(config[:pattern]) : DEFAULT_PATTERN end end end