class Sass::CSS

def parent_ref_rules(root)

Parameters:
  • root (Tree::Node) -- The parent node
def parent_ref_rules(root)
  current_rule = nil
  root.children.map! do |child|
    unless child.is_a?(Tree::RuleNode)
      parent_ref_rules(child) if child.is_a?(Tree::DirectiveNode)
      next child
    end
    sseq = first_sseq(child)
    next child unless sseq.is_a?(Sass::Selector::SimpleSequence)
    firsts, rest = [sseq.members.first], sseq.members[1..-1]
    firsts.push rest.shift if firsts.first.is_a?(Sass::Selector::Parent)
    last_simple_subject = rest.empty? && sseq.subject?
    if current_rule.nil? || first_sseq(current_rule).members != firsts ||
        !!first_sseq(current_rule).subject? != !!last_simple_subject
      current_rule = Tree::RuleNode.new([])
      current_rule.parsed_rules = make_sseq(last_simple_subject, *firsts)
    end
    if rest.empty?
      current_rule.children += child.children
    else
      rest.unshift Sass::Selector::Parent.new
      child.parsed_rules = make_sseq(sseq.subject?, *rest)
      current_rule << child
    end
    current_rule
  end
  root.children.compact!
  root.children.uniq!
  root.children.each {|v| parent_ref_rules(v)}
end