class SCSSLint::Linter::ColorVariable
Ensures color literals are used only in variable declarations.
Public Instance Methods
visit_script_color(node)
click to toggle source
# File lib/scss_lint/linter/color_variable.rb, line 6 def visit_script_color(node) return if in_variable_declaration?(node) || in_map_declaration?(node) || in_rgba_function_call?(node) # Source range sometimes includes closing parenthesis, so extract it color = source_from_range(node.source_range)[/(#?[a-z0-9]+)/i, 1] record_lint(node, color) if color?(color) end
visit_script_string(node)
click to toggle source
# File lib/scss_lint/linter/color_variable.rb, line 17 def visit_script_string(node) return if literal_string?(node) remove_quoted_strings(node.value) .scan(/(^|\s)(#[a-f0-9]+|[a-z]+)(?=\s|$)/i) .select { |_, word| color?(word) } .each { |_, color| record_lint(node, color) } end
Private Instance Methods
in_map_declaration?(node)
click to toggle source
# File lib/scss_lint/linter/color_variable.rb, line 56 def in_map_declaration?(node) node_ancestor(node, 2).is_a?(Sass::Script::Tree::MapLiteral) end
in_rgba_function_call?(node)
click to toggle source
# File lib/scss_lint/linter/color_variable.rb, line 49 def in_rgba_function_call?(node) grandparent = node_ancestor(node, 2) grandparent.is_a?(Sass::Script::Tree::Funcall) && grandparent.name == 'rgba' end
in_variable_declaration?(node)
click to toggle source
# File lib/scss_lint/linter/color_variable.rb, line 43 def in_variable_declaration?(node) parent = node.node_parent parent.is_a?(Sass::Script::Tree::Literal) && parent.node_parent.is_a?(Sass::Tree::VariableNode) end
literal_string?(script_string)
click to toggle source
# File lib/scss_lint/linter/color_variable.rb, line 34 def literal_string?(script_string) return unless script_string.respond_to?(:source_range) && source_range = script_string.source_range # If original source starts with a quote character, it's a string, not a # color %w[' "].include?(source_from_range(source_range)[0]) end
record_lint(node, color)
click to toggle source
# File lib/scss_lint/linter/color_variable.rb, line 28 def record_lint(node, color) add_lint node, "Color literals like `#{color}` should only be used in " \ 'variable declarations; they should be referred to via ' \ 'variable everywhere else.' end