You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-zero/tools/goctl/pkg/parser/api/ast/comment.go

76 lines
1.5 KiB
Go

package ast
import (
"strings"
"github.com/zeromicro/go-zero/tools/goctl/pkg/parser/api/token"
"github.com/zeromicro/go-zero/tools/goctl/util"
)
// CommentGroup represents a list of comments.
type CommentGroup []*CommentStmt
// List returns the list of comments.
func (cg CommentGroup) List() []string {
var list = make([]string, 0, len(cg))
for _, v := range cg {
comment := v.Comment.Text
if util.IsEmptyStringOrWhiteSpace(comment) {
continue
}
list = append(list, comment)
}
return list
}
// String joins and returns the comment text.
func (cg CommentGroup) String() string {
return cg.Join(" ")
}
// Join joins the comments with the given separator.
func (cg CommentGroup) Join(sep string) string {
if !cg.Valid() {
return ""
}
list := cg.List()
return strings.Join(list, sep)
}
// Valid returns true if the comment is valid.
func (cg CommentGroup) Valid() bool {
return len(cg) > 0
}
// CommentStmt represents a comment statement.
type CommentStmt struct {
// Comment is the comment token.
Comment token.Token
}
func (c *CommentStmt) HasHeadCommentGroup() bool {
return false
}
func (c *CommentStmt) HasLeadingCommentGroup() bool {
return false
}
func (c *CommentStmt) CommentGroup() (head, leading CommentGroup) {
return
}
func (c *CommentStmt) stmtNode() {}
func (c *CommentStmt) Pos() token.Position {
return c.Comment.Position
}
func (c *CommentStmt) End() token.Position {
return c.Comment.Position
}
func (c *CommentStmt) Format(prefix ...string) string {
return peekOne(prefix) + c.Comment.Text
}