ConsCoder 是一个跨语言的常量代码生成工具,可以从 YAML 配置文件批量生成多种编程语言的常量定义代码。
- 📝 YAML 配置驱动:使用简单的 YAML 格式定义常量
- 🚀 多语言支持:支持 Python、Go、Java、Swift、Kotlin、TypeScript、JavaScript
- 🎯 双模式生成:
- class 模式:生成面向对象的类结构,支持反向查找
- const 模式:生成简单的常量定义
- 📦 批量处理:自动扫描目录下所有 YAML 文件并批量生成
- 🔧 灵活配置:支持自定义包名、头部注释等
# 克隆仓库
git clone https://github.com/yourusername/cons-coder.git
cd cons-coder
# 安装依赖
go mod download
# 构建二进制文件
./build.sh
# 安装到系统路径(可选)
sudo ./install.sh
go install github.com/yourusername/cons-coder@latest
cons-coder --dir <YAML目录> --output <输出目录> --lang <语言> [选项]
-d, --dir
:YAML 配置文件目录-o, --output
:生成代码的输出目录-l, --lang
:目标编程语言 (python/go/java/swift/kotlin/typescript/javascript)
-m, --mode
:生成模式 (class/const),默认为 class-p, --package
:包名(Go/Java/Kotlin 语言使用)--header
:自定义头部注释,默认为 "Generated by ConsCoder CLI tool. DO NOT EDIT."-h, --help
:显示帮助信息-v, --version
:显示版本信息
# 生成 Python 类模式代码
cons-coder --dir ./data --output ./output/python --lang python
# 生成 Go 常量模式代码
cons-coder --dir ./data --output ./output/go --lang go --mode const --package constants
# 生成 Java 代码并指定包名
cons-coder --dir ./data --output ./output/java --lang java --package com.example.constants
# 生成 TypeScript 代码
cons-coder --dir ./data --output ./output/ts --lang typescript --mode class
# 使用提供的测试脚本
./test.sh
YAML 文件使用简单的键值对格式定义常量:
# 文件: data/user_role.yaml
# 用户角色
normal: 1 # 普通用户
admin: 2 # 管理员
super_admin: 3 # 超级管理员
guest: 0 # 访客
格式说明:
- 第一行注释(以
#
开头)作为常量组的描述 - 每个键值对定义一个常量
- 键为常量名称(snake_case)
- 值为常量的数值
- 行内注释(
#
后的内容)作为常量的描述
生成面向对象的类结构,提供值到名称的反向查找功能:
Python 示例:
class UserRole:
"""用户角色"""
GUEST = 0 # 访客
NORMAL = 1 # 普通用户
ADMIN = 2 # 管理员
SUPER_ADMIN = 3 # 超级管理员
@classmethod
def get_name(cls, value):
"""根据值获取常量名称"""
for name, val in cls.__dict__.items():
if not name.startswith('_') and not callable(val) and val == value:
return name
return None
生成简单的常量定义:
Python 示例:
# user_role 用户角色
USER_ROLE_GUEST = 0 # 访客
USER_ROLE_NORMAL = 1 # 普通用户
USER_ROLE_ADMIN = 2 # 管理员
USER_ROLE_SUPER_ADMIN = 3 # 超级管理员
语言 | Class 模式 | Const 模式 | 包名支持 | 索引文件 |
---|---|---|---|---|
Python | ✅ | ✅ | ❌ | ✅ |
Go | ✅ | ✅ | ✅ | ❌ |
Java | ✅ | ✅ | ✅ | ❌ |
Swift | ✅ | ✅ | ❌ | ❌ |
Kotlin | ✅ | ✅ | ✅ | ❌ |
TypeScript | ✅ | ✅ | ❌ | ✅ |
JavaScript | ✅ | ✅ | ❌ | ✅ |
cons-coder/
├── main.go # 主程序入口
├── parser/ # YAML 解析器
│ └── parser.go
├── generator/ # 代码生成器
│ ├── base.go # 基础生成器接口
│ ├── python.go # Python 生成器
│ ├── go.go # Go 生成器
│ ├── java.go # Java 生成器
│ ├── swift.go # Swift 生成器
│ ├── kotlin.go # Kotlin 生成器
│ ├── typescript.go # TypeScript 生成器
│ └── javascript.go # JavaScript 生成器
├── utils/ # 工具函数
│ └── utils.go
├── data/ # 示例 YAML 配置文件
├── output/ # 生成的代码输出目录
│ ├── class/ # Class 模式输出
│ └── const/ # Const 模式输出
├── build.sh # 构建脚本
├── install.sh # 安装脚本
└── test.sh # 测试脚本
cons-coder --dir ./data --output ./output --lang python \
--header "© 2025 MyCompany. All rights reserved."
# .github/workflows/generate-constants.yml
name: Generate Constants
on:
push:
paths:
- 'data/**/*.yaml'
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: 1.19
- name: Build ConsCoder
run: go build -o cons-coder main.go
- name: Generate Constants
run: |
./cons-coder --dir ./data --output ./generated/python --lang python
./cons-coder --dir ./data --output ./generated/go --lang go --package constants
- name: Commit Generated Code
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add generated/
git commit -m "Update generated constants"
git push
- 版本控制:将 YAML 配置文件纳入版本控制,生成的代码可选择性纳入
- 命名规范:YAML 文件名使用 snake_case,与生成的类名/常量前缀对应
- 注释规范:充分利用注释功能,提供清晰的常量描述
- 目录组织:按模块/功能组织 YAML 文件,便于管理
- 自动化生成:集成到构建流程,确保常量定义的一致性
欢迎提交 Issue 和 Pull Request!
- Go 1.19+
- Make(可选)
- 在
generator/
目录创建新的生成器文件 - 实现
Generator
接口 - 在
main.go
中注册新的生成器 - 添加相应的测试用例
MIT License
Your Name your.email@example.com
- 初始版本发布
- 支持 7 种编程语言
- 实现 class 和 const 两种生成模式
- 支持批量处理和自定义配置