github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/courier/swagger/gen/utils.go (about)

     1  package gen
     2  
     3  import (
     4  	"fmt"
     5  	"go/types"
     6  	"reflect"
     7  	"regexp"
     8  	"strings"
     9  
    10  	"golang.org/x/tools/go/loader"
    11  
    12  	"github.com/artisanhe/tools/codegen/loaderx"
    13  	"github.com/artisanhe/tools/courier"
    14  )
    15  
    16  func getTagNameAndFlags(tagValue string) (name string, flags map[string]bool) {
    17  	values := strings.SplitN(tagValue, ",", -1)
    18  	for _, flag := range values[1:] {
    19  		if flags == nil {
    20  			flags = map[string]bool{}
    21  		}
    22  		flags[flag] = true
    23  	}
    24  	name = values[0]
    25  	return
    26  }
    27  
    28  func docOfTypeName(obj types.Object, program *loader.Program) string {
    29  	pkgInfo := program.Package(obj.Pkg().Path())
    30  	for ident, def := range pkgInfo.Defs {
    31  		if def == obj {
    32  			return loaderx.CommentsOf(program.Fset, ident, pkgInfo.Files...)
    33  		}
    34  	}
    35  	return ""
    36  }
    37  
    38  func CommentValuesSplit(s string) (values []string) {
    39  	parts := strings.Split(s, " ")
    40  	for _, p := range parts {
    41  		if p != "" {
    42  			values = append(values, p)
    43  		}
    44  	}
    45  	return
    46  }
    47  
    48  func ParseSuccessMetadata(doc string) courier.Metadata {
    49  	metadata := courier.Metadata{}
    50  
    51  	matches := regexp.MustCompile(`@success ([^\n]+)`).FindAllStringSubmatch(doc, -1)
    52  
    53  	for _, subMatch := range matches {
    54  		if len(subMatch) == 2 {
    55  			parts := CommentValuesSplit(subMatch[1])
    56  			metadata.Set(strings.TrimSpace(parts[0]), parts[1:]...)
    57  		}
    58  	}
    59  
    60  	return metadata
    61  }
    62  
    63  func reflectTypeString(tpe reflect.Type) string {
    64  	for tpe.Kind() == reflect.Ptr {
    65  		tpe = tpe.Elem()
    66  	}
    67  	return fmt.Sprintf("%s.%s", loaderx.ResolvePkgImport(tpe.PkgPath()), tpe.Name())
    68  }