class SCSSLint::Linter::MergeableSelector
Checks for rule sets that can be merged with other rule sets.
Public Instance Methods
check_node(node) { || ... }
click to toggle source
# File lib/scss_lint/linter/mergeable_selector.rb, line 6 def check_node(node) node.children.each_with_object([]) do |child_node, seen_nodes| next unless child_node.is_a?(Sass::Tree::RuleNode) mergeable_node = find_mergeable_node(child_node, seen_nodes) seen_nodes << child_node next unless mergeable_node add_lint child_node.line, "Merge rule `#{node_rule(child_node)}` with rule " \ "on line #{mergeable_node.line}" end yield # Continue linting children end
Also aliased as: visit_root, visit_rule
Private Instance Methods
equal?(node1, node2)
click to toggle source
# File lib/scss_lint/linter/mergeable_selector.rb, line 34 def equal?(node1, node2) node_rule(node1) == node_rule(node2) end
find_mergeable_node(node, seen_nodes)
click to toggle source
# File lib/scss_lint/linter/mergeable_selector.rb, line 27 def find_mergeable_node(node, seen_nodes) seen_nodes.find do |seen_node| equal?(node, seen_node) || (config['force_nesting'] && nested?(node, seen_node)) end end
nested?(node1, node2)
click to toggle source
# File lib/scss_lint/linter/mergeable_selector.rb, line 38 def nested?(node1, node2) return false unless single_rule?(node1) && single_rule?(node2) rule1 = node_rule(node1) rule2 = node_rule(node2) subrule?(rule1, rule2) || subrule?(rule2, rule1) end
node_rule(node)
click to toggle source
# File lib/scss_lint/linter/mergeable_selector.rb, line 46 def node_rule(node) node.rule.join end
single_rule?(node)
click to toggle source
# File lib/scss_lint/linter/mergeable_selector.rb, line 50 def single_rule?(node) return unless node.parsed_rules node.parsed_rules.members.count == 1 end
subrule?(rule1, rule2)
click to toggle source
# File lib/scss_lint/linter/mergeable_selector.rb, line 55 def subrule?(rule1, rule2) "#{rule1}".start_with?("#{rule2} ") || "#{rule1}".start_with?("#{rule2}.") end