65 строки
1,2 КиБ
Go
65 строки
1,2 КиБ
Go
package service
|
|
|
|
import (
|
|
"go/ast"
|
|
)
|
|
|
|
func addTypeByValue(s *ast.ValueSpec) (code string) {
|
|
if len(s.Values) == 0 {
|
|
return
|
|
}
|
|
|
|
value := s.Values[0]
|
|
|
|
switch v := value.(type) {
|
|
case *ast.BasicLit:
|
|
code += handleBasicLitType(v)
|
|
}
|
|
return
|
|
}
|
|
|
|
func handleValueSpecNames(names []*ast.Ident) (code string) {
|
|
nado_zapyatuyu := false
|
|
for _, name := range names {
|
|
if nado_zapyatuyu {
|
|
code += ","
|
|
}
|
|
if isPointerType {
|
|
code += "*"
|
|
}
|
|
code += handleIdentExpr(name)
|
|
nado_zapyatuyu = true
|
|
}
|
|
return
|
|
}
|
|
|
|
func handleValueSpecType(expr ast.Expr) (code string) {
|
|
switch t := expr.(type) {
|
|
case *ast.SelectorExpr:
|
|
code += handleSelectorExpr(t)
|
|
case *ast.Ident:
|
|
code += handleIdentExpr(t)
|
|
case *ast.StarExpr:
|
|
code += handleStarExpr(t)
|
|
case *ast.ArrayType:
|
|
code += handleArray(t)
|
|
}
|
|
return
|
|
}
|
|
|
|
func handleValueSpecValues(values []ast.Expr) string {
|
|
code := ""
|
|
for _, value := range values {
|
|
switch v := value.(type) {
|
|
case *ast.BasicLit:
|
|
code += handleBasicLit(v)
|
|
case *ast.BinaryExpr:
|
|
code += handleBinaryExpr(v)
|
|
case *ast.SelectorExpr:
|
|
code += handleSelectorExpr(v)
|
|
case *ast.CallExpr:
|
|
code += handleCallExpr(v)
|
|
}
|
|
}
|
|
return code
|
|
}
|