diff --git a/lib/sass/css.rb b/lib/sass/css.rb index 9b771a1e..0fbe29ce 100644 --- a/lib/sass/css.rb +++ b/lib/sass/css.rb @@ -273,21 +273,25 @@ module Sass # color: blue # def parent_ref_rules(root) - rules = OrderedHash.new + current_rule = nil root.children.select { |c| Tree::RuleNode === c }.each do |child| root.children.delete child first, rest = child.rules.first.scan(/^(&?(?: .|[^ ])[^.#: \[]*)([.#: \[].*)?$/).first - rules[first] ||= Tree::RuleNode.new(first, {}) + + if current_rule.nil? || current_rule.rules.first != first + current_rule = Tree::RuleNode.new(first, {}) + root << current_rule + end + if rest child.rules = ["&" + rest] - rules[first] << child + current_rule << child else - rules[first].children += child.children + current_rule.children += child.children end end - rules.values.each { |v| parent_ref_rules(v) } - root.children += rules.values + root.children.each { |v| parent_ref_rules(v) } end # Remove useless parent refs so that diff --git a/test/sass/css2sass_test.rb b/test/sass/css2sass_test.rb index b7669def..f0434d36 100644 --- a/test/sass/css2sass_test.rb +++ b/test/sass/css2sass_test.rb @@ -51,6 +51,28 @@ li a:hover { CSS end + def test_no_nesting_around_rules + assert_equal(<