Skip to content

Releases: tlipoca9/devgen

v0.3.6

09 Jan 10:12

Choose a tag to compare

v0.3.6 Release Notes

新功能

1. Kubernetes 资源验证注解

新增四个 Kubernetes 相关的验证注解,用于验证资源规格和 DNS 名称:

@dns1123_label - DNS 标签验证

验证字符串符合 RFC 1123 DNS 标签规范,适用于 Kubernetes 对象命名。

// validategen:@validate
type KubernetesObject struct {
    // validategen:@required
    // validategen:@dns1123_label
    Namespace string  // "default", "kube-system" ✓

    // validategen:@required
    // validategen:@dns1123_label
    PodName string  // "my-pod-123" ✓, "Pod" ✗, "-invalid" ✗
}

DNS 标签规则:

  • 只能包含小写字母、数字和连字符
  • 必须以字母或数字开头和结尾
  • 每个标签最多 63 个字符

@cpu - CPU 资源验证

验证 Kubernetes CPU 资源数量格式。

// validategen:@validate
type PodSpec struct {
    // validategen:@required
    // validategen:@cpu
    CPURequest string  // "500m", "1", "2" ✓
}

支持的格式: 毫核 (500m)、核数 (1, 0.5)、科学记数法 (1e3m)

@memory - 内存资源验证

验证 Kubernetes 内存资源数量格式。

// validategen:@validate
type PodSpec struct {
    // validategen:@required
    // validategen:@memory
    MemoryRequest string  // "128Mi", "1Gi" ✓
}

支持的格式: 二进制单位 (128Mi, 1Gi)、十进制单位 (128M, 1G)、字节数

@disk - 磁盘资源验证

验证 Kubernetes 存储资源数量格式。

// validategen:@validate
type PersistentVolume struct {
    // validategen:@required
    // validategen:@disk
    StorageRequest string  // "10Gi", "100Gi" ✓
}

2. 字符串枚举别名类型支持

@oneof_enum 现在支持字符串类型的枚举别名:

// enumgen:@enum(string)
type Priority string

const (
    PriorityLow    Priority = "low"
    PriorityMedium Priority = "medium"
    PriorityHigh   Priority = "high"
)

// validategen:@validate
type Task struct {
    // validategen:@oneof_enum(Priority)
    Priority Priority  // 自动验证是否为有效的 Priority 值
}

改进

文档更新

  • 更新 validategen README,添加新注解的详细说明和示例
  • 更新 AI Rules 文档,包含 Kubernetes 资源验证的使用指南

代码清理

  • 移除未使用的函数,减少代码体积
  • 修复 Makefile 中 ginkgo coverprofile 路径问题

升级指南

直接升级即可,无破坏性变更:

go install github.com/tlipoca9/devgen/cmd/devgen@v0.3.6

English

v0.3.5

14 Dec 15:23

Choose a tag to compare

devgen v0.3.5 发布说明

🚀 新功能

validategen: @default 注解支持

新增 @default 注解,用于为结构体字段设置默认值。当字段为零值时,自动应用默认值。

使用示例

// validategen:@validate
type Config struct {
    // validategen:@default(localhost)
    Host string  // 默认 "localhost"

    // validategen:@default(8080)
    Port int  // 默认 8080

    // validategen:@default(true)
    Enabled bool  // 默认 true

    // validategen:@default(1.0)
    Version float64  // 默认 1.0
}

生成的代码

生成独立的 SetDefaults() 方法,在验证前调用:

cfg := &Config{}
cfg.SetDefaults()  // 设置默认值
if err := cfg.Validate(); err != nil {
    // 处理错误
}

支持的类型

  • string - 设置默认字符串值
  • 数值类型 (int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64) - 设置默认数值
  • bool - 设置默认布尔值 (true/false)

validategen: SetDefaults 测试生成

使用 --include-tests 标志时,自动为 SetDefaults() 方法生成测试代码:

devgen --include-tests ./...

📝 文档更新

  • validategen README 新增 @default 注解说明
  • 更新注解速查表

🔄 从 v0.3.4 升级

无破坏性变更,直接升级即可使用新功能。

go install github.com/tlipoca9/devgen/cmd/devgen@v0.3.5

完整更新日志: v0.3.4...v0.3.5


English

v0.3.4

10 Dec 06:49

Choose a tag to compare

devgen v0.3.4 发布说明

🚀 新功能

统一 AI 规则管理

  • 项目级规则配置:新增 .devgen/rules/ 目录支持,允许项目自定义 AI 规则
  • 配置化规则加载:通过 devgen.toml 中的 [rules] 配置控制规则来源
  • 多 IDE 批量生成:支持 --agent all 一次性为所有 IDE 生成规则文件
  • 规则文件解析器:新增 Markdown + YAML frontmatter 解析支持

🔧 改进

适配器系统优化

  • Kiro 适配器:修复 fileMatchPattern 处理逻辑,支持 description 字段
  • CodeBuddy/Cursor 适配器:空 globs 时不生成 globs 字段,避免无效配置
  • 默认匹配模式:Kiro 在 fileMatch 模式下默认匹配所有文件 (**/*)

规则管理重构

  • 目录迁移:将项目规则从各 IDE 目录迁移到统一的 .devgen/rules/
  • 条件加载:仅在显式配置 source_dir 时加载项目规则
  • 内置规则控制:通过 include_builtin 选项控制是否包含 devgen 内置规则

📝 配置示例

devgen.toml 配置

[rules]
# 项目规则目录(可选)
source_dir = ".devgen/rules"
# 是否包含内置规则(默认 true)
include_builtin = true

项目规则文件格式

---
description: 自定义规则描述
globs:
  - "**/*.go"
  - "**/*.ts"
alwaysApply: false
---

# 规则标题

规则内容...

🛠️ 使用方法

# 为所有 IDE 生成规则
devgen rules --agent all -w

# 为特定 IDE 生成规则
devgen rules --agent kiro -w
devgen rules --agent codebuddy -w
devgen rules --agent cursor -w

# 预览规则内容(不写入文件)
devgen rules --agent kiro

📊 技术细节

  • 新增文件genkit/rule_loader.gogenkit/rule_loader_test.go
  • 配置扩展genkit/config.go 新增 RulesConfig 结构
  • 测试覆盖:新增 325 行测试代码,确保功能稳定性
  • 文档更新:README 更新 AI Rules 功能说明

🔄 迁移指南

从 v0.3.3 升级

  1. 自动迁移:现有 IDE 规则文件已自动清理
  2. 配置可选:无需修改现有配置,默认行为保持不变
  3. 新功能启用:如需使用项目规则,在 devgen.toml 中配置 [rules] 部分

项目规则设置

# 1. 创建规则目录
mkdir -p .devgen/rules

# 2. 添加配置到 devgen.toml
echo '[rules]' >> devgen.toml
echo 'source_dir = ".devgen/rules"' >> devgen.toml

# 3. 创建自定义规则文件
# 在 .devgen/rules/ 中添加 .md 文件

# 4. 生成 IDE 规则
devgen rules --agent all -w

完整更新日志: v0.3.3...v0.3.4


English

v0.3.3

09 Dec 06:58

Choose a tag to compare

v0.3.3 - 2025-12-09

🎉 新特性

AI Rules Adapter 系统

实现了全新的 AI Rules Adapter 系统,支持为多个 AI 编程助手生成定制化的规则文档。

支持的 AI 助手:

  • Kiro - 输出到 .kiro/steering/*.md
  • CodeBuddy - 输出到 .codebuddy/rules/*.mdc
  • Cursor - 输出到 .cursor/rules/*.mdc

新增命令:

# 列出支持的 AI 助手
devgen rules --list-agents

# 预览规则内容(不写入文件)
devgen rules --agent kiro

# 生成规则文件
devgen rules --agent kiro -w
devgen rules --agent codebuddy -w
devgen rules --agent cursor -w

VSCode 扩展增强

  • 自动检测 Kiro IDE 并生成对应的 rules 文件
  • 改进了 AI IDE 检测逻辑

📚 文档改进

Rules 文档大幅扩充

所有工具的 rules 文档都进行了全面改进和扩充:

  • devgen.md - devgen 综合使用指南
  • devgen-plugin.md - 插件开发完整指南
  • devgen-genkit.md - genkit API 详细参考
  • devgen-rules.md - AI Rules 系统文档
  • devgen-tool-enumgen.md - enumgen 详细文档
  • devgen-tool-validategen.md - validategen 详细文档

每个文档都包含:

  • 详细的使用场景说明
  • 完整的代码示例
  • 常见错误和解决方案
  • 最佳实践建议

新增文档

  • docs/rules-adapter.md - Adapter 系统中文文档
  • docs/rules-adapter_EN.md - Adapter 系统英文文档
  • .kiro/steering/release-workflow.md - 发布流程文档

🔧 改进

代码质量

  • 修复测试中 os.Chdir 的错误处理
  • 添加了完整的 adapter 系统测试
  • 改进了测试覆盖率

文档一致性

  • 移除了不支持的 GitHub Copilot 相关文档
  • 将 Windsurf 相关引用统一替换为 Kiro
  • 更新了 README 中的 AI Rules 说明

🏗️ 架构改进

Adapter 注册表

实现了可扩展的 adapter 注册表系统:

type AgentAdapter interface {
    Name() string
    OutputDir() string
    Transform(rule genkit.Rule) (filename string, content string, err error)
}

内置 adapters:

  • KiroAdapter - 支持 YAML frontmatter 和 fileMatchPattern
  • CodeBuddyAdapter - 支持 .mdc 格式和 globs
  • CursorAdapter - 与 CodeBuddy 格式兼容

📦 技术细节

新增文件

  • genkit/adapter.go - Adapter 接口定义
  • genkit/adapter_kiro.go - Kiro adapter 实现
  • genkit/adapter_codebuddy.go - CodeBuddy adapter 实现
  • genkit/adapter_cursor.go - Cursor adapter 实现
  • genkit/adapter_registry.go - Adapter 注册表
  • genkit/adapter_test.go - Adapter 测试
  • cmd/devgen/rules_command.go - Rules 命令实现
  • cmd/devgen/rules_command_test.go - Rules 命令测试

变更统计

52 files changed, 21,666 insertions(+), 3,690 deletions(-)

🚀 使用示例

为你的 AI 助手生成 rules

# 如果你使用 Kiro
devgen rules --agent kiro -w

# 如果你使用 CodeBuddy
devgen rules --agent codebuddy -w

# 如果你使用 Cursor
devgen rules --agent cursor -w

生成后,AI 助手将能够:

  • ✅ 理解 devgen 的注解语法
  • ✅ 提供准确的代码补全建议
  • ✅ 给出正确的使用示例
  • ✅ 建议最佳实践

📝 升级说明

从 v0.3.2 升级到 v0.3.3:

go install github.com/tlipoca9/devgen/cmd/devgen@v0.3.3

如果你使用 VSCode 扩展,它会自动更新。

🙏 致谢

感谢所有使用 devgen 并提供反馈的开发者!


完整变更日志: v0.3.2...v0.3.3


English

v0.3.2

09 Dec 03:40

Choose a tag to compare

v0.3.2 Release Notes

Bug 修复

validategen: 修复 @oneof_enum 对 string 类型字段和跨包导入的支持

问题描述:

  1. @oneof_enum 注解之前仅支持自定义枚举类型字段,不支持 string 类型字段
  2. 当枚举类型定义在其他包时,生成的验证代码和测试代码缺少必要的 import 语句

修复内容:

  1. 支持 string 类型字段使用 @oneof_enum

    现在可以对 string 类型字段使用 @oneof_enum 注解:

    // validategen:@validate
    type Config struct {
        // validategen:@oneof_enum(Status)
        StatusStr string  // 验证值必须是 Status 枚举的有效字符串
    }
  2. 支持跨包枚举类型

    当引用其他包的枚举类型时,生成的代码会自动添加正确的 import:

    import "myapp/common"
    
    // validategen:@validate
    type Order struct {
        // validategen:@oneof_enum(common.Priority)
        Priority string  // 引用 common 包的 Priority 枚举
    }
  3. 测试代码跨包导入修复

    生成的 *_validate_test.go 文件现在会正确导入跨包类型。

新增示例:

  • cmd/validategen/examples/common/ - 跨包枚举类型示例
    • types.go - 定义 Status 枚举
    • common_enum.go - 生成的枚举辅助方法

English

v0.3.1

08 Dec 19:56

Choose a tag to compare

v0.3.1 Release Notes

新功能

1. 测试文件自动生成 (--include-tests)

新增 --include-tests 命令行标志,让 devgen 在生成代码的同时自动生成对应的测试文件。

devgen --include-tests ./...

genkit 框架变更:

  • Options 新增 IncludeTests 字段
  • Generator 新增 IncludeTests() 方法,供工具查询是否需要生成测试文件

enumgen 生成的测试文件 (*_enum_test.go):

  • Test<Type>_IsValid - 测试所有枚举值的有效性
  • Test<Type>_String - 测试 String() 方法(如启用)
  • Test<Type>Enums_List - 验证 List() 返回的枚举值列表
  • Test<Type>Enums_Names - 验证 Names() 返回的名称列表
  • Test<Type>Enums_Name - 测试 Name() 方法
  • Test<Type>Enums_ContainsName - 测试 ContainsName() 方法
  • JSON/Text/SQL 序列化测试(如启用对应选项)

validategen 生成的测试文件 (*_validate_test.go):

  • 为每个验证类型生成表驱动测试
  • 自动生成有效和无效的测试用例
  • 支持 @required@gt@lt@gte@lte@email@url 等规则的测试

validategen 内部重构:

  • Validate() 方法拆分为三部分:
    • _validate() - 字段级验证(不含 @method
    • _validateMethod() - 仅 @method 验证
    • Validate() - 组合调用上述方法 + postValidate()
  • 这种拆分便于单独测试字段验证逻辑,无需构造嵌套类型

2. VSCode 扩展 AI Rules 生成提示

当在 AI IDE(如 CodeBuddy)中打开 Go 项目时,扩展会询问是否生成 .codebuddy/rules/ 文件:

  • 生成 - 本次生成
  • 始终生成 - 保存到工作区设置,以后自动生成
  • 不再提示 - 保存到工作区设置,不再询问

配置项:devgen.rules.autoGenerate(可选值:askalwaysnever

3. Duration 验证代码可读性改进

validategen 生成的 duration 比较代码现在使用 time.Duration 常量,更易读:

// 之前
if d < 1000000000 { // 1s
    return errors.New("...")
}

// 现在
if d < 1*time.Second {
    return errors.New("...")
}

改进

Makefile 变更

  • 新增 generate target,运行 go run ./cmd/devgen --include-tests ./...
  • all target 现在包含 generate 步骤:tidy → generate → lint → test → build
  • test target 添加 --keep-going 参数,测试失败时继续运行其他测试

插件加载日志优化

# 之前
Loaded plugin: markgen

# 现在
📂  [LOAD] Loaded 1 plugin(s)
           • 'markgen'

English

v0.3.0

08 Dec 17:37

Choose a tag to compare

Release v0.3.0

发布日期: 2025-12-08

概述

v0.3.0 是一个重要的功能版本,新增了 AI Rules 系统,让 AI 编程助手(如 CodeBuddy、Cursor 等)能够理解 devgen 工具的使用方式,提供更准确的代码建议。

新特性

AI Rules 系统

新增 devgen rules 命令,用于生成 AI 编程助手可以理解的规则文件。

列出支持的 AI Agents:

devgen rules --list-agents

预览 Rules 内容:

devgen rules --agent codebuddy

生成 Rules 文件:

devgen rules --agent codebuddy -w

生成的规则文件位于 .codebuddy/rules/ 目录,包含:

  • enumgen.md - 枚举代码生成工具使用指南
  • validategen.md - 结构体验证代码生成工具使用指南
  • devgen.md - devgen 综合使用指南
  • devgen-plugin.md - 插件开发指南
  • devgen-genkit.md - genkit API 参考
  • devgen-rules.md - AI Rules 系统说明

RuleTool 接口

插件开发者可以实现 RuleTool 接口为自定义插件提供 AI Rules:

type RuleTool interface {
    Tool
    Rules() []Rule
}

type Rule struct {
    Name        string   // 规则文件名(不含扩展名)
    Description string   // 简短描述
    Globs       []string // 文件匹配模式
    AlwaysApply bool     // 是否始终加载
    Content     string   // 规则内容(Markdown)
}

VSCode 插件增强

  • 新增 devgen.generateRules 命令,可在 IDE 中直接生成 AI Rules
  • 支持自动检测当前工作区并生成对应的规则文件

改进

Logger 增强

  • 新增 Logger.Warnf() 方法用于输出警告信息
  • 新增 Logger.Debugf() 方法用于输出调试信息
  • 日志输出格式优化,支持颜色高亮

升级指南

从 v0.2.x 升级

直接升级即可,无破坏性变更:

go install github.com/tlipoca9/devgen/cmd/devgen@v0.3.0

生成 AI Rules

升级后,运行以下命令生成 AI Rules:

devgen rules --agent codebuddy -w

然后将生成的 .codebuddy/rules/ 目录提交到版本控制,让团队成员都能享受 AI 辅助编程的便利。


English

v0.2.3

08 Dec 15:28

Choose a tag to compare

Release v0.2.3

发布日期: 2025-12-08

概述

v0.2.3 是一个功能增强版本,validategen 新增了 @oneof_enum 注解用于枚举类型验证,新增 golangcilint 工具用于 IDE 诊断集成,VSCode 插件支持启动时全局验证。

新特性

validategen: @oneof_enum 枚举类型验证

新增 @oneof_enum(EnumType) 注解,用于验证字段值是否为指定枚举类型的有效值。与 @oneof 不同,@oneof_enum 自动从 enumgen 生成的 EnumTypeEnums.Contains() 方法获取有效值,避免在 enum 新增值时需要同时修改 @oneof 注解。

同包 enum:

// enumgen:@enum(string)
type Role int

const (
    RoleAdmin Role = iota
    RoleUser
    RoleGuest
)

// validategen:@validate
type User struct {
    // validategen:@oneof_enum(Role)
    Role Role  // 自动使用 RoleEnums.Contains() 验证
}

跨包 enum(完整 import 路径):

// validategen:@validate
type Request struct {
    // validategen:@oneof_enum(github.com/myorg/pkg/types.Status)
    Status types.Status  // 自动 import "github.com/myorg/pkg/types"
}

跨包 enum(指定 import alias):

// validategen:@validate
type Request struct {
    // validategen:@oneof_enum(mytypes:github.com/myorg/pkg/types.Status)
    Status mytypes.Status  // 使用指定的 alias
}

优势:当 enum 新增值时,只需修改 enum 定义,无需修改 @oneof_enum 注解,符合单一修改原则。

golangcilint: IDE 诊断集成工具

新增 golangcilint 工具,用于 IDE 诊断集成。该工具可以作为 golangci-lint 的自定义 linter 使用,在编辑器中实时显示 devgen 注解的错误和警告。

VSCode 插件: 启动时全局验证

VSCode 插件现在支持在启动时运行全局 dry-run 验证,自动检测工作区内所有 Go 文件的 devgen 注解问题,并在 Problems 面板中显示诊断信息。

改进

devgen config 命令增强

devgen config 命令输出更详细的帮助信息,包括:

  • 所有可用工具及其注解
  • 参数类型和允许值
  • 配置文件格式说明
  • 输出格式选项

升级指南

从 v0.2.2 升级

直接升级即可,无破坏性变更:

go install github.com/tlipoca9/devgen/cmd/devgen@v0.2.3

如果使用了 @oneof_enum 验证,重新运行 devgen 生成代码。


English

v0.2.2

08 Dec 08:38

Choose a tag to compare

Release v0.2.2

发布日期: 2025-12-08

概述

v0.2.2 是一个功能增强版本,validategen 新增了 duration 验证注解系列,支持指针数值类型的比较验证,并将 @method 注解的验证逻辑从 VSCode 插件移至 CLI 工具。

新特性

validategen: Duration 验证注解

新增三个用于验证 time.Duration 字符串的注解:

@duration - 格式验证

验证字符串是有效的 Go duration 格式(如 1h30m500ms):

// validategen:@validate
type Config struct {
    // validategen:@duration
    Timeout string  // 必须是有效的 duration 格式
}

@duration_min(duration) - 最小值验证

验证 duration 字符串的值不小于指定值:

// validategen:@validate
type Config struct {
    // validategen:@duration_min(1s)
    Timeout string  // 超时时间至少 1 秒

    // validategen:@duration_min(100ms)
    RetryInterval string  // 重试间隔至少 100 毫秒
}

@duration_max(duration) - 最大值验证

验证 duration 字符串的值不大于指定值:

// validategen:@validate
type Config struct {
    // validategen:@duration_max(1h)
    Timeout string  // 超时时间最多 1 小时

    // validategen:@duration_max(30s)
    RetryInterval string  // 重试间隔最多 30 秒
}

组合使用

三个注解可以组合使用,生成的代码会合并为一个代码块,只解析一次:

// validategen:@validate
type Config struct {
    // validategen:@duration
    // validategen:@duration_min(1s)
    // validategen:@duration_max(1h)
    RetryInterval string  // 有效 duration,范围 1s ~ 1h
}

生成的代码(优化后):

if x.RetryInterval != "" {
    if _dur, _err := time.ParseDuration(x.RetryInterval); _err != nil {
        errs = append(errs, fmt.Sprintf("RetryInterval must be a valid duration..."))
    } else {
        if _dur < 1000000000 {
            errs = append(errs, fmt.Sprintf("RetryInterval must be at least 1s..."))
        }
        if _dur > 3600000000000 {
            errs = append(errs, fmt.Sprintf("RetryInterval must be at most 1h..."))
        }
    }
}

性能数据

注解 Mean (1000次) 单次约
@duration (valid) 25.45µs 25.45ns
@duration (invalid) 67.56µs 67.56ns
@duration_min 11.78µs 11.78ns
@duration_max ~11µs ~11ns
组合使用 ~11µs ~11ns

validategen: 指针数值类型支持

@min@max@gt@gte@lt@lte@eq@ne 等比较注解现在支持指针数值类型:

// validategen:@validate
type Config struct {
    // validategen:@min(1)
    // validategen:@max(65535)
    Port *int  // 可选端口,非 nil 时验证范围

    // validategen:@gte(0)
    Timeout *float64  // 可选超时,非 nil 时验证 >= 0
}

生成的代码

if x.Port != nil {
    if *x.Port < 1 {
        errs = append(errs, "Port must be at least 1...")
    }
    if *x.Port > 65535 {
        errs = append(errs, "Port must be at most 65535...")
    }
}

validategen: @method 验证移至 CLI

@method 注解的参数验证从 VSCode 插件移至 CLI 工具,提供更准确的编译时检查:

  • 验证方法是否存在于目标类型上
  • 验证方法签名是否正确(无参数,返回 error
  • 提供清晰的错误信息和位置
错误码 说明
E010 方法不存在
E011 方法签名不正确

文档更新

  • README.md / README_EN.md 新增 duration 验证注解文档
  • 更新注解速查表
  • 添加 duration 基准测试结果

升级指南

从 v0.2.1 升级

直接升级即可,无破坏性变更:

go install github.com/tlipoca9/devgen/cmd/devgen@v0.2.2

如果使用了 duration 验证,重新运行 devgen 生成代码。


English

v0.2.1

07 Dec 16:22

Choose a tag to compare

Release v0.2.1

发布日期: 2025-12-07

概述

v0.2.1 是一个重要的功能增强版本,新增了 --dry-run 命令用于 IDE 集成验证,enumgen 支持字符串底层类型,validategen 实现了 ValidatableTool 接口提供静态验证,VSCode 扩展改进了诊断功能和类型解析。

新特性

devgen: --dry-run 命令

新增 --dry-run--json 标志,用于验证注解而不写入文件:

devgen --dry-run ./...              # 验证并预览
devgen --dry-run --json ./...       # JSON 格式输出,用于 IDE 集成

输出格式:

{
  "success": false,
  "diagnostics": [
    {
      "severity": "error",
      "message": "@method annotation can only be applied to custom types",
      "file": "examples.go",
      "line": 153,
      "column": 2,
      "tool": "validategen",
      "code": "E009"
    }
  ],
  "stats": {
    "packagesLoaded": 1,
    "filesGenerated": 0,
    "errorCount": 1,
    "warningCount": 0
  }
}

enumgen: 字符串底层类型支持

enumgen 现在支持 string 作为底层类型:

// enumgen:@enum(string)
type Color string

const (
    ColorRed   Color = "red"
    ColorGreen Color = "green"
    ColorBlue  Color = "blue"
)

生成的方法:

  • IsValid() - 检查值是否有效
  • String() - 返回字符串表示
  • List() - 返回所有有效值
  • Contains(string) - 检查字符串是否为有效值
  • Parse(string) - 解析字符串为枚举值

注意: 字符串类型枚举不生成 Name()Names()ContainsName() 方法,也不支持 @name 注解。

支持的底层类型:

  • 整数类型: int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64
  • 字符串类型: string

enumgen: ValidatableTool 接口

enumgen 实现 ValidatableTool 接口,提供静态验证:

错误码 说明
E001 不支持的底层类型
E002 字符串类型不支持 @name 注解
E003 重复的枚举名称
E004 @name 注解缺少参数

validategen: ValidatableTool 接口

validategen 实现 ValidatableTool 接口,提供全面的静态验证:

  • 参数验证: 检查所有注解参数是否存在且格式正确
  • 参数类型检查: 数值参数必须是有效数字
  • 字段类型检查: 使用 UnderlyingType 验证注解与字段类型的兼容性
  • @method 验证: 检查目标类型是否为自定义类型
错误码 说明
E001 @OneOf 缺少值
E002 @Format 缺少格式参数
E003 不支持的 @Format 格式
E004 @regex 缺少模式参数
E005 无效的正则表达式
E006 注解缺少必需参数
E007 参数值无效(如数值参数不是数字)
E008 字段类型不支持该注解
E009 @method 只能用于自定义类型

genkit: 新增类型和 API

  • ValidatableTool 接口: 工具可实现此接口提供静态验证
  • DiagnosticCollector: 流式 API 用于收集诊断信息
  • DryRunResult: dry-run 结果结构体
  • Diagnostic: 诊断信息结构体,包含 severity、message、file、line、column、tool、code
  • Field.UnderlyingType: 字段的底层类型(用于自定义类型如 type Email string
  • Enum.UnderlyingType: 枚举的底层类型

VSCode 扩展改进

Dry-run 验证集成

  • 新增 devgen.validate 命令,手动触发验证
  • 新增 devgen.validateOnSave 配置项(默认 true
  • 保存和打开 Go 文件时自动运行 devgen --dry-run --json 验证
  • 验证结果显示在 Problems 面板

字段类型解析增强

修复了复杂类型的解析,现在正确支持:

  • []Address - 切片类型
  • []*Address - 指针切片
  • map[string]Address - map 类型
  • map[string]*Address - 指针值 map

诊断清理修复

修复了保存文件后旧的诊断错误不清理的问题。

安装逻辑优化

检查 devgen 是否存在后再决定是否自动安装,避免覆盖本地开发版本。

插件版本兼容性

检测 genkit 包修改时间,自动清理过期的插件缓存,解决插件版本不匹配问题。

Bug 修复

  • 修复 devgen --dry-run --json 输出被日志(emoji 和 ANSI 颜色码)污染的问题
  • 修复 VSCode 扩展中 []Address 被错误识别为 map 类型的问题
  • 修复 dry-run 诊断在错误修复后不清理的问题
  • 修复插件版本不匹配时的无限重试安装问题

升级指南

从 v0.2.0 升级

  1. 重新安装 devgen

    go install github.com/tlipoca9/devgen/cmd/devgen@v0.2.1
  2. VSCode 扩展:更新到最新版本

  3. 重新生成代码:如果使用了 enumgen 的字符串类型枚举,需要重新运行 devgen


English