🎉 初始化项目
This commit is contained in:
82
server/utils/ast/plugin_initialize_v2.go
Normal file
82
server/utils/ast/plugin_initialize_v2.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package ast
|
||||
|
||||
import (
|
||||
"go/ast"
|
||||
"go/token"
|
||||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type PluginInitializeV2 struct {
|
||||
Base
|
||||
Type Type // 类型
|
||||
Path string // 文件路径
|
||||
PluginPath string // 插件路径
|
||||
RelativePath string // 相对路径
|
||||
ImportPath string // 导包路径
|
||||
StructName string // 结构体名称
|
||||
PackageName string // 包名
|
||||
}
|
||||
|
||||
func (a *PluginInitializeV2) Parse(filename string, writer io.Writer) (file *ast.File, err error) {
|
||||
if filename == "" {
|
||||
if a.RelativePath == "" {
|
||||
filename = a.PluginPath
|
||||
a.RelativePath = a.Base.RelativePath(a.PluginPath)
|
||||
return a.Base.Parse(filename, writer)
|
||||
}
|
||||
a.PluginPath = a.Base.AbsolutePath(a.RelativePath)
|
||||
filename = a.PluginPath
|
||||
}
|
||||
return a.Base.Parse(filename, writer)
|
||||
}
|
||||
|
||||
func (a *PluginInitializeV2) Injection(file *ast.File) error {
|
||||
importPath := strings.TrimSpace(a.ImportPath)
|
||||
if importPath == "" {
|
||||
return nil
|
||||
}
|
||||
importPath = strings.Trim(importPath, "\"")
|
||||
if importPath == "" || CheckImport(file, importPath) {
|
||||
return nil
|
||||
}
|
||||
|
||||
importSpec := &ast.ImportSpec{
|
||||
Name: ast.NewIdent("_"),
|
||||
Path: &ast.BasicLit{Kind: token.STRING, Value: strconv.Quote(importPath)},
|
||||
}
|
||||
var importDecl *ast.GenDecl
|
||||
for _, decl := range file.Decls {
|
||||
genDecl, ok := decl.(*ast.GenDecl)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
if genDecl.Tok == token.IMPORT {
|
||||
importDecl = genDecl
|
||||
break
|
||||
}
|
||||
}
|
||||
if importDecl == nil {
|
||||
file.Decls = append([]ast.Decl{
|
||||
&ast.GenDecl{
|
||||
Tok: token.IMPORT,
|
||||
Specs: []ast.Spec{importSpec},
|
||||
},
|
||||
}, file.Decls...)
|
||||
return nil
|
||||
}
|
||||
importDecl.Specs = append(importDecl.Specs, importSpec)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *PluginInitializeV2) Rollback(file *ast.File) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *PluginInitializeV2) Format(filename string, writer io.Writer, file *ast.File) error {
|
||||
if filename == "" {
|
||||
filename = a.PluginPath
|
||||
}
|
||||
return a.Base.Format(filename, writer, file)
|
||||
}
|
||||
Reference in New Issue
Block a user