Sha256: 91c85b65349a387e21058289013167fc3397a47bd1e1e1fa1a96eef69cca52fa

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'sass'

module SCSSLint
  class Linter::ShorthandLinter < Linter
    include LinterRegistry

    class << self
      def run(engine)
        lints = []
        engine.tree.each do |node|
          if node.is_a?(Sass::Tree::PropNode)
            lints << check_valid_shorthand_value(node)
          end
        end
        lints.compact
      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 check_valid_shorthand_value(prop_node)
        unless SHORTHANDABLE_PROPERTIES.include? prop_node.name.first.to_s
          return
        end

        if prop_node.value.to_s.strip =~ /\A(\S+\s+\S+(\s+\S+){0,2})\Z/
          return create_lint(prop_node) unless valid_shorthand?($1)
        end
      end

      def valid_shorthand?(shorthand)
        values = shorthand.split(/\s+/)
        top, right, bottom, left = values

        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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
scss-lint-0.6 lib/scss_lint/linter/shorthand_linter.rb