Sha256: 1806a77584c98c407e91f4599b213ca7f0eeba84ee7476a19996429734180e15

Contents?: true

Size: 1.11 KB

Versions: 10

Compression:

Stored size: 1.11 KB

Contents

module Goodcheck
  class Analyzer
    attr_reader :rule
    attr_reader :buffer

    def initialize(rule:, buffer:)
      @rule = rule
      @buffer = buffer
    end

    def scan(&block)
      if block_given?
        issues = []

        rule.patterns.each do |pattern|
          scanner = StringScanner.new(buffer.content)

          break_head = pattern.regexp.source.start_with?("\\b")
          after_break = true

          until scanner.eos?
            case
            when scanner.scan(pattern.regexp)
              next if break_head && !after_break

              text = scanner.matched
              range = (scanner.pos - text.bytesize) .. scanner.pos
              unless issues.any? {|issue| issue.range == range }
                issues << Issue.new(buffer: buffer, range: range, rule: rule, text: text)
              end
            when scanner.scan(/.\b/m)
              after_break = true
            else
              scanner.scan(/./m)
              after_break = false
            end
          end
        end

        issues.each(&block)
      else
        enum_for(:scan, &block)
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
goodcheck-1.5.0 lib/goodcheck/analyzer.rb
goodcheck-1.4.1 lib/goodcheck/analyzer.rb
goodcheck-1.4.0 lib/goodcheck/analyzer.rb
goodcheck-1.3.1 lib/goodcheck/analyzer.rb
goodcheck-1.2.0 lib/goodcheck/analyzer.rb
goodcheck-1.1.0 lib/goodcheck/analyzer.rb
goodcheck-1.0.0 lib/goodcheck/analyzer.rb
goodcheck-0.3.0 lib/goodcheck/analyzer.rb
goodcheck-0.2.0 lib/goodcheck/analyzer.rb
goodcheck-0.1.0 lib/goodcheck/analyzer.rb