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(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, #pretty_print, #to_json
Constructor Details
#initialize(statements:, rescue_clause:, else_keyword:, else_clause:, ensure_clause:, location:) ⇒ BodyStmt
Returns a new instance of BodyStmt.
2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 |
# File 'lib/syntax_tree/node.rb', line 2228 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
2226 2227 2228 |
# File 'lib/syntax_tree/node.rb', line 2226 def comments @comments end |
#else_clause ⇒ Object (readonly)
- nil | Statements
-
the optional set of statements inside the else clause
2220 2221 2222 |
# File 'lib/syntax_tree/node.rb', line 2220 def else_clause @else_clause end |
#else_keyword ⇒ Object (readonly)
- nil | Kw
-
the optional else keyword
2217 2218 2219 |
# File 'lib/syntax_tree/node.rb', line 2217 def else_keyword @else_keyword end |
#ensure_clause ⇒ Object (readonly)
- nil | Ensure
-
the optional ensure clause
2223 2224 2225 |
# File 'lib/syntax_tree/node.rb', line 2223 def ensure_clause @ensure_clause end |
#rescue_clause ⇒ Object (readonly)
- nil | Rescue
-
the optional rescue chain attached to the begin clause
2214 2215 2216 |
# File 'lib/syntax_tree/node.rb', line 2214 def rescue_clause @rescue_clause end |
#statements ⇒ Object (readonly)
- Statements
-
the list of statements inside the begin clause
2211 2212 2213 |
# File 'lib/syntax_tree/node.rb', line 2211 def statements @statements end |
Instance Method Details
#===(other) ⇒ Object
2355 2356 2357 2358 2359 2360 2361 |
# File 'lib/syntax_tree/node.rb', line 2355 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
2279 2280 2281 |
# File 'lib/syntax_tree/node.rb', line 2279 def accept(visitor) visitor.visit_bodystmt(self) end |
#bind(start_char, start_column, end_char, end_column) ⇒ Object
2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 |
# File 'lib/syntax_tree/node.rb', line 2245 def bind(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( 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
2283 2284 2285 |
# File 'lib/syntax_tree/node.rb', line 2283 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
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 2287 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
2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 |
# File 'lib/syntax_tree/node.rb', line 2311 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
2275 2276 2277 |
# File 'lib/syntax_tree/node.rb', line 2275 def empty? statements.empty? && !rescue_clause && !else_clause && !ensure_clause end |
#format(q) ⇒ Object
2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 |
# File 'lib/syntax_tree/node.rb', line 2323 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 |