Sha256: 0c219bc16dc5845bc18e448e00471aecef414b8433c8b3ac83a804d6ba0e77c3

Contents?: true

Size: 1.4 KB

Versions: 12

Compression:

Stored size: 1.4 KB

Contents

module SCSSLint
  # Checks for uses of a color keyword instead of the preferred hexadecimal
  # form.
  class Linter::ColorKeyword < Linter
    include LinterRegistry

    FUNCTIONS_ALLOWING_COLOR_KEYWORD_ARGS = %w[
      map-get
      map-has-key
      map-remove
    ].to_set

    def visit_script_color(node)
      word = source_from_range(node.source_range)[/([a-z]+)/i, 1]
      add_color_lint(node, word) if color_keyword?(word)
    end

    def visit_script_string(node)
      return unless node.type == :identifier

      remove_quoted_strings(node.value).scan(/(^|\s)([a-z]+)(?=\s|$)/i) do |_, word|
        add_color_lint(node, word) if color_keyword?(word)
      end
    end

  private

    def add_color_lint(node, original)
      return if in_map?(node) || in_allowed_function_call?(node)

      hex_form = Sass::Script::Value::Color.new(color_keyword_to_code(original)).tap do |color|
        color.options = {} # `inspect` requires options to be set
      end.inspect

      add_lint(node,
               "Color `#{original}` should be written in hexadecimal form " \
               "as `#{hex_form}`")
    end

    def in_map?(node)
      node_ancestor(node, 2).is_a?(Sass::Script::Tree::MapLiteral)
    end

    def in_allowed_function_call?(node)
      (funcall = node_ancestor(node, 2)).is_a?(Sass::Script::Tree::Funcall) &&
        FUNCTIONS_ALLOWING_COLOR_KEYWORD_ARGS.include?(funcall.name)
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
scss_lint-0.60.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.59.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.58.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.57.1 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.57.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.56.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.55.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.54.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.53.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.52.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.51.0 lib/scss_lint/linter/color_keyword.rb
scss_lint-0.50.3 lib/scss_lint/linter/color_keyword.rb