Skip to content

Commit

Permalink
Merge pull request #465 from semgrep/brandon/java-named-ellipsis-param
Browse files Browse the repository at this point in the history
chore: named ellipses in java
  • Loading branch information
brandonspark authored Jan 23, 2024
2 parents 40c10f7 + b43d552 commit 326025a
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 28 deletions.
10 changes: 8 additions & 2 deletions lang/semgrep-grammars/src/semgrep-java/grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,32 +45,38 @@ module.exports = grammar(base_grammar, {
),

semgrep_ellipsis: $ => '...',
semgrep_named_ellipsis: $ => /\$\.\.\.[A-Z_][A-Z_0-9]*/,


primary_expression: ($, previous) => choice(
previous,
$.semgrep_ellipsis,
$.semgrep_named_ellipsis
),

statement: ($, previous) => choice(
previous,
$.semgrep_ellipsis,
$.semgrep_named_ellipsis
),

formal_parameter: ($, previous) => choice(
previous,
$.semgrep_ellipsis,
$.semgrep_named_ellipsis
),

_class_body_declaration: ($, previous) => choice(
previous,
$.semgrep_ellipsis
$.semgrep_ellipsis,
$.semgrep_named_ellipsis
),

partials: $ => choice(
$.partial_method,
),

// partial of method_declaration
// partial of method_declaration
partial_method: $ => seq(
optional($.modifiers),
$._method_header
Expand Down
111 changes: 85 additions & 26 deletions lang/semgrep-grammars/src/semgrep-java/test/corpus/semgrep.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -183,3 +184,61 @@ class $X {
(variable_declarator
(identifier)
(identifier))))))))

================================================================================
Named 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)))))

================================================================================
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))))

0 comments on commit 326025a

Please sign in to comment.