parser

package
v4.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TSQFileSuffix = ".tsq.go"
	GoFileSuffix  = ".go"
)
View Source
const (
	TagDB   = "db"
	TagTSQ  = "tsq"
	TagJSON = "json"
)
View Source
const (
	DefaultPKField        = "ID"
	DefaultVersionField   = "Version"
	DefaultCreatedAtField = "CreatedAt"
	DefaultUpdatedAtField = "UpdatedAt"
	DefaultDeletedAtField = "DeletedAt"
)

默认字段名常量

View Source
const (
	TagIgnore = "-"
)

Variables

View Source
var PrimitiveTypes = map[string]struct{}{
	"bool":       {},
	"string":     {},
	"int":        {},
	"int8":       {},
	"int16":      {},
	"int32":      {},
	"int64":      {},
	"uint":       {},
	"uint8":      {},
	"uint16":     {},
	"uint32":     {},
	"uint64":     {},
	"uintptr":    {},
	"byte":       {},
	"rune":       {},
	"float32":    {},
	"float64":    {},
	"complex64":  {},
	"complex128": {},
}

Functions

func CleanBlockComment

func CleanBlockComment(text string) string

CleanBlockComment 去除块注释前缀和后缀

func CleanCommentPrefix

func CleanCommentPrefix(line string) string

CleanCommentPrefix 去除一行注释的前缀和多余空白

func FormatPackage

func FormatPackage(packagePath string) ([]string, error)

FormatPackage rewrites TSQ DSL annotations for one Go package and returns the files that changed.

func IsErrorType

func IsErrorType(err error, errorType ErrorType) bool

IsErrorType 检查错误是否为指定类型

func NewDSLAnnotationMissingClosingParenError

func NewDSLAnnotationMissingClosingParenError(keyword, input string, position int) error

func NewDSLAnnotationMissingOpeningParenError

func NewDSLAnnotationMissingOpeningParenError(keyword, input string, position int) error

func NewDSLArrayEntryTypeError

func NewDSLArrayEntryTypeError(key, expected string, actual any) error

func NewDSLArrayMissingClosingBracketError

func NewDSLArrayMissingClosingBracketError(position int) error

func NewDSLDuplicateKeyError

func NewDSLDuplicateKeyError(key string, position int) error

NewDSLDuplicateKeyError 创建 DSL 重复 key 错误

func NewDSLEmptyArrayError

func NewDSLEmptyArrayError(key string) error

func NewDSLFieldNotFoundError

func NewDSLFieldNotFoundError(field, structName string) error

NewDSLFieldNotFoundError 创建 DSL 字段不存在错误

func NewDSLIndexDuplicateError

func NewDSLIndexDuplicateError(indexName, fields string) error

NewDSLIndexDuplicateError 创建索引定义重复错误

func NewDSLIndexFieldDuplicateError

func NewDSLIndexFieldDuplicateError(indexName, field string) error

NewDSLIndexFieldDuplicateError 创建索引字段重复错误

func NewDSLInvalidNumberError

func NewDSLInvalidNumberError(numberStr string, position int) error

NewDSLInvalidNumberError 创建 DSL 无效数字错误

func NewDSLInvalidPrimaryKeyError

func NewDSLInvalidPrimaryKeyError(value, reason string) error

func NewDSLMissingBraceError

func NewDSLMissingBraceError(position int) error

func NewDSLTokenizeError

func NewDSLTokenizeError(input string, position int, char byte) error

NewDSLTokenizeError 创建 DSL 词法分析错误

func NewDSLUnclosedStringError

func NewDSLUnclosedStringError(input string, position int) error

NewDSLUnclosedStringError 创建 DSL 未闭合字符串错误

func NewDSLUnexpectedObjectTokenError

func NewDSLUnexpectedObjectTokenError(actual string, position int) error

func NewDSLUnexpectedTokenError

func NewDSLUnexpectedTokenError(expected, actual string, position int) error

NewDSLUnexpectedTokenError 创建 DSL 意外 token 错误

func NewDSLUnexpectedTopLevelTokenError

func NewDSLUnexpectedTopLevelTokenError(actual string, position int) error

func NewDSLUnexpectedValueTokenError

func NewDSLUnexpectedValueTokenError(actual string, position int) error

func NewDSLUnknownIndexKeyError

func NewDSLUnknownIndexKeyError(actual string) error

func NewDSLUnknownTableKeyError

func NewDSLUnknownTableKeyError(actual string) error

func NewDSLValueTypeError

func NewDSLValueTypeError(key, expected string, actual any) error

func NewDuplicateEmbeddedError

func NewDuplicateEmbeddedError(typeName, structName string) error

NewDuplicateEmbeddedError 创建重复嵌入类型错误

func NewDuplicateFieldError

func NewDuplicateFieldError(fieldName, structName string) error

NewDuplicateFieldError 创建重复字段错误

func NewEmbeddedCycleError

func NewEmbeddedCycleError(structName string) error

NewEmbeddedCycleError 创建嵌入结构体循环引用错误

func NewFieldInvalidSelectorError

func NewFieldInvalidSelectorError(selectorExpr any) error

NewFieldInvalidSelectorError 创建字段无效选择器错误

func NewFieldUnsupportedCompositionError

func NewFieldUnsupportedCompositionError(description string) error

func NewFieldUnsupportedTypeError

func NewFieldUnsupportedTypeError(typeExpr any) error

NewFieldUnsupportedTypeError 创建字段不支持类型错误

func NewPackageImportError

func NewPackageImportError(packagePath string, cause error) error

NewPackageImportError 创建包导入错误

func Parse

func Parse(packagePath string) ([]*genmodel.StructInfo, string, error)

Parse 解析指定路径的包,返回所有带有表注解的结构体和目录路径

func ParseTableInfo

func ParseTableInfo(
	structName string,
	commentGroup []*ast.CommentGroup,
	structFields map[string]struct{},
	fileSet *token.FileSet,
) (*genmodel.TableMeta, error)

ParseTableInfo 从注释组中解析表元数据,返回 TableMeta 结构体

Types

type DSLArray

type DSLArray []DSLNode

========== DSL AST 结构定义 ========== //

type DSLBool

type DSLBool bool

========== DSL AST 结构定义 ========== //

type DSLNode

type DSLNode any

========== DSL AST 结构定义 ========== //

type DSLNumber

type DSLNumber float64

========== DSL AST 结构定义 ========== //

type DSLObject

type DSLObject map[string]DSLNode

========== DSL AST 结构定义 ========== //

func ParseDSL

func ParseDSL(tokens []Token) (DSLObject, error)

ParseDSL 入口,解析为对象

type DSLString

type DSLString string

========== DSL AST 结构定义 ========== //

type ErrorType

type ErrorType int

ErrorType 表示错误类型

const (
	// Package 相关错误
	ErrorTypePackageImport ErrorType = iota

	// Struct 相关错误
	ErrorTypeDuplicateField
	ErrorTypeDuplicateEmbedded
	ErrorTypeEmbeddedCycle

	// DSL 相关错误
	ErrorTypeDSLTokenize
	ErrorTypeDSLUnexpectedToken
	ErrorTypeDSLUnexpectedValue
	ErrorTypeDSLUnclosedString
	ErrorTypeDSLInvalidNumber
	ErrorTypeDSLMissingBracket
	ErrorTypeDSLMissingBrace
	ErrorTypeDSLDuplicateKey

	// Field 相关错误
	ErrorTypeFieldUnsupportedType
	ErrorTypeFieldInvalidSelector

	// DSL 字段和索引校验
	ErrorTypeDSLFieldNotFound
	ErrorTypeDSLIndexFieldDuplicate
	ErrorTypeDSLIndexDuplicate
)

type FieldTags

type FieldTags struct {
	DB   string
	TSQ  string
	JSON string
}

FieldTags 表示字段标签信息

type ParseResult

type ParseResult struct {
	Structs   []*StructInfo // 解析到的结构体列表
	Directory string        // 目标目录路径
}

ParseResult 解析结果

type ParseState

type ParseState struct {
	// contains filtered or unexported fields
}

ParseState 包含解析过程中的状态信息

type Parser

type Parser struct {
	// contains filtered or unexported fields
}

Parser 结构体

func NewParser

func NewParser(tokens []Token) *Parser

type ParserError

type ParserError struct {
	Type    ErrorType
	Message string
	Context map[string]any
}

ParserError 表示解析器错误

func GetParserError

func GetParserError(err error) *ParserError

GetParserError 获取解析器错误

func (*ParserError) Error

func (e *ParserError) Error() string

Error 实现 error 接口

func (*ParserError) GetContext

func (e *ParserError) GetContext() map[string]any

GetContext 返回错误上下文

func (*ParserError) GetType

func (e *ParserError) GetType() ErrorType

GetType 返回错误类型

type StructInfo

type StructInfo struct {
	*genmodel.StructInfo
	// contains filtered or unexported fields
}

StructInfo 表示一个解析后的结构体信息

type Token

type Token struct {
	Type  TokenType
	Value string
	Pos   int
}

func Tokenize

func Tokenize(input string) ([]Token, error)

Tokenize 将 DSL 字符串分割为 Token 列表

type TokenType

type TokenType int

TokenType 表示 DSL 的 token 类型 标识符、字符串、符号、数组、对象、逗号等

const (
	TokenEOF TokenType = iota
	TokenIdent
	TokenString
	TokenNumber
	TokenBool
	TokenComma
	TokenEqual
	TokenLBracket // [
	TokenRBracket // ]
	TokenLBrace   // {
	TokenRBrace   // }
	TokenUnknown
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL