Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 18 additions & 23 deletions lang/semgrep-grammars/src/semgrep-solidity/grammar.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,10 @@ module.exports = grammar(base_grammar, {
source_file: ($, previous) => {
return choice(
previous,
repeat1($._statement),
$._expression,
repeat1($.statement),
$.expression,
$.constructor_definition,
$.modifier_definition,
$.event_definition,
);
},

Expand All @@ -47,9 +46,9 @@ module.exports = grammar(base_grammar, {
),
)
},

// Ellipsis
_expression: ($, previous) => {
expression: ($, previous) => {
return choice(
previous,
$.ellipsis,
Expand All @@ -70,7 +69,7 @@ module.exports = grammar(base_grammar, {
// TODO: how to use PREC.MEMBER from original grammar instead of hardcoded value?
member_ellipsis_expression : $ => prec(1, seq(
field('object', choice(
$._expression,
$.expression,
$.identifier,
)),
'.',
Expand All @@ -97,8 +96,7 @@ module.exports = grammar(base_grammar, {
);
},

// typo on name in the original grammar so we must copy the typo
event_paramater: ($, previous) => {
event_parameter: ($, previous) => {
return choice(
previous,
$.ellipsis
Expand All @@ -108,7 +106,7 @@ module.exports = grammar(base_grammar, {
for_statement: ($, previous) => {
return choice(
previous,
seq('for', '(', $.ellipsis, ')', $._statement)
seq('for', '(', $.ellipsis, ')', $.statement)
);
},

Expand All @@ -119,23 +117,20 @@ module.exports = grammar(base_grammar, {
);
},

//TODO? it would be better to refactor the original grammar with
// a enum_member so we don't have to copy-paste the original rule
enum_declaration: $ => seq(
'enum',
field("enum_type_name", $.identifier),
'{',
commaSep($._enum_member),
'}',
),
_enum_member: $ => choice(
alias($.identifier, $.enum_value),
$.ellipsis
),
enum_body: $ => choice(
seq(
'{',
choice(
commaSep(alias($.identifier, $.enum_value)),
$.ellipsis
),
'}',
),
),

// The actual ellipsis rules
deep_ellipsis: $ => seq(
'<...', $._expression, '...>'
'<...', $.expression, '...>'
),

ellipsis: $ => '...',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ Metavariable for version
=====================================
pragma solidity ^ $VER;
---

(source_file
(pragma_directive
(solidity_pragma_token
Expand All @@ -14,6 +15,7 @@ Metavariable for versions range
=====================================
pragma solidity >= $VER_FROM <= $VER_TO;
---

(source_file
(pragma_directive
(solidity_pragma_token
Expand All @@ -29,9 +31,12 @@ contract Foo {
...
}
---

(source_file
(contract_declaration (identifier)
(contract_body (ellipsis))))
(contract_declaration
(identifier)
(contract_body
(ellipsis))))

=====================================
Ellipsis for 'for'
Expand All @@ -43,7 +48,11 @@ for(...) {
---

(source_file
(for_statement (ellipsis) (block_statement)))
(statement
(for_statement
(ellipsis)
(statement
(block_statement)))))

=====================================
Constructor pattern
Expand All @@ -52,13 +61,15 @@ constructor (...) {
...
}
---
(source_file
(constructor_definition
(parameter
(ellipsis))
(function_body
(expression_statement
(ellipsis)))))

(source_file
(constructor_definition
(parameter
(ellipsis))
(function_body
(statement
(expression_statement
(ellipsis))))))

=====================================
Modifier pattern
Expand All @@ -68,20 +79,23 @@ modifier $M(...) {
...
}
---

(source_file
(modifier_definition
(identifier)
(parameter
(ellipsis))
(function_body
(expression_statement
(ellipsis)))))
(modifier_definition
(identifier)
(parameter
(ellipsis))
(function_body
(statement
(expression_statement
(ellipsis))))))

=====================================
Inheritance ellipsis pattern
=====================================
contract Example is ..., BoringBatchable, ... {}
---

(source_file
(contract_declaration
(identifier)
Expand All @@ -92,8 +106,7 @@ contract Example is ..., BoringBatchable, ... {}
(identifier)))
(inheritance_specifier
(ellipsis))
(contract_body)))

(contract_body)))

=====================================
Enum pattern
Expand All @@ -105,9 +118,10 @@ enum $X {
---

(source_file
(enum_declaration
(identifier)
(ellipsis)))
(enum_declaration
(identifier)
(enum_body
(ellipsis))))

=====================================
Event pattern
Expand All @@ -117,7 +131,7 @@ event $EV(...);
---

(source_file
(event_definition
(identifier)
(event_paramater
(ellipsis))))
(event_definition
(identifier)
(event_parameter
(ellipsis))))
2 changes: 1 addition & 1 deletion lang/semgrep-grammars/src/tree-sitter-solidity
Submodule tree-sitter-solidity updated 67 files
+39 −0 .editorconfig
+11 −0 .gitattributes
+35 −0 .github/workflows/helix.yml
+34 −0 .github/workflows/nvim-treesitter.yml
+26 −0 .github/workflows/publish.yml
+1 −1 .github/workflows/rust.yml
+8 −3 .github/workflows/test.yaml
+2 −3 .gitignore
+6 −0 .npmignore
+6 −3 Cargo.toml
+110 −0 Makefile
+48 −0 Package.swift
+1 −1 README.md
+0 −1 TODO.md
+8 −5 binding.gyp
+16 −0 bindings/c/tree-sitter-solidity.h
+11 −0 bindings/c/tree-sitter-solidity.pc.in
+13 −0 bindings/go/binding.go
+15 −0 bindings/go/binding_test.go
+5 −0 bindings/go/go.mod
+14 −22 bindings/node/binding.cc
+28 −0 bindings/node/index.d.ts
+7 −0 bindings/node/index.js
+5 −0 bindings/python/tree_sitter_solidity/__init__.py
+1 −0 bindings/python/tree_sitter_solidity/__init__.pyi
+27 −0 bindings/python/tree_sitter_solidity/binding.c
+0 −0 bindings/python/tree_sitter_solidity/py.typed
+3 −0 bindings/rust/build.rs
+35 −27 bindings/rust/lib.rs
+16 −0 bindings/swift/TreeSitterSolidity/solidity.h
+251 −208 grammar.js
+605 −9 package-lock.json
+25 −15 package.json
+32 −0 pyproject.toml
+308 −0 queries/highlights-nvim.scm
+86 −60 queries/highlights.scm
+9 −0 queries/locals.scm
+43 −0 queries/tags.scm
+62 −0 setup.py
+7,097 −0 src/grammar.json
+4,278 −0 src/node-types.json
+68,909 −0 src/parser.c
+54 −0 src/tree_sitter/alloc.h
+291 −0 src/tree_sitter/array.h
+266 −0 src/tree_sitter/parser.h
+80 −0 test/corpus/block.txt
+3 −1 test/corpus/contract.txt
+13 −12 test/corpus/enums.txt
+13 −5 test/corpus/error.txt
+17 −5 test/corpus/event.txt
+443 −208 test/corpus/expressions.txt
+13 −12 test/corpus/function.txt
+35 −34 test/corpus/import.txt
+3 −1 test/corpus/interface.txt
+116 −71 test/corpus/literals.txt
+387 −0 test/corpus/precedence.txt
+30 −2 test/corpus/state_variable.txt
+185 −107 test/corpus/statements.txt
+3 −2 test/corpus/struct.txt
+69 −35 test/corpus/yul.txt
+38 −0 tree-sitter.json
+30 −0 typed-libraries/python/README.md
+1 −0 typed-libraries/python/requirements.txt
+30 −0 typed-libraries/python/setup.py
+1 −0 typed-libraries/python/tree_sitter_solidity/__init__.py
+1,010 −0 typed-libraries/python/tree_sitter_solidity/typed_parser.py
+198 −0 yarn.lock