Sha256: 01f8ab228c99cce7f359b9b884e5e4a247a3102f0d9decae22260fef9c43b2e3

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

# frozen_string_literal: true
module ThemeCheck
  class Visitor
    attr_reader :checks

    def initialize(checks)
      @checks = checks
    end

    def visit_template(template)
      @disabled_checks = DisabledChecks.new
      visit(Node.new(template.root, nil, template))
      remove_disabled_offenses
    rescue Liquid::Error => exception
      exception.template_name = template.name
      call_checks(:on_error, exception)
    end

    private

    def visit(node)
      call_checks(:on_node, node)
      call_checks(:on_tag, node) if node.tag?
      call_checks(:"on_#{node.type_name}", node)
      node.children.each { |child| visit(child) }
      unless node.literal?
        call_checks(:"after_#{node.type_name}", node)
        call_checks(:after_tag, node) if node.tag?
        call_checks(:after_node, node)
      end

      @disabled_checks.update(node) if node.comment?
    end

    def call_checks(method, *args)
      checks.call(method, *args)
    end

    def remove_disabled_offenses
      checks.disableable.each do |check|
        check.offenses.reject! do |offense|
          @disabled_checks.disabled?(offense.code_name, offense.start_index)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
theme-check-0.8.3 lib/theme_check/visitor.rb
theme-check-0.8.2 lib/theme_check/visitor.rb
theme-check-0.8.1 lib/theme_check/visitor.rb