class SCSSLint::Linter::PropertyUnits

Check for allowed units

Constants

NUMBER_WITH_UNITS_REGEX

Public Instance Methods

visit_prop(node) { || ... } click to toggle source
# File lib/scss_lint/linter/property_units.rb, line 27
def visit_prop(node)
  property = node.name.join

  # Handle nested properties by ensuring the full name is extracted
  if @nested_under
    property = "#{@nested_under}-#{property}"
  end

  if node.value.first.respond_to?(:value)
    node.value.first.value.to_s.scan(NUMBER_WITH_UNITS_REGEX).each do |matches|
      is_quoted_value = !matches[0].nil?
      next if is_quoted_value
      units = matches[1]
      check_units(node, property, units)
    end
  end

  @nested_under = property
  yield # Continue linting nested properties
  @nested_under = nil
end
visit_root(_node) { || ... } click to toggle source
# File lib/scss_lint/linter/property_units.rb, line 20
def visit_root(_node)
  @globally_allowed_units = config['global'].to_set
  @allowed_units_for_property = config['properties']

  yield # Continue linting children
end

Private Instance Methods

allowed_units_for_property(property) click to toggle source

Return the list of allowed units for a property.

@param property [String] @return Array<String>

# File lib/scss_lint/linter/property_units.rb, line 69
def allowed_units_for_property(property)
  if @allowed_units_for_property.key?(property)
    @allowed_units_for_property[property]
  else
    @globally_allowed_units
  end
end
check_units(node, property, units) click to toggle source

Checks if a property value's units are allowed.

@param node [Sass::Tree::Node] @param property [String] @param units [String]

# File lib/scss_lint/linter/property_units.rb, line 56
def check_units(node, property, units)
  allowed_units = allowed_units_for_property(property)
  return if allowed_units.include?(units)

  add_lint(node,
           "#{units} units not allowed on `#{property}`; must be one of " \
           "(#{allowed_units.to_a.sort.join(', ')})")
end