Sha256: 848def2aba7d7e0044050af1906495607dc29ef6337282de57de4f281ed47cb9

Contents?: true

Size: 1.35 KB

Versions: 3

Compression:

Stored size: 1.35 KB

Contents

module SCSSLint
  class Linter::Shorthand < Linter
    include LinterRegistry

    def visit_prop(node)
      return unless SHORTHANDABLE_PROPERTIES.include? node.name.first.to_s

      case node.value
      when Sass::Script::List
        items = node.value.children
        if (2..4).member?(items.count)
          add_lint(node) unless valid_shorthand?(*items.map(&:to_sass))
        end
      when Sass::Script::String
        if node.value.to_sass.strip =~ /\A(\S+\s+\S+(\s+\S+){0,2})\Z/
          add_lint(node) unless valid_shorthand?(*$1.split(/\s+/))
        end
      end
    end

    def description
      'Property values should use the shortest shorthand syntax allowed'
    end

  private

    SHORTHANDABLE_PROPERTIES = %w[border-color
                                  border-radius
                                  border-style
                                  border-width
                                  margin
                                  padding]

    def valid_shorthand?(top, right, bottom = nil, left = nil)
      if top == right && right == bottom && bottom == left
        false
      elsif top == right && bottom.nil? && left.nil?
        false
      elsif top == bottom && right == left
        false
      elsif top == bottom && left.nil?
        false
      elsif right == left
        false
      else
        true
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
scss-lint-0.10.1 lib/scss_lint/linter/shorthand.rb
scss-lint-0.10.0 lib/scss_lint/linter/shorthand.rb
scss-lint-0.9.0 lib/scss_lint/linter/shorthand.rb