Home

Awesome

asty

GitHub go.mod Go version Go Reference Go Report Card Codecov GitHub last commit Docker Pulls Mentioned in Awesome Go

Not another JSON parser!

AST → JSON | JSON → AST

Marshals golang AST into JSON and unmarshals it back from JSON.

It allows building pattern matching, statistical analysis, language transformation, search/data-mine/anything algorithms for golang with any other language (I like to do it with python. Check out asty-python)

Example

Try it!

Input golang source

package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

Ouput AST in JSON

{
  "NodeType": "File",
  "Name": {
    "NodeType": "Ident",
    "Name": "main"
  },
  "Decls": [
    {
      "NodeType": "GenDecl",
      "Tok": "import",
      "Specs": [
        {
          "NodeType": "ImportSpec",
          "Name": null,
          "Path": {
            "NodeType": "BasicLit",
            "Kind": "STRING",
            "Value": "\"fmt\""
          }
        }
      ]
    },
    {
      "NodeType": "FuncDecl",
      "Recv": null,
      "Name": {
        "NodeType": "Ident",
        "Name": "main"
      },
      "Type": {
        "NodeType": "FuncType",
        "TypeParams": null,
        "Params": {
          "NodeType": "FieldList",
          "List": null
        },
        "Results": null
      },
      "Body": {
        "NodeType": "BlockStmt",
        "List": [
          {
            "NodeType": "ExprStmt",
            "X": {
              "NodeType": "CallExpr",
              "Fun": {
                "NodeType": "SelectorExpr",
                "X": {
                  "NodeType": "Ident",
                  "Name": "fmt"
                },
                "Sel": {
                  "NodeType": "Ident",
                  "Name": "Println"
                }
              },
              "Args": [
                {
                  "NodeType": "BasicLit",
                  "Kind": "STRING",
                  "Value": "\"hello world\""
                }
              ]
            }
          }
        ]
      }
    }
  ]
}

Install

Install asty under $GOPATH/bin

go install github.com/asty-org/asty

asty -h

Building

Just make If you want to do it differently use go build

Usage

Convert AST to JSON

asty go2json -input <input.go> -output <output.json>

Convert JSON to AST

asty json2go -input <input.json> -output <output.go>

Use asty help for more information

Using with docker

docker run astyorg/asty go2json -input <input.go> -output <output.json>

Development principles

Other solutions

Article

I wrote an article about this project.