Class: SyntaxTree::RegexpLiteral
Overview
RegexpLiteral represents a regular expression literal.
/.+/
Instance Attribute Summary collapse
-
#beginning ⇒ Object
readonly
- String
-
the beginning of the regular expression literal.
-
#comments ⇒ Object
readonly
- Array[ Comment | EmbDoc ]
-
the comments attached to this node.
-
#ending ⇒ Object
readonly
- String
-
the ending of the regular expression literal.
-
#parts ⇒ Object
readonly
- Array[ StringEmbExpr | StringDVar | TStringContent ]
-
the parts of the regular expression literal.
Attributes inherited from Node
Instance Method Summary collapse
- #===(other) ⇒ Object
- #accept(visitor) ⇒ Object
- #child_nodes ⇒ Object (also: #deconstruct)
- #copy(beginning: nil, ending: nil, parts: nil, location: nil) ⇒ Object
- #deconstruct_keys(_keys) ⇒ Object
- #format(q) ⇒ Object
-
#initialize(beginning:, ending:, parts:, location:) ⇒ RegexpLiteral
constructor
A new instance of RegexpLiteral.
- #options ⇒ Object
Methods inherited from Node
#construct_keys, #end_char, #pretty_print, #start_char, #to_json, #to_mermaid
Constructor Details
#initialize(beginning:, ending:, parts:, location:) ⇒ RegexpLiteral
Returns a new instance of RegexpLiteral.
9166 9167 9168 9169 9170 9171 9172 |
# File 'lib/syntax_tree/node.rb', line 9166 def initialize(beginning:, ending:, parts:, location:) @beginning = beginning @ending = ending @parts = parts @location = location @comments = [] end |
Instance Attribute Details
#beginning ⇒ Object (readonly)
- String
-
the beginning of the regular expression literal
9154 9155 9156 |
# File 'lib/syntax_tree/node.rb', line 9154 def beginning @beginning end |
#comments ⇒ Object (readonly)
- Array[ Comment | EmbDoc ]
-
the comments attached to this node
9164 9165 9166 |
# File 'lib/syntax_tree/node.rb', line 9164 def comments @comments end |
#ending ⇒ Object (readonly)
- String
-
the ending of the regular expression literal
9157 9158 9159 |
# File 'lib/syntax_tree/node.rb', line 9157 def ending @ending end |
#parts ⇒ Object (readonly)
- Array[ StringEmbExpr | StringDVar | TStringContent ]
-
the parts of the
regular expression literal
9161 9162 9163 |
# File 'lib/syntax_tree/node.rb', line 9161 def parts @parts end |
Instance Method Details
#===(other) ⇒ Object
9248 9249 9250 9251 9252 |
# File 'lib/syntax_tree/node.rb', line 9248 def ===(other) other.is_a?(RegexpLiteral) && beginning === other.beginning && ending === other.ending && === other. && ArrayMatch.call(parts, other.parts) end |
#accept(visitor) ⇒ Object
9174 9175 9176 |
# File 'lib/syntax_tree/node.rb', line 9174 def accept(visitor) visitor.visit_regexp_literal(self) end |
#child_nodes ⇒ Object Also known as: deconstruct
9178 9179 9180 |
# File 'lib/syntax_tree/node.rb', line 9178 def child_nodes parts end |
#copy(beginning: nil, ending: nil, parts: nil, location: nil) ⇒ Object
9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 |
# File 'lib/syntax_tree/node.rb', line 9182 def copy(beginning: nil, ending: nil, parts: nil, location: nil) node = RegexpLiteral.new( beginning: beginning || self.beginning, ending: ending || self.ending, parts: parts || self.parts, location: location || self.location ) node.comments.concat(comments.map(&:copy)) node end |
#deconstruct_keys(_keys) ⇒ Object
9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 |
# File 'lib/syntax_tree/node.rb', line 9197 def deconstruct_keys(_keys) { beginning: beginning, ending: ending, options: , parts: parts, location: location, comments: comments } end |
#format(q) ⇒ Object
9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 |
# File 'lib/syntax_tree/node.rb', line 9208 def format(q) braces = ambiguous?(q) || include?(%r{/}) if braces && include?(/[{}]/) q.group do q.text(beginning) q.format_each(parts) q.text(ending) end elsif braces q.group do q.text("%r{") if beginning == "/" # If we're changing from a forward slash to a %r{, then we can # replace any escaped forward slashes with regular forward slashes. parts.each do |part| if part.is_a?(TStringContent) q.text(part.value.gsub("\\/", "/")) else q.format(part) end end else q.format_each(parts) end q.text("}") q.text() end else q.group do q.text("/") q.format_each(parts) q.text("/") q.text() end end end |
#options ⇒ Object
9254 9255 9256 |
# File 'lib/syntax_tree/node.rb', line 9254 def ending[1..] end |