Golang go/ast.ExprStmt type, End() and Pos() functions examples

package go/ast

An ExprStmt node represents a (stand-alone) expression in a statement list.

Golang go/ast.ExprStmt type, End() and Pos() functions usage examples

Example 1:

 func NodeDescription(n ast.Node) string {
 switch n := n.(type) {
 case *ast.ArrayType:
 return "array type"
 case *ast.AssignStmt:
 return "assignment"
 case *ast.ExprStmt:
 return "expression statement"
 ...
 }

Example 2:

 func checkCurrentPosition(node ast.Node) string {
 n := node.(*ast.ExprStmt)
 endpos := n.End()
 pospos := n.Pos()

 if pospos != endpos {
 return "not yet"
 }
 }

Example 3:

 func createItStatementForTestFunc(testFunc *ast.FuncDecl) *ast.ExprStmt {
  blockStatement := &ast.BlockStmt{List: testFunc.Body.List}
  fieldList := &ast.FieldList{}
  funcType := &ast.FuncType{Params: fieldList}
  funcLit := &ast.FuncLit{Type: funcType, Body: blockStatement}
  testName := rewriteTestName(testFunc.Name.Name)
  basicLit := &ast.BasicLit{Kind: 9, Value: fmt.Sprintf("\"%s\"", testName)}
  itBlockIdent := &ast.Ident{Name: "It"}
  callExpr := &ast.CallExpr{Fun: itBlockIdent, Args: []ast.Expr{basicLit, funcLit}}
  return &ast.ExprStmt{X: callExpr} // <-- here
 }

References :

https://github.com/onsi/ginkgo/blob/master/ginkgo/convert/ginkgoastnodes.go

http://golang.org/pkg/go/ast/#ExprStmt

http://golang.org/pkg/go/ast/#ExprStmt.End

http://golang.org/pkg/go/ast/#ExprStmt.Pos

Advertisement