Rename IfOrElsifExpr to IfExpr; remove child classes

This commit is contained in:
Nick Rolfe
2021-01-08 11:53:15 +00:00
parent 15785b4535
commit 6465c90a16
5 changed files with 39 additions and 63 deletions

View File

@@ -40,10 +40,23 @@ class ConditionalExpr extends Expr {
/**
* An `if` or `elsif` expression.
* ```rb
* if x
* a += 1
* elsif y
* a += 2
* end
* ```
*/
class IfOrElsifExpr extends ConditionalExpr {
override IfOrElsifExpr::Range range;
class IfExpr extends ConditionalExpr {
override IfExpr::Range range;
final override string getAPrimaryQlClass() { result = "IfExpr" }
final override string toString() { if isElsif() then result = "elsif ..." else result = "if ..." }
/** Holds if this is an `elsif` expression. */
final predicate isElsif() { this instanceof @elsif }
/** Gets the 'then' branch of this `if`/`elsif` expression. */
final ExprSequence getThen() { result = range.getThen() }
@@ -82,40 +95,6 @@ class IfOrElsifExpr extends ConditionalExpr {
final Expr getElse() { result = range.getElse() }
}
/**
* An `if` expression.
* ```rb
* if x
* y += 1
* end
* ```
*/
class IfExpr extends IfOrElsifExpr, @if {
final override IfExpr::Range range;
final override string getAPrimaryQlClass() { result = "IfExpr" }
final override string toString() { result = "if ..." }
}
/**
* An `elsif` expression.
* ```rb
* if x
* a += 1
* elsif y
* a += 2
* end
* ```
*/
class ElsifExpr extends IfOrElsifExpr, @elsif {
final override ElsifExpr::Range range;
final override string getAPrimaryQlClass() { result = "ElsifExpr" }
final override string toString() { result = "elsif ..." }
}
/**
* An `unless` expression.
* ```rb

View File

@@ -15,16 +15,14 @@ module ConditionalExpr {
}
}
module IfOrElsifExpr {
module IfExpr {
abstract class Range extends ConditionalExpr::Range {
abstract Expr getThen();
abstract ExprSequence getThen();
abstract Expr getElse();
}
}
module IfExpr {
class Range extends IfOrElsifExpr::Range, @if {
private class IfRange extends IfExpr::Range, @if {
final override Generated::If generated;
final override Expr getCondition() { result = generated.getCondition() }
@@ -39,10 +37,8 @@ module IfExpr {
cond = false and result = getElse()
}
}
}
module ElsifExpr {
class Range extends IfOrElsifExpr::Range, @elsif {
private class ElsifRange extends IfExpr::Range, @elsif {
final override Generated::Elsif generated;
final override Expr getCondition() { result = generated.getCondition() }

View File

@@ -4,13 +4,13 @@ conditionalExprs
| conditionals.rb:15:1:19:3 | if ... | IfExpr | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:17:1:18:5 | ...; ... | false |
| conditionals.rb:22:1:30:3 | if ... | IfExpr | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:22:11:23:5 | ...; ... | true |
| conditionals.rb:22:1:30:3 | if ... | IfExpr | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:24:1:29:5 | elsif ... | false |
| conditionals.rb:24:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | ...; ... | true |
| conditionals.rb:24:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:26:1:29:5 | elsif ... | false |
| conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | ...; ... | true |
| conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:28:1:29:5 | ...; ... | false |
| conditionals.rb:24:1:29:5 | elsif ... | IfExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | ...; ... | true |
| conditionals.rb:24:1:29:5 | elsif ... | IfExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:26:1:29:5 | elsif ... | false |
| conditionals.rb:26:1:29:5 | elsif ... | IfExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | ...; ... | true |
| conditionals.rb:26:1:29:5 | elsif ... | IfExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:28:1:29:5 | ...; ... | false |
| conditionals.rb:33:1:37:3 | if ... | IfExpr | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:33:10:34:5 | ...; ... | true |
| conditionals.rb:33:1:37:3 | if ... | IfExpr | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:35:1:36:5 | elsif ... | false |
| conditionals.rb:35:1:36:5 | elsif ... | ElsifExpr | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | ...; ... | true |
| conditionals.rb:35:1:36:5 | elsif ... | IfExpr | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | ...; ... | true |
| conditionals.rb:40:1:42:3 | unless ... | UnlessExpr | conditionals.rb:40:8:40:12 | ... > ... | conditionals.rb:40:14:41:5 | ...; ... | false |
| conditionals.rb:45:1:49:3 | unless ... | UnlessExpr | conditionals.rb:45:8:45:13 | ... == ... | conditionals.rb:45:14:46:5 | ...; ... | false |
| conditionals.rb:45:1:49:3 | unless ... | UnlessExpr | conditionals.rb:45:8:45:13 | ... == ... | conditionals.rb:47:1:48:5 | ...; ... | true |
@@ -18,14 +18,14 @@ conditionalExprs
| conditionals.rb:55:1:55:18 | ... unless ... | UnlessModifierExpr | conditionals.rb:55:14:55:18 | ... < ... | conditionals.rb:55:1:55:5 | ... = ... | false |
| conditionals.rb:58:5:58:25 | ... ? ... : ... | TernaryIfExpr | conditionals.rb:58:5:58:9 | ... > ... | conditionals.rb:58:13:58:17 | ... + ... | true |
| conditionals.rb:58:5:58:25 | ... ? ... : ... | TernaryIfExpr | conditionals.rb:58:5:58:9 | ... > ... | conditionals.rb:58:21:58:25 | ... - ... | false |
ifOrElsifExprs
| conditionals.rb:10:1:12:3 | if ... | IfExpr | conditionals.rb:10:4:10:8 | ... > ... | conditionals.rb:10:10:11:5 | ...; ... | (none) |
| conditionals.rb:15:1:19:3 | if ... | IfExpr | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:15:10:16:5 | ...; ... | ...; ... |
| conditionals.rb:22:1:30:3 | if ... | IfExpr | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:22:11:23:5 | ...; ... | elsif ... |
| conditionals.rb:24:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | ...; ... | elsif ... |
| conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | ...; ... | ...; ... |
| conditionals.rb:33:1:37:3 | if ... | IfExpr | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:33:10:34:5 | ...; ... | elsif ... |
| conditionals.rb:35:1:36:5 | elsif ... | ElsifExpr | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | ...; ... | (none) |
ifExprs
| conditionals.rb:10:1:12:3 | if ... | IfExpr | conditionals.rb:10:4:10:8 | ... > ... | conditionals.rb:10:10:11:5 | ...; ... | (none) | false |
| conditionals.rb:15:1:19:3 | if ... | IfExpr | conditionals.rb:15:4:15:9 | ... == ... | conditionals.rb:15:10:16:5 | ...; ... | ...; ... | false |
| conditionals.rb:22:1:30:3 | if ... | IfExpr | conditionals.rb:22:4:22:9 | ... == ... | conditionals.rb:22:11:23:5 | ...; ... | elsif ... | false |
| conditionals.rb:24:1:29:5 | elsif ... | IfExpr | conditionals.rb:24:7:24:12 | ... == ... | conditionals.rb:24:14:25:5 | ...; ... | elsif ... | true |
| conditionals.rb:26:1:29:5 | elsif ... | IfExpr | conditionals.rb:26:7:26:12 | ... == ... | conditionals.rb:26:14:27:5 | ...; ... | ...; ... | true |
| conditionals.rb:33:1:37:3 | if ... | IfExpr | conditionals.rb:33:4:33:9 | ... == ... | conditionals.rb:33:10:34:5 | ...; ... | elsif ... | false |
| conditionals.rb:35:1:36:5 | elsif ... | IfExpr | conditionals.rb:35:7:35:12 | ... == ... | conditionals.rb:35:13:36:5 | ...; ... | (none) | true |
unlessExprs
| conditionals.rb:40:1:42:3 | unless ... | UnlessExpr | conditionals.rb:40:8:40:12 | ... > ... | conditionals.rb:40:14:41:5 | ...; ... | (none) |
| conditionals.rb:45:1:49:3 | unless ... | UnlessExpr | conditionals.rb:45:8:45:13 | ... == ... | conditionals.rb:45:14:46:5 | ...; ... | ...; ... |

View File

@@ -8,13 +8,14 @@ query predicate conditionalExprs(
branch = e.getBranch(branchCond)
}
query predicate ifOrElsifExprs(
IfOrElsifExpr e, string pClass, Expr cond, ExprSequence thenExpr, string elseStr
query predicate ifExprs(
IfExpr e, string pClass, Expr cond, ExprSequence thenExpr, string elseStr, boolean isElsif
) {
pClass = e.getAPrimaryQlClass() and
cond = e.getCondition() and
thenExpr = e.getThen() and
if exists(e.getElse()) then elseStr = e.getElse().toString() else elseStr = "(none)"
(if exists(e.getElse()) then elseStr = e.getElse().toString() else elseStr = "(none)") and
if e.isElsif() then isElsif = true else isElsif = false
}
query predicate unlessExprs(

View File

@@ -3,10 +3,10 @@
| conditionals.rb:10:1:12:3 | if ... | IfExpr |
| conditionals.rb:15:1:19:3 | if ... | IfExpr |
| conditionals.rb:22:1:30:3 | if ... | IfExpr |
| conditionals.rb:24:1:29:5 | elsif ... | ElsifExpr |
| conditionals.rb:26:1:29:5 | elsif ... | ElsifExpr |
| conditionals.rb:24:1:29:5 | elsif ... | IfExpr |
| conditionals.rb:26:1:29:5 | elsif ... | IfExpr |
| conditionals.rb:33:1:37:3 | if ... | IfExpr |
| conditionals.rb:35:1:36:5 | elsif ... | ElsifExpr |
| conditionals.rb:35:1:36:5 | elsif ... | IfExpr |
| conditionals.rb:40:1:42:3 | unless ... | UnlessExpr |
| conditionals.rb:45:1:49:3 | unless ... | UnlessExpr |
| conditionals.rb:52:1:52:14 | ... if ... | IfModifierExpr |