From 44699c44dedefb7c7b1e344ea662f867017eeaea Mon Sep 17 00:00:00 2001 From: brandonspark Date: Tue, 19 Dec 2023 15:35:07 -0800 Subject: [PATCH 1/2] chore: allow named ellipsis as java param --- .../src/semgrep-java/grammar.js | 5 +++- .../src/semgrep-java/test/corpus/semgrep.txt | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lang/semgrep-grammars/src/semgrep-java/grammar.js b/lang/semgrep-grammars/src/semgrep-java/grammar.js index c5796a34..9e012d43 100644 --- a/lang/semgrep-grammars/src/semgrep-java/grammar.js +++ b/lang/semgrep-grammars/src/semgrep-java/grammar.js @@ -45,6 +45,8 @@ module.exports = grammar(base_grammar, { ), semgrep_ellipsis: $ => '...', + semgrep_named_ellipsis: $ => /\$\.\.\.[A-Z_][A-Z_0-9]*/, + primary_expression: ($, previous) => choice( previous, @@ -59,6 +61,7 @@ module.exports = grammar(base_grammar, { formal_parameter: ($, previous) => choice( previous, $.semgrep_ellipsis, + $.semgrep_named_ellipsis ), _class_body_declaration: ($, previous) => choice( @@ -70,7 +73,7 @@ module.exports = grammar(base_grammar, { $.partial_method, ), - // partial of method_declaration + // partial of method_declaration partial_method: $ => seq( optional($.modifiers), $._method_header diff --git a/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt b/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt index ba7825a1..8fca709f 100644 --- a/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt +++ b/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt @@ -183,3 +183,26 @@ class $X { (variable_declarator (identifier) (identifier)))))))) + +================================================================================ +Metavariable ellipsis parameter +================================================================================ + +class $X { + void $ASDF($...PARAMS) { + } +} + +-------------------------------------------------------------------------------- + +(program + (class_declaration + (identifier) + (class_body + (method_declaration + (void_type) + (identifier) + (formal_parameters + (formal_parameter + (semgrep_named_ellipsis))) + (block))))) From b43d5527a5dc9e89553798c14e958e3d5e4c8397 Mon Sep 17 00:00:00 2001 From: brandonspark Date: Tue, 19 Dec 2023 15:38:49 -0800 Subject: [PATCH 2/2] chore: allow named ellipsis for stmts and exp, add tests --- .../src/semgrep-java/grammar.js | 5 +- .../src/semgrep-java/test/corpus/semgrep.txt | 90 +++++++++++++------ 2 files changed, 67 insertions(+), 28 deletions(-) diff --git a/lang/semgrep-grammars/src/semgrep-java/grammar.js b/lang/semgrep-grammars/src/semgrep-java/grammar.js index 9e012d43..397f3475 100644 --- a/lang/semgrep-grammars/src/semgrep-java/grammar.js +++ b/lang/semgrep-grammars/src/semgrep-java/grammar.js @@ -51,11 +51,13 @@ module.exports = grammar(base_grammar, { primary_expression: ($, previous) => choice( previous, $.semgrep_ellipsis, + $.semgrep_named_ellipsis ), statement: ($, previous) => choice( previous, $.semgrep_ellipsis, + $.semgrep_named_ellipsis ), formal_parameter: ($, previous) => choice( @@ -66,7 +68,8 @@ module.exports = grammar(base_grammar, { _class_body_declaration: ($, previous) => choice( previous, - $.semgrep_ellipsis + $.semgrep_ellipsis, + $.semgrep_named_ellipsis ), partials: $ => choice( diff --git a/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt b/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt index 8fca709f..493bfff3 100644 --- a/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt +++ b/lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt @@ -19,16 +19,16 @@ bar(); -------------------------------------------------------------------------------- - (program - (expression_statement - (method_invocation - (identifier) - (argument_list))) - (semgrep_ellipsis) - (expression_statement - (method_invocation - (identifier) - (argument_list)))) +(program + (expression_statement + (method_invocation + (identifier) + (argument_list))) + (semgrep_ellipsis) + (expression_statement + (method_invocation + (identifier) + (argument_list)))) ================================================================================ Top level public constructor @@ -72,15 +72,16 @@ public record $R(...) { } -------------------------------------------------------------------------------- + (program - (record_declaration - (modifiers) - (identifier) - (formal_parameters - (formal_parameter - (semgrep_ellipsis))) - (class_body - (semgrep_ellipsis)))) + (record_declaration + (modifiers) + (identifier) + (formal_parameters + (formal_parameter + (semgrep_ellipsis))) + (class_body + (semgrep_ellipsis)))) ================================================================================ Method header @@ -91,14 +92,14 @@ public int foo(...) -------------------------------------------------------------------------------- (program - (partials - (partial_method - (modifiers) - (integral_type) - (identifier) - (formal_parameters - (formal_parameter - (semgrep_ellipsis)))))) + (partials + (partial_method + (modifiers) + (integral_type) + (identifier) + (formal_parameters + (formal_parameter + (semgrep_ellipsis)))))) ================================================================================ Constructor body ellipsis @@ -185,7 +186,7 @@ class $X { (identifier)))))))) ================================================================================ -Metavariable ellipsis parameter +Named ellipsis parameter ================================================================================ class $X { @@ -206,3 +207,38 @@ class $X { (formal_parameter (semgrep_named_ellipsis))) (block))))) + +================================================================================ +Named ellipsis statements +================================================================================ + +foo(); +$...STMTS +bar(); + +-------------------------------------------------------------------------------- + +(program + (expression_statement + (method_invocation + (identifier) + (argument_list))) + (semgrep_named_ellipsis) + (expression_statement + (method_invocation + (identifier) + (argument_list)))) + +================================================================================ +Named ellipsis expression +================================================================================ + +1 + $...NAMED; + +-------------------------------------------------------------------------------- + +(program + (expression_statement + (binary_expression + (decimal_integer_literal) + (semgrep_named_ellipsis))))