go-translator/pkg/service/value.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
}