This library is not being maintained anymore. For an up-to-date Solidity parser, check out solidity-parser-antlr.
A Solidity parser in Javascript. So we can evaluate and alter Solidity code without resorting to cruddy preprocessing.
Library
npm install solidity-parser
Then, in your code:
varSolidityParser=require("solidity-parser");// Parse Solidity code as a string:varresult=SolidityParser.parse("contract { ... }");// Or, parse a file:varresult=SolidityParser.parseFile("./path/to/file.sol");You can also parse a file specifically for its imports. This won't return an abstract syntax tree, but will instead return a list of files required by the parsed file:
varSolidityParser=require("solidity-parser");varresult=SolidityParser.parseFile("./path/to/file.sol","imports");console.log(result);// [// "SomeFile.sol",// "AnotherFile.sol"// ]Command Line (for convenience)
$ solidity-parser ./path/to/file.js
Consider this solidity code as input:
import "Foo.sol";
contract MyContract {
mapping (uint => address) public addresses;
}
You'll receiving the following (or something very similar) as output. Note that the structure of mappings could be made more clear, and this will likely be changed in the future.
{
"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
}
}
]
}
]
}In a checkout of the project, run:
$ npm test
MIT