mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-10-12 18:51:02 +08:00
46 lines
923 B
Go
46 lines
923 B
Go
package patcher
|
|
|
|
import (
|
|
"reflect"
|
|
|
|
"github.com/expr-lang/expr/ast"
|
|
)
|
|
|
|
// WithContext adds WithContext.Name argument to all functions calls with a context.Context argument.
|
|
type WithContext struct {
|
|
Name string
|
|
}
|
|
|
|
// Visit adds WithContext.Name argument to all functions calls with a context.Context argument.
|
|
func (w WithContext) Visit(node *ast.Node) {
|
|
switch call := (*node).(type) {
|
|
case *ast.CallNode:
|
|
fn := call.Callee.Type()
|
|
if fn == nil {
|
|
return
|
|
}
|
|
if fn.Kind() != reflect.Func {
|
|
return
|
|
}
|
|
switch fn.NumIn() {
|
|
case 0:
|
|
return
|
|
case 1:
|
|
if fn.In(0).String() != "context.Context" {
|
|
return
|
|
}
|
|
default:
|
|
if fn.In(0).String() != "context.Context" &&
|
|
fn.In(1).String() != "context.Context" {
|
|
return
|
|
}
|
|
}
|
|
ast.Patch(node, &ast.CallNode{
|
|
Callee: call.Callee,
|
|
Arguments: append([]ast.Node{
|
|
&ast.IdentifierNode{Value: w.Name},
|
|
}, call.Arguments...),
|
|
})
|
|
}
|
|
}
|