Sha256: 3e5f0abd0e3159a886b45341fed2c18b056cab67a2e0dc8e04f7f88fe49b9d68

Contents?: true

Size: 1.74 KB

Versions: 3

Compression:

Stored size: 1.74 KB

Contents

# frozen_string_literal: true

module ThemeCheck
  class DisabledChecks
    DISABLE_START = 'theme-check-disable'
    DISABLE_END = 'theme-check-enable'
    DISABLE_PREFIX_PATTERN = /#{DISABLE_START}|#{DISABLE_END}/

    ACTION_DISABLE_CHECKS = :disable
    ACTION_ENABLE_CHECKS = :enable

    def initialize
      @disabled_checks = {}
    end

    def update(node)
      text = comment_text(node)
      if start_disabling?(text)
        checks_from_text(text).each do |check_name|
          @disabled_checks[check_name] ||= DisabledCheck.new(check_name)
          @disabled_checks[check_name].start_index = node.start_index
          @disabled_checks[check_name].first_line = true if node.line_number == 1
        end
      elsif stop_disabling?(text)
        checks_from_text(text).each do |check_name|
          next unless @disabled_checks.key?(check_name)
          @disabled_checks[check_name].end_index = node.end_index
        end
      end
    end

    def disabled?(key, index)
      @disabled_checks[:all]&.disabled?(index) ||
        @disabled_checks[key]&.disabled?(index)
    end

    def checks_missing_end_index
      @disabled_checks.values
        .select(&:missing_end_index?)
        .map(&:name)
    end

    private

    def comment_text(node)
      node.value.nodelist.join
    end

    def start_disabling?(text)
      text.strip.start_with?(DISABLE_START)
    end

    def stop_disabling?(text)
      text.strip.start_with?(DISABLE_END)
    end

    # Return a list of checks from a theme-check-disable comment
    # Returns [:all] if all checks are meant to be disabled
    def checks_from_text(text)
      checks = text.gsub(DISABLE_PREFIX_PATTERN, '').strip.split(',').map(&:strip)
      return [:all] if checks.empty?
      checks
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

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