Sha256: bc86391c406357a1144002c620d218532a35c3312672cb8034a7070a1ee3ace3

Contents?: true

Size: 1.7 KB

Versions: 6

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true
module ThemeCheck
  # Checks unused {% assign x = ... %}
  class UnusedAssign < LiquidCheck
    severity :suggestion
    category :liquid
    doc docs_url(__FILE__)

    class TemplateInfo < Struct.new(:used_assigns, :assign_nodes, :includes)
      def collect_used_assigns(templates, visited = Set.new)
        collected = used_assigns
        # Check recursively inside included snippets for use
        includes.each do |name|
          if templates[name] && !visited.include?(name)
            visited << name
            collected += templates[name].collect_used_assigns(templates, visited)
          end
        end
        collected
      end
    end

    def initialize
      @templates = {}
    end

    def on_document(node)
      @templates[node.theme_file.name] = TemplateInfo.new(Set.new, {}, Set.new)
    end

    def on_assign(node)
      @templates[node.theme_file.name].assign_nodes[node.value.to] = node
    end

    def on_include(node)
      if node.value.template_name_expr.is_a?(String)
        @templates[node.theme_file.name].includes << "snippets/#{node.value.template_name_expr}"
      end
    end

    def on_variable_lookup(node)
      @templates[node.theme_file.name].used_assigns << case node.value.name
      when Liquid::VariableLookup
        node.value.name.name
      else
        node.value.name
      end
    end

    def on_end
      @templates.each_pair do |_, info|
        used = info.collect_used_assigns(@templates)
        info.assign_nodes.each_pair do |name, node|
          next if used.include?(name)
          add_offense("`#{name}` is never used", node: node) do |corrector|
            corrector.remove(node)
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
theme-check-1.15.0 lib/theme_check/checks/unused_assign.rb
theme-check-1.14.0 lib/theme_check/checks/unused_assign.rb
theme-check-1.13.0 lib/theme_check/checks/unused_assign.rb
theme-check-1.12.1 lib/theme_check/checks/unused_assign.rb
theme-check-1.12.0 lib/theme_check/checks/unused_assign.rb
theme-check-1.11.0 lib/theme_check/checks/unused_assign.rb