lib/scss_lint/linter/property_spelling.rb in scss-lint-0.29.0 vs lib/scss_lint/linter/property_spelling.rb in scss-lint-0.30.0

- old
+ new

@@ -1,32 +1,49 @@ module SCSSLint # Checks for misspelled properties. class Linter::PropertySpelling < Linter include LinterRegistry + KNOWN_PROPERTIES = File.open(File.join(SCSS_LINT_DATA, 'properties.txt')) + .read + .split + .to_set + def visit_root(_node) @extra_properties = config['extra_properties'].to_set yield # Continue linting children end def visit_prop(node) # Ignore properties with interpolation return if node.name.count > 1 || !node.name.first.is_a?(String) - name = node.name.join + nested_properties = node.children.select { |child| child.is_a?(Sass::Tree::PropNode) } + if nested_properties.any? + # Treat nested properties specially, as they are a concatenation of the + # parent with child property + nested_properties.each do |nested_prop| + check_property(nested_prop, node.name.join) + end + else + check_property(node) + end + end + private + + def check_property(node, prefix = nil) # rubocop:disable CyclomaticComplexity + # Ignore properties with interpolation + return if node.name.count > 1 || !node.name.first.is_a?(String) + + name = prefix ? "#{prefix}-" : '' + name += node.name.join + # Ignore vendor-prefixed properties return if name.start_with?('-') return if KNOWN_PROPERTIES.include?(name) || @extra_properties.include?(name) add_lint(node, "Unknown property #{name}") end - - private - - KNOWN_PROPERTIES = File.open(File.join(SCSS_LINT_DATA, 'properties.txt')) - .read - .split - .to_set end end