diff --git a/docs/release_notes.md b/docs/release_notes.md index 0935d14..4ad179c 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -4,7 +4,7 @@ * Added `find()` to `ISwc4jAst` * Added `getMinusCount()` to `Swc4jAstNumber` -* Added `getBangCount()`, `getLogicalOperatorCount()` to `Swc4jAstBinExpr` +* Added `getBangCount()`, `getLogicalOperatorCount()`, `getParentBinExpr()` to `Swc4jAstBinExpr` * Added `getOppositeOperator()`, `isLogicalOperator()`, `isLogicalCompareOperator()`, `isLogicalConditionOperator()` to `Swc4jAstBinaryOp` ## 1.2.0 diff --git a/src/main/java/com/caoccao/javet/swc4j/ast/expr/Swc4jAstBinExpr.java b/src/main/java/com/caoccao/javet/swc4j/ast/expr/Swc4jAstBinExpr.java index 2d37204..0e7ad81 100644 --- a/src/main/java/com/caoccao/javet/swc4j/ast/expr/Swc4jAstBinExpr.java +++ b/src/main/java/com/caoccao/javet/swc4j/ast/expr/Swc4jAstBinExpr.java @@ -291,6 +291,21 @@ public Swc4jAstBinaryOp getOp() { return op; } + public Swc4jAstBinExpr getParentBinExpr() { + return getParentBinExpr(getParent()); + } + + protected Swc4jAstBinExpr getParentBinExpr(ISwc4jAst ast) { + switch (ast.getType()) { + case BinExpr: + return ast.as(Swc4jAstBinExpr.class); + case ParenExpr: + return getParentBinExpr(ast.getParent()); + default: + return null; + } + } + @Jni2RustMethod public ISwc4jAstExpr getRight() { return right; diff --git a/src/test/java/com/caoccao/javet/swc4j/ast/expr/TestSwc4jAstBinExpr.java b/src/test/java/com/caoccao/javet/swc4j/ast/expr/TestSwc4jAstBinExpr.java index 1cf13b9..af13f3c 100644 --- a/src/test/java/com/caoccao/javet/swc4j/ast/expr/TestSwc4jAstBinExpr.java +++ b/src/test/java/com/caoccao/javet/swc4j/ast/expr/TestSwc4jAstBinExpr.java @@ -34,8 +34,7 @@ import java.util.Map; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; +import static org.junit.jupiter.api.Assertions.*; public class TestSwc4jAstBinExpr extends BaseTestSuiteSwc4jAst { @Test @@ -135,6 +134,16 @@ public void testGetLogicalOperatorCount() throws Swc4jCoreException { } } + @Test + public void testGetParentBinExpr() throws Swc4jCoreException { + Swc4jParseOutput output = swc4j.parse("a==b&&(c==d)", tsScriptParseOptions); + List nodes = output.getProgram().find(Swc4jAstBinExpr.class); + assertEquals(3, nodes.size()); + assertNull(nodes.get(0).getParentBinExpr()); + assertEquals(nodes.get(0), nodes.get(1).getParentBinExpr()); + assertEquals(nodes.get(0), nodes.get(2).getParentBinExpr()); + } + @Test public void testOpWithSpace() { Stream.of(Swc4jAstBinaryOp.values())