Module: SyntaxTree::Quotes
- Defined in:
- lib/syntax_tree.rb
Overview
Responsible for providing information about quotes to be used for strings and dynamic symbols.
Constant Summary collapse
- PAIRS =
The matching pairs of quotes that can be used with % literals.
{ "(" => ")", "[" => "]", "{" => "}", "<" => ">" }.freeze
Class Method Summary collapse
-
.locked?(node) ⇒ Boolean
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.).
-
.matching(quote) ⇒ Object
Find the matching closing quote for the given opening quote.
-
.normalize(content, enclosing) ⇒ Object
Escape and unescape single and double quotes as needed to be able to enclose
contentwithenclosing.
Class Method Details
.locked?(node) ⇒ Boolean
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.)
5067 5068 5069 5070 5071 |
# File 'lib/syntax_tree.rb', line 5067 def self.locked?(node) node.parts.any? do |part| part.is_a?(TStringContent) && part.value.match?(/#[@${]|[\\]/) end end |
.matching(quote) ⇒ Object
Find the matching closing quote for the given opening quote.
5074 5075 5076 |
# File 'lib/syntax_tree.rb', line 5074 def self.matching(quote) PAIRS.fetch(quote) { quote } end |
.normalize(content, enclosing) ⇒ Object
Escape and unescape single and double quotes as needed to be able to enclose content with enclosing.
5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 |
# File 'lib/syntax_tree.rb', line 5080 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 |