go_code_analysis

package module
v0.0.0-...-ab432b7 Latest Latest
Warning

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

Go to latest
Published: Jan 23, 2019 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Analysis *analysis
View Source
var GFixedFunc map[string]Fixed //key的格式为Package.Func
View Source
var GFset *token.FileSet //全局存储token的position

Functions

func AllCallCase

func AllCallCase(n ast.Node, todo func(call *ast.CallExpr) bool) (find bool)

调用函数的N种情况 对函数调用使用todo适配,并返回是否适配成功

func BuildFromCallMap

func BuildFromCallMap(head *MWTNode, callMap map[string]CallerRelation)

func WalkDir

func WalkDir(dirPth, suffix string) (files []string, err error)

获取指定目录及所有子目录下的所有文件,可以匹配后缀过滤。

Types

type CalledRelation

type CalledRelation struct {
	Callees []FuncDesc
	CanFix  bool //该调用关系能反向找到gin.Context即可以自动修复
}

描述关键函数的一条反向调用关系

type CallerRelation

type CallerRelation struct {
	Caller  FuncDesc
	Callees []FuncDesc
}

描述一个函数调用N个函数的一对多关系

type FindContext

type FindContext struct {
	File      string
	Package   string
	LocalFunc *ast.FuncDecl
}

func (*FindContext) FindCallFunc

func (f *FindContext) FindCallFunc(call *ast.CallExpr) bool

func (*FindContext) Visit

func (f *FindContext) Visit(n ast.Node) ast.Visitor

type FixContext

type FixContext struct {
	Type       GenFuncType
	File       string
	Package    string
	LocalFunc  *ast.FuncDecl
	TargetFunc FuncDesc //希望自动修复的函数
	CalleeFunc FuncDesc //上述函数调用的下一级函数
}

主要用于将调用链里面的nil替换为ctx 并判断填充父函数的行参context.Context 并在源头函数生成Context的起点

func (*FixContext) FixCallFunc

func (f *FixContext) FixCallFunc(call *ast.CallExpr) bool

如果是关键函数: 查看关键函数内部是否是nil值填充的调用链,如果是,就将nil替换为ctx 如果是传递函数或者源头函数: 在调用处插入第一个ctx参数,区分跨package和本package两种情况

func (*FixContext) FixLocalunc

func (f *FixContext) FixLocalunc()

关键函数和传递函数如果没有context,需要加在第一个入参,并记录后递归向上查询 源头函数如果没有产生ctx,则需要自动生成一个

func (*FixContext) Visit

func (f *FixContext) Visit(n ast.Node) (w ast.Visitor)

type Fixed

type Fixed struct {
	FuncDesc
	RelationsTree *MWTNode //反向调用关系,可能有多条调用链到达关键函数
	RelationList  []CalledRelation
	CanFix        bool //能反向找到gin.Context即可以自动修复
}

关键函数定义

type FuncDesc

type FuncDesc struct {
	File    string //文件路径
	Package string //package名
	Name    string //函数名,格式为Package.Func
}

函数定义

type GenFuncType

type GenFuncType int
const (
	KeyFunc GenFuncType = iota
	TransFunc
	SourceFunc
)

type MWTNode

type MWTNode struct {
	Key      string
	Value    FuncDesc
	N        int
	Children []*MWTNode
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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