$ npm install pegis-solidity
Ideal for AST use-cases
pegis-solidity
original consensys/solidity-parser with additional project specific grammar rules
- Main change is adoption of
peggy
as thepeg.js
framework has been stagnant, this is a drop in replacement.
- Added support for
gwei
units.uint256 gas = 10 gwei;
- Fixed a bug that didn't recognize empty TryCatch statements with a return expresion.
try Foo.bar() returns (uint result) {} catch {}
- Fixed a bug that didn't recognize Enum declarations
enum Foo { bar }
Thanks to https://github.com/wrong7
v2 changes start here: 18 August 2021
- feat(refactor): migrate to peggy and various improvements
87b594a
- build(refactor): improve build process
0de7a77
- chore(repo): remove dead and legacy artifacts
012fec1
import { solidityparser } from 'pegis-solidity';
$ ./node_modules/.boin/pegis-solidity $PWD/file_name.js
Consider this solidity code as input:
import "Foo.sol";
contract MyContract {
mapping (uint => address) public addresses;
}
Generated output as AST output:
{
"type": "Program",
"body": [
{
"type": "ImportStatement",
"value": "Foo.sol"
},
{
"type": "ContractStatement",
"name": "MyContract",
"is": [],
"body": [
{
"type": "ExpressionStatement",
"expression": {
"type": "DeclarativeExpression",
"name": "addresses",
"literal": {
"type": "Type",
"literal": {
"type": "MappingExpression",
"from": {
"type": "Type",
"literal": "uint",
"members": [],
"array_parts": []
},
"to": {
"type": "Type",
"literal": "address",
"members": [],
"array_parts": []
}
},
"members": [],
"array_parts": []
},
"is_constant": false,
"is_public": true
}
}
]
}
]
}
var SolidityParser = require('pegis-solidity');
// Parse Solidity code as a string:
var result = SolidityParser.parse('contract { ... }');
// Or, parse a file:
var result = SolidityParser.parseFile('./path/to/file.sol');
A full list can be found under the
DIFF.md
document here
HexStringLiteral
- = HexToken StringLiteral
+ = HexToken val:StringLiteral {
+ return {
+ type: "HexLiteral",
+ value: val,
+ start: location().start.offset,
+ end: location().end.offset
+ };
+ }
ISC / MIT