Skip to content

v0.2.1

Choose a tag to compare

@tlipoca9 tlipoca9 released this 07 Dec 16:22
· 90 commits to main since this release

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