Generate Solidity Code from its Abstract Syntax Tree. (The AST must follow the Spider Monkey API for defining AST nodes).
#Application 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!
#AST!
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
#Installation
npm install --save soltar
#Documentation
To use Soltar in Browser, include:
<script src="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');
#API
-
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
#Example 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
}
}
##Usage
/*
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);
##Output
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.
#Future enhancements:
1. Commandline utility