diff --git a/tools/compiler/internal/ast.go b/tools/compiler/internal/ast.go index 55ed517d..730fe63c 100644 --- a/tools/compiler/internal/ast.go +++ b/tools/compiler/internal/ast.go @@ -221,3 +221,22 @@ func getCodeSelectorExprList(file *ast.File) ([]*ast.SelectorExpr, error) { return sv.selectorExprList, nil } + +type functionExprVisitor struct { + funcList []*ast.FuncDecl +} + +func (v *functionExprVisitor) Visit(node ast.Node) ast.Visitor { + if fnExpr, ok := node.(*ast.FuncDecl); ok { + v.funcList = append(v.funcList, fnExpr) + } + return v +} + +func getCodeFuncDecl(file *ast.File) ([]*ast.FuncDecl, error) { + fv := &functionExprVisitor{} + + ast.Walk(fv, file) + + return fv.funcList, nil +} diff --git a/tools/compiler/internal/base.go b/tools/compiler/internal/base.go index aa28a579..61bce350 100644 --- a/tools/compiler/internal/base.go +++ b/tools/compiler/internal/base.go @@ -42,7 +42,8 @@ func GetDefinition(fileName string, fileMap map[string]string) (interface{}, err if err != nil { fmt.Println("Internal error: ", err) } - definitionList := getDefinitionList(info) + fnList, _ := getCodeFuncDecl(pkg[PKG].Files[fileName]) + definitionList := getDefinitionList(info, fnList) definitionList.Position(fset) filter := definitions{} for _, item := range definitionList { diff --git a/tools/compiler/internal/definition.go b/tools/compiler/internal/definition.go index a9172d7d..42f71dd2 100644 --- a/tools/compiler/internal/definition.go +++ b/tools/compiler/internal/definition.go @@ -33,6 +33,7 @@ type usage struct { InsertText string `json:"insertText"` Params []param `json:"params"` Type string `json:"type"` + Document string `json:"document"` } type param struct { @@ -127,7 +128,7 @@ func (d definitions) Position(fset *token.FileSet) { def.From.EndPosition = Position(fset.Position(token.Pos(def.From.EndPos))) } } -func getDefinitionList(info *typesutil.Info) definitions { +func getDefinitionList(info *typesutil.Info, fnList []*ast.FuncDecl) definitions { var definitionList definitions defs := info.Defs @@ -138,7 +139,11 @@ func getDefinitionList(info *typesutil.Info) definitions { continue } definition := createDefinitionItem(ident, obj) - definition.Usages = createUsages(obj, ident.Name) + definitionUsage := createUsages(obj, ident.Name) + if commentList := checkFnExist(fnList, ident); commentList != nil { + definitionUsage[0].Document = commentList.Text() + } + definition.Usages = definitionUsage definitionList = append(definitionList, definition) } @@ -350,3 +355,12 @@ func extractParams(signature *types.Signature) (signList []string, sampleList [] } return } + +func checkFnExist(fnList []*ast.FuncDecl, ident *ast.Ident) *ast.CommentGroup { + for _, fnDecl := range fnList { + if fnDecl.Name == ident && fnDecl.Doc != nil { + return fnDecl.Doc + } + } + return nil +} diff --git a/tools/compiler/internal/setups.go b/tools/compiler/internal/setups.go index 44d693b2..2c8f7741 100644 --- a/tools/compiler/internal/setups.go +++ b/tools/compiler/internal/setups.go @@ -28,7 +28,7 @@ func initSPXMod() *gopmod.Module { func initSPXParserConf() parser.Config { return parser.Config{ ClassKind: gopbuild.ClassKind, - Mode: parser.DeclarationErrors, + Mode: parser.AllErrors | parser.ParseComments, } }