From a08cdd940bf99cadc05920232c1a928ef1a910d5 Mon Sep 17 00:00:00 2001 From: Sam Cao Date: Wed, 20 Nov 2024 11:26:55 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Add=20getParentBinExpr()=20?= =?UTF-8?q?to=20Swc4jAstBinExpr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/release_notes.md | 2 +- .../javet/swc4j/ast/expr/Swc4jAstBinExpr.java | 15 +++++++++++++++ .../javet/swc4j/ast/expr/TestSwc4jAstBinExpr.java | 13 +++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) 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())