Sha256: 0a224edaf50aebda72e0a80ecdca5b5315658de57953ac8d018220d633583927

Contents?: true

Size: 1.06 KB

Versions: 3

Compression:

Stored size: 1.06 KB

Contents

require_relative 'base'

module LintTrap
  module Parser
    # Handles parsing line by line with regex
    class Line < Base
      def parse
        output = ''

        io.each_line do |line|
          if (violation = parse_line(line))
            yield violation
          else
            output << line
          end
        end

        output
      end

    private

      def parse_line(line)
        return unless (match = line.match(violation_regex))

        violation = {}
        violation_fields.each do |field|
          violation[field.to_sym] = if match.names.include?(field) && !match[field].empty?
            match[field]
          else
            nil
          end
        end

        standardize(violation)
      end

      def violation_fields
        %w(file line column length rule severity message)
      end

      def violation_regex
        raise NotImplementedError, "Must implement violation_regex."
      end

      def standardize(violation)
        violation[:file] = container.local_path(violation[:file])

        violation
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lint_trap-0.0.15 lib/lint_trap/parser/line.rb
lint_trap-0.0.14 lib/lint_trap/parser/line.rb
lint_trap-0.0.13 lib/lint_trap/parser/line.rb