Sha256: c46509878c73205641a93590f866b67e23a1ed6dc92b38fa3e217270916e398d

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 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

      def check_valid_shorthand_value(prop_node)
        if prop_node.value.is_a?(Sass::Script::String) &&
           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

3 entries across 3 versions & 1 rubygems

Version Path
scss-lint-0.5.2 lib/scss_lint/linter/shorthand_linter.rb
scss-lint-0.5.1 lib/scss_lint/linter/shorthand_linter.rb
scss-lint-0.5 lib/scss_lint/linter/shorthand_linter.rb