Sha256: 50fa1b44d9c2cda308bc4048526add0d9711dc82bb829a2c85c4eeecfd2dfda0

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

require 'sass'

module SCSSLint
  class Linter::PropertyFormatLinter < Linter
    include LinterRegistry

    class << self
      def run(engine)
        lints = []
        engine.tree.each do |node|
          if node.is_a?(Sass::Tree::PropNode)
            lints << check_property_format(node, engine.lines[node.line - 1]) if node.line
          end
        end
        lints.compact
      end

      def description
        'Property declarations should always be on one line of the form ' <<
        '`name: value;` or `name: [value] {` ' <<
        '(are you missing a trailing semi-colon?)'
      end

    private

      VALUE_RE = %r{(\S+\s)*\S+} # eg. "10px", "10px normal"
      PROPERTY_RE = %r{
        ^\s*[\w-]+:\s           # property name, colon, one space
          (                     # followed by
          #{VALUE_RE};          # property and terminating semi-colon eg. a b c;
          |                     # or
          ((#{VALUE_RE}\s)?\{)  # nested property, optional value, trailing curly
          )
      }x

      def check_property_format(prop_node, line)
        return create_lint(prop_node) unless line =~ PROPERTY_RE
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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