This is an automated email from the ASF dual-hosted git repository.

colegreer pushed a commit to branch 3.7-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/3.7-dev by this push:
     new e9540e3514 [TINKERPOP-3236] Expand grammar argument types for coin and 
pagerank steps to numericArgument (#3331)
e9540e3514 is described below

commit e9540e35145672cecfe2062c0d6ac7edc23bd839
Author: Cole Greer <[email protected]>
AuthorDate: Mon Mar 23 16:55:53 2026 -0700

    [TINKERPOP-3236] Expand grammar argument types for coin and pagerank steps 
to numericArgument (#3331)
    
    Expanding the grammar to allow any numeric arguments in coin() and 
pagerank() to better match groovy and other language variants.
---
 CHANGELOG.asciidoc                                     |  1 +
 .../gremlin/language/grammar/ArgumentVisitor.java      | 10 +++++-----
 .../language/grammar/DefaultGremlinBaseVisitor.java    |  2 +-
 .../language/grammar/GenericLiteralVisitor.java        |  4 ++--
 .../language/grammar/TraversalMethodVisitor.java       |  4 ++--
 .../gremlin/language/grammar/ArgumentVisitorTest.java  |  2 +-
 gremlin-language/src/main/antlr4/Gremlin.g4            |  8 ++++----
 .../gremlin/test/features/filter/Coin.feature          | 18 +++++++++++++++++-
 8 files changed, 33 insertions(+), 16 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 26c33cbc84..f1ff7a13f8 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -30,6 +30,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 * Fixed bug in `SubgraphStrategy` where specifying `edges` and `vertices` 
filters that had `map`-type steps could generate an error.
 * Fixed bug in `ReservedKeysVerificationStrategy` where `AddPropertyStep` was 
not triggering proper validations.
 * Fixed bug in `mergeE` where `onCreate` validation of invalid static argument 
overrides did not trigger until traversal runtime.
+* Expand grammar argument types for `coin` and `pagerank` steps to 
`numericArgument` from `floatArgument`.
 * Added `closeSessionPostGraphOp` to the Gremlin Server settings to indicate 
that the `Session` should be closed on either a successful commit or rollback.
 * Added `SessionedChildClient` that borrows connections from a different 
`Client` for use with `Sessions`.
 * Added `reuseConnectionsForSessions` to Java GLV settings to decide whether 
to use `SessionedChildClient` for remote transactions.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
index a461896fa7..9b7212c638 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitor.java
@@ -66,8 +66,8 @@ public class ArgumentVisitor extends 
DefaultGremlinBaseVisitor<Object> {
     /**
      * Wrapper to visit function for float types.
      */
-    public Number parseNumber(final GremlinParser.FloatArgumentContext ctx) {
-        return (Number) visitFloatArgument(ctx);
+    public Number parseNumber(final GremlinParser.NumericArgumentContext ctx) {
+        return (Number) visitNumericArgument(ctx);
     }
 
     /**
@@ -240,9 +240,9 @@ public class ArgumentVisitor extends 
DefaultGremlinBaseVisitor<Object> {
     }
 
     @Override
-    public Object visitFloatArgument(final GremlinParser.FloatArgumentContext 
ctx) {
-        if (ctx.floatLiteral() != null) {
-            return antlr.genericVisitor.parseFloating(ctx.floatLiteral());
+    public Object visitNumericArgument(final 
GremlinParser.NumericArgumentContext ctx) {
+        if (ctx.numericLiteral() != null) {
+            return antlr.genericVisitor.parseNumeric(ctx.numericLiteral());
         } else {
             return visitVariable(ctx.variable());
         }
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
index c0432ddd83..3582444ab6 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
@@ -1462,7 +1462,7 @@ public class DefaultGremlinBaseVisitor<T> extends 
AbstractParseTreeVisitor<T> im
        /**
         * {@inheritDoc}
         */
-       @Override public T visitFloatArgument(final 
GremlinParser.FloatArgumentContext ctx) { notImplemented(ctx); return null; }
+       @Override public T visitNumericArgument(final 
GremlinParser.NumericArgumentContext ctx) { notImplemented(ctx); return null; }
        /**
         * {@inheritDoc}
         */
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
index d7f87f298a..a4d5a8b641 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GenericLiteralVisitor.java
@@ -63,8 +63,8 @@ public class GenericLiteralVisitor extends 
DefaultGremlinBaseVisitor<Object> {
     /**
      * Parse floating literal context and return a floating type number.
      */
-    public Number parseFloating(final GremlinParser.FloatLiteralContext 
floatLiteral) {
-        return (Number) visitFloatLiteral(floatLiteral);
+    public Number parseNumeric(final GremlinParser.NumericLiteralContext 
numericLiteral) {
+        return (Number) visitNumericLiteral(numericLiteral);
     }
 
     /**
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
index 6dcafe2e65..222af839e3 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
@@ -443,7 +443,7 @@ public class TraversalMethodVisitor extends 
TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_coin(final 
GremlinParser.TraversalMethod_coinContext ctx) {
-        return graphTraversal.coin(((Number) 
antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument())).doubleValue());
+        return graphTraversal.coin(((Number) 
antlr.argumentVisitor.visitNumericArgument(ctx.numericArgument())).doubleValue());
     }
 
     /**
@@ -1228,7 +1228,7 @@ public class TraversalMethodVisitor extends 
TraversalRootVisitor<GraphTraversal>
      */
     @Override
     public GraphTraversal visitTraversalMethod_pageRank_double(final 
GremlinParser.TraversalMethod_pageRank_doubleContext ctx) {
-        return graphTraversal.pageRank(((Number) 
antlr.argumentVisitor.visitFloatArgument(ctx.floatArgument())).doubleValue());
+        return graphTraversal.pageRank(((Number) 
antlr.argumentVisitor.visitNumericArgument(ctx.numericArgument())).doubleValue());
     }
 
     /**
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
index 8c2472eebc..4c64c1804d 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ArgumentVisitorTest.java
@@ -178,7 +178,7 @@ public class ArgumentVisitorTest {
             });
         } else if (clazz.equals(Float.class)) {
             assertParsing(() -> {
-                final GremlinParser.FloatArgumentContext ctx = 
parser.floatArgument();
+                final GremlinParser.NumericArgumentContext ctx = 
parser.numericArgument();
                 return antlrToLanguage.argumentVisitor.parseNumber(ctx);
             });
         } else if (clazz.equals(String.class)) {
diff --git a/gremlin-language/src/main/antlr4/Gremlin.g4 
b/gremlin-language/src/main/antlr4/Gremlin.g4
index 35a4b934e0..0b7a224790 100644
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@ -409,7 +409,7 @@ traversalMethod_coalesce
     ;
 
 traversalMethod_coin
-    : 'coin' LPAREN floatArgument RPAREN
+    : 'coin' LPAREN numericArgument RPAREN
     ;
 
 traversalMethod_combine
@@ -668,7 +668,7 @@ traversalMethod_outV
 
 traversalMethod_pageRank
     : 'pageRank' LPAREN RPAREN #traversalMethod_pageRank_Empty
-    | 'pageRank' LPAREN floatArgument RPAREN #traversalMethod_pageRank_double
+    | 'pageRank' LPAREN numericArgument RPAREN #traversalMethod_pageRank_double
     ;
 
 traversalMethod_path
@@ -1486,8 +1486,8 @@ integerArgument
     | variable
     ;
 
-floatArgument
-    : floatLiteral
+numericArgument
+    : numericLiteral
     | variable
     ;
 
diff --git 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
index 9bb65dc517..145b94a426 100644
--- 
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
+++ 
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/Coin.feature
@@ -18,7 +18,7 @@
 @StepClassFilter @StepCoin
 Feature: Step - coin()
 
-  Scenario: g_V_coinX1X
+  Scenario: g_V_coinX1_0X
     Given the modern graph
     And the traversal of
       """
@@ -34,6 +34,22 @@ Feature: Step - coin()
       | v[ripple] |
       | v[peter]  |
 
+  Scenario: g_V_coinX1X
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().coin(1)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[marko] |
+      | v[vadas] |
+      | v[lop] |
+      | v[josh] |
+      | v[ripple] |
+      | v[peter]  |
+
   Scenario: g_V_coinX0X
     Given the modern graph
     And the traversal of

Reply via email to