[Sass] Add a warning for selectors with no children.

This commit is contained in:
Nathan Weizenbaum 2009-07-19 14:56:32 -07:00
parent d5dfaf6e56
commit 321e7b595f
5 changed files with 51 additions and 18 deletions

View File

@ -268,6 +268,7 @@ END
continued_rule, child = nil, continued_rule
end
check_for_no_children(child)
validate_and_append_child(parent, child, line, root)
end
@ -294,6 +295,22 @@ END
end
end
def check_for_no_children(node)
return unless node.is_a?(Tree::RuleNode) && node.children.empty?
warning = (node.rules.size == 1) ? <<SHORT : <<LONG
WARNING:
Selector #{node.rules.first.inspect} doesn't have any properties and will not be rendered.
SHORT
WARNING:
Selector
#{node.rules.join("\n ")}
doesn't have any properties and will not be rendered.
LONG
warn(warning.strip)
end
def parse_line(parent, line, root)
case line.text[0]
when PROPERTY_CHAR

View File

@ -130,7 +130,7 @@ class SassEngineTest < Test::Unit::TestCase
define_method("test_exception (#{key.inspect})") do
line = 10
begin
Sass::Engine.new(key, :filename => __FILE__, :line => line).render
silence_warnings {Sass::Engine.new(key, :filename => __FILE__, :line => line).render}
rescue Sass::SyntaxError => err
value = [value] unless value.is_a?(Array)
@ -704,6 +704,24 @@ a
SASS
end
def test_empty_selector_warning
assert_warning(<<END) {render("foo bar")}
WARNING:
Selector "foo bar" doesn't have any properties and will not be rendered.
END
assert_warning(<<END) {render(<<SASS)}
WARNING:
Selector
foo, bar, baz,
bang, bip, bop
doesn't have any properties and will not be rendered.
END
foo, bar, baz,
bang, bip, bop
SASS
end
# Regression tests
def test_parens_in_mixins

View File

@ -243,21 +243,6 @@ WARN
Sass::Engine.new(sass, options).render
end
def assert_warning(message)
the_real_stderr, $stderr = $stderr, StringIO.new
yield
assert_equal message.strip, $stderr.string.strip
ensure
$stderr = the_real_stderr
end
def silence_warnings
the_real_stderr, $stderr = $stderr, StringIO.new
yield
ensure
$stderr = the_real_stderr
end
def env(hash = {})
env = Sass::Environment.new
hash.each {|k, v| env.set_var(k, v)}

View File

@ -99,8 +99,6 @@ body
:clear both
.column
:float left
.left
.middle
.right
:float right
a:link, a:visited

View File

@ -26,4 +26,19 @@ class Test::Unit::TestCase
path = File.dirname(__FILE__) + "/../.sass-cache"
FileUtils.rm_r(path) if File.exist?(path)
end
def assert_warning(message)
the_real_stderr, $stderr = $stderr, StringIO.new
yield
assert_equal message.strip, $stderr.string.strip
ensure
$stderr = the_real_stderr
end
def silence_warnings
the_real_stderr, $stderr = $stderr, StringIO.new
yield
ensure
$stderr = the_real_stderr
end
end