Module: SCSSLint::Utils

Included in:
Linter
Defined in:
lib/scss_lint/utils.rb

Overview

Collection of helpers used across a variety of linters.

Instance Method Summary collapse

Instance Method Details

#extract_string_selectors(selector_array) ⇒ Object

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.


17
18
19
20
21
# File 'lib/scss_lint/utils.rb', line 17

def extract_string_selectors(selector_array)
  selector_array.reject { |item| item.is_a? Sass::Script::Node }
                .join
                .split
end

#node_siblings(node) ⇒ Object


44
45
46
47
48
49
# File 'lib/scss_lint/utils.rb', line 44

def node_siblings(node)
  return unless node && node.node_parent
  node.node_parent
      .children
      .select { |child| child.is_a?(Sass::Tree::Node) }
end

#pluralize(value, word) ⇒ Object


51
52
53
# File 'lib/scss_lint/utils.rb', line 51

def pluralize(value, word)
  value == 1 ? "#{value} #{word}" : "#{value} #{word}s"
end

#previous_node(node) ⇒ Object


33
34
35
36
37
38
39
40
41
42
# File 'lib/scss_lint/utils.rb', line 33

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

#remove_quoted_strings(string) ⇒ Object

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”).


29
30
31
# File 'lib/scss_lint/utils.rb', line 29

def remove_quoted_strings(string)
  string.gsub(/"[^"]*"|'[^']*'/, '')
end

#same_position?(pos1, pos2) ⇒ Boolean

Sass doesn't define an equality operator for Sass::Source::Position objects, so we define a helper for our own use.

Returns:

  • (Boolean)

57
58
59
60
# File 'lib/scss_lint/utils.rb', line 57

def same_position?(pos1, pos2)
  return unless pos1 && pos2
  pos1.line == pos2.line && pos1.offset == pos2.offset
end