class SCSSLint::Linter::PropertyCount

Checks that the number of properties in a rule set is under a defined limit.

Public Instance Methods

visit_root(_node) { || ... } click to toggle source
# File lib/scss_lint/linter/property_count.rb, line 6
def visit_root(_node)
  @property_count = {} # Lookup table of counts for rule sets
  @max = config['max_properties']
  yield # Continue linting children
end
visit_rule(node) { || ... } click to toggle source
# File lib/scss_lint/linter/property_count.rb, line 12
def visit_rule(node)
  count = property_count(node)

  if count > @max
    add_lint node,
             "Rule set contains (#{count}/#{@max}) properties" \
             "#{' (including properties in nested rule sets)' if config['include_nested']}"

    # Don't lint nested rule sets as we already have them in the count
    return if config['include_nested']
  end

  yield # Lint nested rule sets
end

Private Instance Methods

property_count(rule_node) click to toggle source
# File lib/scss_lint/linter/property_count.rb, line 29
def property_count(rule_node)
  @property_count[rule_node] ||=
    begin
      count = rule_node.children.count { |node| node.is_a?(Sass::Tree::PropNode) }

      if config['include_nested']
        count += rule_node.children.inject(0) do |sum, node|
          node.is_a?(Sass::Tree::RuleNode) ? sum + property_count(node) : sum
        end
      end

      count
    end
end