Sha256: 6ddab54ed4f09ebfd13ac9bcefb5ba1f4ff018a2cfa947b27c0c5a27e8e55dc6
Contents?: true
Size: 1.45 KB
Versions: 1
Compression:
Stored size: 1.45 KB
Contents
module SCSSLint # Checks that selector sequences are split over multiple lines by comma. class Linter::SingleLinePerSelector < Linter include LinterRegistry def visit_rule(node) add_lint(node, MESSAGE) if invalid_comma_placement?(node) yield # Continue linting children end private MESSAGE = 'Each selector in a comma sequence should be on its own line' # A comma is invalid if it starts the line or is not the end of the line def invalid_comma_placement?(node) # We must ignore selectors with interpolation, since there's no way to # tell if the overall selector is valid since the interpolation could # insert commas incorrectly. Thus we simply ignore. return if node.rule.any? { |item| item.is_a?(Sass::Script::Variable) } normalize_spacing(condense_to_string(node.rule)) =~ /\n,|,[^\n]/ end # Since RuleNode.rule returns an array containing both String and # Sass::Script::Nodes, we need to condense it into a single string that we # can run a regex against. def condense_to_string(sequence_list) sequence_list.select { |item| item.is_a?(String) }.inject(:+) end # Removes extra spacing between lines in a comma-separated sequence due to # comments being removed in the parse phase. This makes it easy to check if # a comma is where belongs. def normalize_spacing(string_sequence) string_sequence.gsub(/,[^\S\n]*\n\s*/, ",\n") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
scss-lint-0.26.0 | lib/scss_lint/linter/single_line_per_selector.rb |