go-toolsmith / astcopy

Package astcopy implements Go AST deep copy operations.
MIT License
19 stars 2 forks source link
ast deep-copy go golang

astcopy

build-img pkg-img reportcard-img version-img

Package astcopy implements Go AST reflection-free deep copy operations.

Installation:

Go version 1.16+

go get github.com/go-toolsmith/astcopy

Example

package main

import (
    "fmt"
    "go/ast"
    "go/token"

    "github.com/go-toolsmith/astcopy"
    "github.com/go-toolsmith/astequal"
    "github.com/go-toolsmith/strparse"
)

func main() {
    x := strparse.Expr(`1 + 2`).(*ast.BinaryExpr)
    y := astcopy.BinaryExpr(x)
    fmt.Println(astequal.Expr(x, y)) // => true

    // Now modify x and make sure y is not modified.
    z := astcopy.BinaryExpr(y)
    x.Op = token.SUB
    fmt.Println(astequal.Expr(y, z)) // => true
    fmt.Println(astequal.Expr(x, y)) // => false
}

License

MIT License.