soltar
soltar copied to clipboard
Generate Solidity Code from its AST
soltar
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