soltar

Generate Solidity Code from solidity-parser's AST

Usage no npm install needed!

<script type="module">
  import soltar from 'https://cdn.skypack.dev/soltar';
</script>

README

soltar

Generate Solidity Code from its Abstract Syntax Tree. (The AST must follow the Spider Monkey API for defining AST nodes).

An NPM module, solidity-parser, exists if you want to generate AST of your solidity code.

npm install solidity-parser

I've also released a clone of solidity-parser called solparse - it has a lot of bug fixes and I maintain it.

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

  1. 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

  2. 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

PROBLEMS WITH solidity-parser

There are currently a few bugs in solidity-parser. I've listed them. You can instead choose to install solparse (see above).