54 строки
1 КиБ
Go
54 строки
1 КиБ
Go
package service
|
|
|
|
import (
|
|
"go/ast"
|
|
)
|
|
|
|
func handleValueSpec(spec ast.Spec) string {
|
|
s := spec.(*ast.ValueSpec)
|
|
code := ""
|
|
code += handleValueSpecType(s.Type)
|
|
code += " "
|
|
code += handleValueSpecNames(s.Names)
|
|
if s.Values != nil {
|
|
code += " = "
|
|
code += handleValueSpecValues(s.Values)
|
|
}
|
|
return code
|
|
}
|
|
|
|
func handleValueSpecNames(names []*ast.Ident) string {
|
|
code := ""
|
|
for _, name := range names {
|
|
code += handleIdent(name)
|
|
}
|
|
return code
|
|
}
|
|
|
|
func handleValueSpecType(expr ast.Expr) string {
|
|
code := ""
|
|
switch t := expr.(type) {
|
|
case *ast.SelectorExpr:
|
|
code += handleSelectorExpr(t)
|
|
case *ast.Ident:
|
|
code += handleIdent(t)
|
|
}
|
|
return code
|
|
}
|
|
|
|
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(value)
|
|
case *ast.CallExpr:
|
|
code += handleCallExpr(v)
|
|
}
|
|
}
|
|
return code
|
|
}
|