mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-14 20:46:30 +00:00
c28f7cb29f
Initial part of #435
41 lines
1 KiB
Markdown
41 lines
1 KiB
Markdown
[![Go Report Card](https://goreportcard.com/badge/github.com/go-toolsmith/astcopy)](https://goreportcard.com/report/github.com/go-toolsmith/astcopy)
|
|
[![GoDoc](https://godoc.org/github.com/go-toolsmith/astcopy?status.svg)](https://godoc.org/github.com/go-toolsmith/astcopy)
|
|
[![Build Status](https://travis-ci.org/go-toolsmith/astcopy.svg?branch=master)](https://travis-ci.org/go-toolsmith/astcopy)
|
|
|
|
# astcopy
|
|
|
|
Package astcopy implements Go AST reflection-free deep copy operations.
|
|
|
|
## Installation:
|
|
|
|
```bash
|
|
go get github.com/go-toolsmith/astcopy
|
|
```
|
|
|
|
## Example
|
|
|
|
```go
|
|
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
|
|
}
|
|
```
|