module SyntaxTree::Quotes

Responsible for providing information about quotes to be used for strings and dynamic symbols.

Constants

PAIRS

The matching pairs of quotes that can be used with % literals.

Public Class Methods

locked?(node, quote) click to toggle source

If there is some part of this string that matches an escape sequence or that contains the interpolation pattern (“#{”), then we are locked into whichever quote the user chose. (If they chose single quotes, then double quoting would activate the escape sequence, and if they chose double quotes, then single quotes would deactivate it.)

# File lib/syntax_tree/node.rb, line 4624
def self.locked?(node, quote)
  node.parts.any? do |part|
    !part.is_a?(TStringContent) || part.value.match?(/\\|#[@${]|#{quote}/)
  end
end
matching(quote) click to toggle source

Find the matching closing quote for the given opening quote.

# File lib/syntax_tree/node.rb, line 4631
def self.matching(quote)
  PAIRS.fetch(quote) { quote }
end
normalize(content, enclosing) click to toggle source

Escape and unescape single and double quotes as needed to be able to enclose content with enclosing.

# File lib/syntax_tree/node.rb, line 4637
def self.normalize(content, enclosing)
  return content if enclosing != "\"" && enclosing != "'"

  content.gsub(/\\([\s\S])|(['"])/) do
    _match, escaped, quote = Regexp.last_match.to_a

    if quote == enclosing
      "\\#{quote}"
    elsif quote
      quote
    else
      "\\#{escaped}"
    end
  end
end