AST: rescue modifier

This commit is contained in:
Arthur Baars
2021-02-15 12:35:41 +01:00
parent 392af7fe76
commit ddea74265d
4 changed files with 44 additions and 4 deletions

View File

@@ -229,6 +229,8 @@ class Pair extends Expr, @pair {
class Rescue extends Expr, @rescue {
final override Rescue::Range range;
final override string getAPrimaryQlClass() { result = "Rescue" }
/**
* Gets the `n`th exception to match, if any. For example `FirstError` or `SecondError` in:
* ```rb
@@ -271,3 +273,31 @@ class Rescue extends Expr, @rescue {
*/
final StmtSequence getBody() { result = range.getBody() }
}
/**
* An expression with a `rescue` modifier. For example:
* ```rb
* contents = read_file rescue ""
* ```
*/
class RescueExpr extends Expr, @rescue_modifier {
final override RescueExpr::Range range;
final override string getAPrimaryQlClass() { result = "RescueExpr" }
/**
* Gets the body of this `RescueExpr`.
* ```rb
* body rescue handler
* ```
*/
final Stmt getBody() { result = range.getBody() }
/**
* Gets the exception handler of this `RescueExpr`.
* ```rb
* body rescue handler
* ```
*/
final Stmt getHandler() { result = range.getHandler() }
}

View File

@@ -69,8 +69,6 @@ module AstNode {
or
this instanceof Generated::Rational
or
this instanceof Generated::RescueModifier
or
this instanceof Generated::Subshell
or
this instanceof Generated::Undef

View File

@@ -290,6 +290,18 @@ module Rescue {
}
}
module RescueExpr {
class Range extends Expr::Range, @rescue_modifier {
final override Generated::RescueModifier generated;
final Stmt getBody() { result = generated.getBody() }
final Stmt getHandler() { result = generated.getHandler() }
final override string toString() { result = "... rescue ..." }
}
}
module Pair {
class Range extends Expr::Range, @pair {
final override Generated::Pair generated;

View File

@@ -1534,7 +1534,7 @@ cfg.rb:
#-----| -> Interpolation
# 130| ... = ...
#-----| -> RescueModifier
#-----| -> ... rescue ...
# 130| Constant
#-----| -> ... = ...
@@ -1542,7 +1542,7 @@ cfg.rb:
# 130| 5
#-----| -> Constant
# 133| RescueModifier
# 133| ... rescue ...
#-----| -> 1
# 133| ... / ...