Class: SyntaxTree::BodyStmt
Overview
bodystmt can’t actually determine its bounds appropriately because it doesn’t necessarily know where it started. So the parent node needs to report back down into this one where it goes.
Instance Attribute Summary collapse
-
#comments ⇒ Object
readonly
- Array[ Comment | EmbDoc ]
-
the comments attached to this node.
-
#else_clause ⇒ Object
readonly
- nil | Statements
-
the optional set of statements inside the else clause.
-
#else_keyword ⇒ Object
readonly
- nil | Kw
-
the optional else keyword.
-
#ensure_clause ⇒ Object
readonly
- nil | Ensure
-
the optional ensure clause.
-
#rescue_clause ⇒ Object
readonly
- nil | Rescue
-
the optional rescue chain attached to the begin clause.
-
#statements ⇒ Object
readonly
- Statements
-
the list of statements inside the begin clause.
Attributes inherited from Node
Instance Method Summary collapse
- #===(other) ⇒ Object
- #accept(visitor) ⇒ Object
- #bind(parser, start_char, start_column, end_char, end_column) ⇒ Object
- #child_nodes ⇒ Object (also: #deconstruct)
- #copy(statements: nil, rescue_clause: nil, else_keyword: nil, else_clause: nil, ensure_clause: nil, location: nil) ⇒ Object
- #deconstruct_keys(_keys) ⇒ Object
- #empty? ⇒ Boolean
- #format(q) ⇒ Object
-
#initialize(statements:, rescue_clause:, else_keyword:, else_clause:, ensure_clause:, location:) ⇒ BodyStmt
constructor
A new instance of BodyStmt.
Methods inherited from Node
#construct_keys, #end_char, #pretty_print, #start_char, #to_json, #to_mermaid
Constructor Details
#initialize(statements:, rescue_clause:, else_keyword:, else_clause:, ensure_clause:, location:) ⇒ BodyStmt
Returns a new instance of BodyStmt.
2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 |
# File 'lib/syntax_tree/node.rb', line 2261 def initialize( statements:, rescue_clause:, else_keyword:, else_clause:, ensure_clause:, location: ) @statements = statements @rescue_clause = rescue_clause @else_keyword = else_keyword @else_clause = else_clause @ensure_clause = ensure_clause @location = location @comments = [] end |
Instance Attribute Details
#comments ⇒ Object (readonly)
- Array[ Comment | EmbDoc ]
-
the comments attached to this node
2259 2260 2261 |
# File 'lib/syntax_tree/node.rb', line 2259 def comments @comments end |
#else_clause ⇒ Object (readonly)
- nil | Statements
-
the optional set of statements inside the else clause
2253 2254 2255 |
# File 'lib/syntax_tree/node.rb', line 2253 def else_clause @else_clause end |
#else_keyword ⇒ Object (readonly)
- nil | Kw
-
the optional else keyword
2250 2251 2252 |
# File 'lib/syntax_tree/node.rb', line 2250 def else_keyword @else_keyword end |
#ensure_clause ⇒ Object (readonly)
- nil | Ensure
-
the optional ensure clause
2256 2257 2258 |
# File 'lib/syntax_tree/node.rb', line 2256 def ensure_clause @ensure_clause end |
#rescue_clause ⇒ Object (readonly)
- nil | Rescue
-
the optional rescue chain attached to the begin clause
2247 2248 2249 |
# File 'lib/syntax_tree/node.rb', line 2247 def rescue_clause @rescue_clause end |
#statements ⇒ Object (readonly)
- Statements
-
the list of statements inside the begin clause
2244 2245 2246 |
# File 'lib/syntax_tree/node.rb', line 2244 def statements @statements end |
Instance Method Details
#===(other) ⇒ Object
2389 2390 2391 2392 2393 2394 2395 |
# File 'lib/syntax_tree/node.rb', line 2389 def ===(other) other.is_a?(BodyStmt) && statements === other.statements && rescue_clause === other.rescue_clause && else_keyword === other.else_keyword && else_clause === other.else_clause && ensure_clause === other.ensure_clause end |
#accept(visitor) ⇒ Object
2313 2314 2315 |
# File 'lib/syntax_tree/node.rb', line 2313 def accept(visitor) visitor.visit_bodystmt(self) end |
#bind(parser, start_char, start_column, end_char, end_column) ⇒ Object
2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 |
# File 'lib/syntax_tree/node.rb', line 2278 def bind(parser, start_char, start_column, end_char, end_column) @location = Location.new( start_line: location.start_line, start_char: start_char, start_column: start_column, end_line: location.end_line, end_char: end_char, end_column: end_column ) # Here we're going to determine the bounds for the statements consequent = rescue_clause || else_clause || ensure_clause statements.bind( parser, start_char, start_column, consequent ? consequent.location.start_char : end_char, consequent ? consequent.location.start_column : end_column ) # Next we're going to determine the rescue clause if there is one if rescue_clause consequent = else_clause || ensure_clause rescue_clause.bind_end( consequent ? consequent.location.start_char : end_char, consequent ? consequent.location.start_column : end_column ) end end |
#child_nodes ⇒ Object Also known as: deconstruct
2317 2318 2319 |
# File 'lib/syntax_tree/node.rb', line 2317 def child_nodes [statements, rescue_clause, else_keyword, else_clause, ensure_clause] end |
#copy(statements: nil, rescue_clause: nil, else_keyword: nil, else_clause: nil, ensure_clause: nil, location: nil) ⇒ Object
2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 |
# File 'lib/syntax_tree/node.rb', line 2321 def copy( statements: nil, rescue_clause: nil, else_keyword: nil, else_clause: nil, ensure_clause: nil, location: nil ) node = BodyStmt.new( statements: statements || self.statements, rescue_clause: rescue_clause || self.rescue_clause, else_keyword: else_keyword || self.else_keyword, else_clause: else_clause || self.else_clause, ensure_clause: ensure_clause || self.ensure_clause, location: location || self.location ) node.comments.concat(comments.map(&:copy)) node end |
#deconstruct_keys(_keys) ⇒ Object
2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 |
# File 'lib/syntax_tree/node.rb', line 2345 def deconstruct_keys(_keys) { statements: statements, rescue_clause: rescue_clause, else_keyword: else_keyword, else_clause: else_clause, ensure_clause: ensure_clause, location: location, comments: comments } end |
#empty? ⇒ Boolean
2309 2310 2311 |
# File 'lib/syntax_tree/node.rb', line 2309 def empty? statements.empty? && !rescue_clause && !else_clause && !ensure_clause end |
#format(q) ⇒ Object
2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 |
# File 'lib/syntax_tree/node.rb', line 2357 def format(q) q.group do q.format(statements) unless statements.empty? if rescue_clause q.nest(-2) do q.breakable_force q.format(rescue_clause) end end if else_clause q.nest(-2) do q.breakable_force q.format(else_keyword) end unless else_clause.empty? q.breakable_force q.format(else_clause) end end if ensure_clause q.nest(-2) do q.breakable_force q.format(ensure_clause) end end end end |