astutil

package
v0.0.0-...-9dac4f2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 1, 2023 License: BSD-2-Clause, MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AddCallBlockToFunc

func AddCallBlockToFunc(f *ast.File, funcName string, data []AstCallExpr, afterVar string) bool

AddCallBlockToFunc 添加一个如下所示的代码块到函数中

{
		rdemo.POST("", demo.Create)
		rdemo.POST("/", demo.Create)
	}

func AddFunc

func AddFunc(f *ast.File, params *AstFunc) bool

AddFunc 新增一个函数,目前只支持如下格式:

参数:

&AstFunc{
		Name: "test",
		Params: []AstKv{
			{Key: "p1", Value: "string"},
			{Key: "p2", Value: "*AstKv"},
		},
		Results: []AstKv{
			{Key: "ret", Value: "string"}, // results 这里的可以省略
		},
		Return: []string{"ret"},
	}

结果为: func test(p1 string, p2 *AstKv) (ret string) { return ret }

在上诉AstFunc中添加如下 &AstFunc{Recv:{Key:"s", Value:"*Stu"}} 的结果为:

func (s Stu) test1(p1 string, p2 *AstKv) (ret string) {
	return ret
}

在上诉AstFunc中添加如下 &AstFunc{Recv:{Key:"s", Value:"*Stu"}} 的结果为:

func (s *Stu) test2(p1 string, p2 *AstKv) (ret string) {
	return ret
}

func AddFuncToInterface

func AddFuncToInterface(f *ast.File, name string, params *AstFunc) bool

AddFuncToInterface 为interface添加函数

测试数据:

type EmptyInf interface { }

传参:

params := &AstFunc{
		Name: "test0",
		Params: []AstKv{
			{Key: "p1", Value: "string"},
			{Key: "p2", Value: "...*AstKv"},
		},
		Results: []AstKv{
			{Key: "ret1", Value: "string"},
		},
}

结果为:

type EmptyInf interface {
	test0(p1 string, p2 ...*AstKv) (ret1 string)
}

func AddImport

func AddImport(fset *token.FileSet, f *ast.File, name, path string) bool

AddImport 添加包名

参数 name 可以为空

func AddKVToFuncUnaryStruct

func AddKVToFuncUnaryStruct(f *ast.File, funcName, varName, key, value string) bool

AddKVToFuncUnaryStruct 为函数的struct指针变量添加key value数据。目前没有做变量重复判断

测试数据:

func tStruct() {
	var te = &Stu{}
	stu := &Stu{}
	fmt.Println(te,stu)
}

执行:

AddKVToFuncUnaryStruct(f, "tStruct", "te", "key", "value")

AddKVToFuncUnaryStruct(f, "tStruct", "stu", "key", "value")

结果为:

func tStruct() {
	var te = &Stu{key: value}
	stu := &Stu{key: value}
	fmt.Println(te, stu)
}

func AddKVToStruct

func AddKVToStruct(f *ast.File, name, key, value string, addDocLine token.Pos) bool

AddKVToStruct 为 type xx struct 添加成员属性

 参数key允许为空
 例子:
 type EmptyStruct struct {
 }
 执行:
 AddKVToStruct(f,"EmptyStruct", "age", "int")
 AddKVToStruct(f,"EmptyStruct", "", "TypeStruct")
 结果为:
 type EmptyStruct struct {
	 age int
  TypeStruct
 }

func AddKVToUnaryStruct

func AddKVToUnaryStruct(f *ast.File, varName, key, value string) bool

AddKVToUnaryStruct 给结构体指针变量添加key,value

 比如:var xx = &Struct1{
	 Name: "str",
 }

给上面添加一组key "value",结果为:

	var xx = &Struct1{
	 Name: "str",
  Key: "value"
 }

当然,对应Struct的应该是:

 type Struct1 struct {
	 Name string
  Key  string
 }

func AddParamToFunc

func AddParamToFunc(f *ast.File, funcName, paramName, paramType string) bool

AddParamToFunc 给函数添加参数

测试数据:func t () {}

执行:AddParamToFunc(f, "t", "demo", "demo.IDemo")

结果为:func t(demo demo.IDemo,) {}

func AddQuote

func AddQuote(str string) string

AddQuote 给字符串添加双引号

func AddSingleQuote

func AddSingleQuote(str string) string

AddSingleQuote 给字符串添加单引号

func AddValueToCaller

func AddValueToCaller(f *ast.File, varName, value string) bool

AddValueToCaller 给CallerAble变量添加数据,没有做类型校验

 测试数据:
 func NewSet(...interface{}) struct {
	return struct{}
 }
 var tt = NewSet(12,"cc")
 执行:
 AddValueToCaller(f, "tt", AddQuote("hello"))
 AddValueToCaller(f, "tt", "hello")
 结果为:
 var tt = NewSet(12, "cc", "hello", hello)

func AddValueToMap

func AddValueToMap(f *ast.File, mapName, key, value string) bool

AddValueToMap 给map变量添加数据,没有做map类型校验

测试数据:var mapStr = map[string]string{"cc": "cc"}
执行:AddValueToMap(f, "mapStr", AddQuote("key"), AddQuote("test"))
结果为:var mapStr = map[string]string{"cc": "cc", "key": "test"}

测试数据:var mapInt = map[int]string{1: "cc"}
执行:AddValueToMap(f, "mapInt", "3", AddQuote("test"))
结果为:var mapInt = map[int]string{1: "cc", 3: "test"}

测试数据:var mapInf = map[string]interface{}{"cc": 1}
执行:AddValueToMap(f, "mapInf", AddQuote("hello"), "&aaa")
结果为:var mapInf = map[string]interface{}{"cc": 1, "hello": &aaa}

func AddValueToSlice

func AddValueToSlice(f *ast.File, varName, value string) bool

AddValueToSlice 给slice变量添加数据,没有做类型校验

例子:var sliceStr = []string{}
执行:
AddValueToSlice(f, "sliceStr", AddQuote("hello"))
AddValueToSlice(f, "sliceStr", "hello")
结果为:
var sliceStr = []string{"hello", hello}

func AddVarAfterVar

func AddVarAfterVar(f *ast.File, name, value, afterVar string) bool

AddVarAfterVar 在某个变量后面新增一个变量

在test变量后面新增一个:var genExpr = &ast.GenExpr
使用例子:AddVarAfterVar(f, "genExpr", "&ast.GenExpr", "test")

func AddVarToFunc

func AddVarToFunc(f *ast.File, funcName, varName, value, afterVar, tag string) bool

AddVarToFunc 添加变量到函数中

支持格式有: var xx string

var xx = "xxx"

xx := ccc 有问题,暂不修复

不支持复杂的定义

func DefineVarAfterVar

func DefineVarAfterVar(f *ast.File, name, kind, afterVar string) bool

DefineVarAfterVar 在某个变量后面新定义一个变量

在test变量后面定义一个:var genExpr *ast.GenExpr
使用例子:DefineVarAfterVar(f, "genExpr", "*ast.GenExpr", "test")

func GetLastVarFormFunc

func GetLastVarFormFunc(f *ast.File, funcName string) string

GetLastVarFormFunc 获取函数中最后一个变量名称

func InitEnv

func InitEnv(path string) (fset *token.FileSet, f *ast.File)

func PrintResult

func PrintResult(fset *token.FileSet, f *ast.File)

func WriteToFile

func WriteToFile(fset *token.FileSet, f *ast.File, path string) error

Types

type AstCallExpr

type AstCallExpr struct {
	FunName string
	FunSel  string
	Args    []string
}

type AstFunc

type AstFunc struct {
	Name    string
	Params  []AstKv
	Results []AstKv
	Return  []string
	Recv    *AstKv
}

type AstKv

type AstKv struct {
	Key   string
	Value string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL