module SCSSLint::Utils
Collection of helpers used across a variety of linters.
Constants
- COLOR_REGEX
Public Instance Methods
Returns whether the given string is a color literal (keyword or hex code).
@param string [String] @return [true,false]
# File lib/scss_lint/utils.rb, line 10 def color?(string) color_keyword?(string) || color_hex?(string) end
Returns whether the given string is a color hexadecimal code.
@param string [String] @return [true,false]
# File lib/scss_lint/utils.rb, line 18 def color_hex?(string) string =~ COLOR_REGEX end
Returns whether the given string is a valid color keyword.
@param string [String] @return [true,false]
# File lib/scss_lint/utils.rb, line 26 def color_keyword?(string) color_keyword_to_code(string) && string != 'transparent' end
Returns the hexadecimal code for the given color keyword.
@param string [String] @return [String] 7-character hexadecimal code (includes ‘#` prefix)
# File lib/scss_lint/utils.rb, line 34 def color_keyword_to_code(string) Sass::Script::Value::Color::COLOR_NAMES[string] end
Given a selector array which is a list of strings with Sass::Script::Nodes interspersed within them, return an array of strings representing those selectors with the Sass::Script::Nodes removed (i.e., ignoring interpolation). For example:
.selector-one, .selector-#{$var}-two
becomes:
.selector-one, .selector–two
This is useful for lints that wish to ignore interpolation, since interpolation can’t be resolved at this step.
# File lib/scss_lint/utils.rb, line 51 def extract_string_selectors(selector_array) selector_array.reject { |item| item.is_a? Sass::Script::Node } .join .split end
Return nth-ancestor of a node, where 1 is the parent, 2 is grandparent, etc.
@param node [Sass::Tree::Node, Sass::Script::Tree::Node
] @param level [Integer] @return [Sass::Tree::Node, Sass::Script::Tree::Node
, nil]
# File lib/scss_lint/utils.rb, line 91 def node_ancestor(node, levels) while levels > 0 node = node.node_parent return unless node levels -= 1 end node end
# File lib/scss_lint/utils.rb, line 78 def node_siblings(node) return unless node && node.node_parent node.node_parent .children .select { |child| child.is_a?(Sass::Tree::Node) } end
# File lib/scss_lint/utils.rb, line 101 def pluralize(value, word) value == 1 ? "#{value} #{word}" : "#{value} #{word}s" end
# File lib/scss_lint/utils.rb, line 67 def previous_node(node) return unless node && parent = node.node_parent index = parent.children.index(node) if index == 0 parent else parent.children[index - 1] end end
Takes a string like ‘hello “world” ’how are’ you` and turns it into: ‘hello you`. This is useful for scanning for keywords in shorthand properties or lists which can contain quoted strings but for which you don’t want to inspect quoted strings (e.g. you care about the actual color keyword ‘red`, not the string “red”).
# File lib/scss_lint/utils.rb, line 63 def remove_quoted_strings(string) string.gsub(/"[^"]*"|'[^']*'/, '') end
Sass
doesn’t define an equality operator for Sass::Source::Position objects, so we define a helper for our own use.
# File lib/scss_lint/utils.rb, line 107 def same_position?(pos1, pos2) return unless pos1 && pos2 pos1.line == pos2.line && pos1.offset == pos2.offset end