class Sass::CSS
def parent_ref_rules(root)
color: blue
& baz
color: red
& bar
color: green
foo
becomes
color: blue
foo baz
color: red
foo bar
color: green
foo
so that
This has the side effect of nesting rules,
color: blue
&.bar
color: green
foo
becomes
color: blue
foo.bar
color: green
foo
Make rules use parent refs so that
def parent_ref_rules(root) rules = OrderedHash.new root.children.select { |c| Tree::RuleNode === c }.each do |child| root.children.delete child first, rest = child.rule.scan(/^(&?(?: .|[^ ])[^.#: \[]*)([.#: \[].*)?$/).first rules[first] ||= Tree::RuleNode.new(first, nil) if rest child.rule = "&" + rest rules[first] << child else rules[first].children += child.children end end rules.values.each { |v| parent_ref_rules(v) } root.children += rules.values end