Generate Solidity Code from its Abstract Syntax Tree. (The AST must follow the Spider Monkey API for defining AST nodes).
Don't like your peers' Solidity coding style? Always getting into the tabs vs. spaces debates? But still gotta comply with a standard style that everybody follows? No problem!
Write your Solidity code with style that aesthetically pleases you, generate its AST and give it to Soltar to generate code in a standard style your company follows.
Now you get to work with your own style on your local machine and push the code with style that pleases your boss!
A couple of modules exist for you to generate AST of your Solidity Code:
solidity-parser (by tcoulter from Consensys)
npm install --save solidity-parser
solparse (I'm the author)
npm install solparse
npm install --save soltar
To use Soltar in Browser, include:
<script src="https://github.com/duaraghav8/soltar/raw/master/soltar-bundle.js"></script>
You can then access the Soltar object by using window.Soltar
or simply Soltar
.
In order to access Soltar's functionality in Node.js, require()
it like:
let Soltar = require ('soltar');
generate - The main function that takes 2 arguments: ast (the Solidity Code's abstract syntax tree (following the Spider monkey API) & options (optional) to confgure the output
version - Get version information
A typical AST would look like:
{
"type": "Program",
"body": [
{
"type": "ExpressionStatement",
"expression": {
"type": "AssignmentExpression",
"operator": "=",
"left": {
"type": "DeclarativeExpression",
"name": "myVar",
"literal": {
"type": "Type",
"literal": "uint",
"members": [],
"array_parts": [
3
]
},
"is_constant": false,
"is_public": false,
"is_memory": false
},
"right": {
"type": "ArrayExpression",
"elements": [
{
"type": "Literal",
"value": 1
},
{
"type": "Literal",
"value": 2
},
{
"type": "Literal",
"value": 3
}
]
}
}
}
]
}
The default options configuration is:
let options = {
format: {
indent: {
style: '\t',
base: 0
},
newline: '\n',
space: ' ',
quotes: 'single',
minify: false
}
}
/*
AST is the solidity-parser generated Abstract Syntax Tree
soltar is the require()d object
*/
let options = {
format: {
indent: {
style: '\t',
base: 0
},
newline: '\n\n',
space: ' ',
quotes: 'double'
}
};
let sourceCode = soltar.generate (AST, options);
console.log (sourceCode);
contract Vote {
address public creator;
function Vote () {
creator = msg.sender;
}
}
The above solidity code corresponds to this Abstract Syntax Tree
See examples for a full contract example.
1. Commandline utility