ワンクリックで
cangjie-regulations
仓颉项目规范准则。包括项目结构规范、命名规范、格式化规范、错误处理规范、测试规范、并发规范、安全规范、文档规范、依赖管理规范、版本控制规范等最佳实践指导
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
仓颉项目规范准则。包括项目结构规范、命名规范、格式化规范、错误处理规范、测试规范、并发规范、安全规范、文档规范、依赖管理规范、版本控制规范等最佳实践指导
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | cangjie-regulations |
| description | 仓颉项目规范准则。包括项目结构规范、命名规范、格式化规范、错误处理规范、测试规范、并发规范、安全规范、文档规范、依赖管理规范、版本控制规范等最佳实践指导 |
本规范基于仓颉语言特性、工具链能力及业界软件工程通用规范,为仓颉项目提供编码层面和项目层面的推荐准则。
project-root/
├── cjpm.toml # 项目配置(必要)
├── src/ # 源代码目录
│ ├── main.cj # 程序入口(executable 项目在根包中有 main 函数)
│ ├── kernal/ # 子包目录,与 package 声明一致
│ │ ├── engine.cj
│ │ └── driver.cj
│ └── utils/
│ ├── shell.cj
│ └── shell_test.cj # shell.cj 对应的单元测试程序(可选)
├── tests/ # 集成测试/端到端测试(可选)
├── bench/ # 基准测试(可选)
├── docs/ # 项目文档(可选)
├── examples/ # 示例代码(可选)
├── build.cj # 构建脚本(可选)
├── cangjie-format.toml # 格式化配置(可选)
├── target/ # 构建输出(不提交到版本控制)
├── .gitignore
└── README.md # 项目介绍文档(推荐)
cjpm init --name <name> --type=executable|static|dynamic 初始化项目,确保目录结构和 cjpm.toml 配置正确。cjpm.toml 中的 name、version、cjc-version、output-type 为必填字段。MAJOR.MINOR.PATCH。package 声明必须是文件中第一条非注释语句,且路径与 src/ 下的目录结构匹配。internal/private 控制可见性。package 声明import 语句class/struct/enum/interface)extend)xxx_test.cj 与被测文件 xxx.cj 同目录放置。| 元素 | 规则 | 示例 | 规则编号 |
|---|---|---|---|
| 包名 | 全小写,可含数字和下划线 | network, http_client | G.NAM.01 |
| 源文件名 | 全小写加下划线,.cj 后缀 | http_client.cj, user_service.cj | G.NAM.02 |
| 类/接口/struct/枚举/类型别名 | 大驼峰(PascalCase) | HttpClient, UserService | G.NAM.03 |
| 函数名 | 小驼峰(camelCase) | getData, parseResponse | G.NAM.04 |
全局 let 和 static let 常量 | 全大写下划线分隔(SCREAMING_SNAKE_CASE) | MAX_RETRY_COUNT, DEFAULT_TIMEOUT | G.NAM.05 |
| 变量名 | 小驼峰(camelCase) | itemCount, userName | G.NAM.06 |
| 泛型类型参数 | 大写单字母或 PascalCase | T, K, V, Element | — |
is/has/can/should 等前缀,如 isValid、hasPermission。users、orderItems。create/from/of 前缀,如 createUser、fromJson。toXxx 形式,如 toString、toJson。`type`),但应优先选择替代名称。使用 cjfmt 自动格式化,确保团队代码风格一致。推荐配置:
# cangjie-format.toml
indentWidth = 4
linelimitLength = 120
lineBreakType = "LF"
allowMultiLineMethodChain = false
else/catch/finally 与前一个右大括号同行。..、..=)两侧不留空格。public → open/abstract → override/redef → static。import 语句分组:标准库导入在前,第三方库导入在后,组间用空行分隔。let 声明不可变变量,仅在需要修改时使用 var(G.VAR.01)。const 声明。public 变量和函数必须显式声明类型(G.DCL.02)。_ 命名。param!: Type)用于提升可读性,尤其当参数含义不明确时。|>)和函数组合(~>)提升数据处理链的可读性。sealed 修饰 class/interface 限制继承范围到同一包内,增强可控性。@Derive 自动生成 Equatable、Hashable 等实现。prop/mut prop)替代公开字段,便于后续添加校验逻辑。private,按需提升到 internal → protected → public。open,防止子类绕过安全逻辑(G.SEC.01)。if/match/try 均为表达式),简化赋值逻辑。match 表达式应覆盖所有分支,或显式使用 _ 通配分支。for-in 循环优先使用 where 子句过滤,替代循环体内的 if 判断。Exception,禁止继承 Error(Error 仅用于系统级故障)。catch 块应处理具体异常类型,避免裸 catch (_) 吞掉所有异常。finally 块用于资源清理,不在其中抛出新异常或执行业务逻辑。Resource 接口的对象使用 try-with-resources 自动管理生命周期。Option<T> 而非异常。?? 提供默认值,使用 ?. 安全链式访问。if-let/while-let 进行条件解包。getOrThrow(),仅在确定值存在时使用。spawn 创建轻量级线程。Mutex、synchronized、原子操作。synchronized 块自动管理锁的获取和释放,避免手动 lock/unlock 遗漏。Condition 变量必须在持有对应 Mutex 锁时创建和使用。let)减少共享可变状态的需求。Future<T> 获取异步任务的执行结果。SyncCounter 协调多线程的完成顺序。ThreadLocal 存储线程局部数据,避免不必要的锁竞争。Thread.currentThread.requestCancel())实现线程的优雅终止。std.collection.concurrent 中的 ConcurrentHashMap、ConcurrentLinkedQueue 等)替代手动加锁的普通集合。xxx_test.cj,与被测文件 xxx.cj 同目录放置。@Test 标注测试函数或测试类。@TestCase 标注每个测试用例方法。addPositiveNumbers、throwOnInvalidInput。@Expect(软断言):断言失败后继续执行后续断言,用于收集多个失败信息。@Assert(硬断言):断言失败后立即停止当前测试。@AssertThrows[ExType](expr):验证特定异常类型的抛出。@PowerAssert:在复杂表达式断言失败时显示中间值,便于调试。@BeforeEach/@AfterEach 进行测试前后的初始化和清理。@Test[x in ...])覆盖多组输入数据,减少重复代码。mock<T>()/spy<T>()、@On、@Called)隔离外部依赖。cjpm test --filter "pattern" 运行特定测试。cjcov 生成覆盖率报告,关注分支覆盖率,目标覆盖率 ≥ 80%。@Bench 标注基准测试函数。cjpm bench 运行基准测试。public 类型、函数、属性)必须编写文档注释。* 保持对齐(cjfmt 会自动格式化)。@Deprecated[message: "...", since: "版本号"] 标注废弃的 API,并提供替代方案说明。README.md:项目简介、快速开始、构建与运行方法、依赖说明。CHANGELOG.md(可选):记录版本变更历史。docs/(可选):存放详细的设计文档、API 文档、架构说明。examples/ 目录中,保持可编译和可运行。cjpm.toml 的 [dependencies] 中显式声明。[test-dependencies] 中声明,不打包到正式产物中。[dependencies]
http_lib = { git = "https://example.com/http_lib.git", tag = "v1.2.0" }
utils = { path = "./libs/utils" }
[test-dependencies]
test_helper = { path = "./libs/test_helper" }
cjpm check 检查依赖状态,使用 cjpm update 更新依赖。cjpm tree 查看依赖树,排查间接依赖冲突。std.*)和扩展标准库(stdx.*)提供的功能。Option 类型和模式匹配安全地处理可能缺失的数据。unsafe 块中,最小化 unsafe 代码范围。CPointerResource/CStringResource 等 RAII 类型管理 FFI 内存,避免内存泄漏。@FastNative 仅用于不阻塞、不回调仓颉、执行时间短的 C 函数。open(G.SEC.01)。推荐在 CI/CD 流程中依次执行以下步骤:
cjpm build # 1. 编译构建
cjfmt -d src/ # 2. 代码格式化(格式化后检查是否有变更,有则说明代码未预先格式化)
cjlint -f src/ # 3. 静态代码检查
cjpm test # 4. 运行测试
cjcov --html-details -o output # 5. 生成覆盖率报告
cangjie-format.toml 统一格式化配置。config/cjlint_rule_list.json 定义启用的检查规则集合。build.cj 的 pre-build/post-build 钩子集成自定义检查。cjdb 进行断点调试和变量检查。cjprof 进行 CPU 采样和堆内存分析,定位性能瓶颈。cjcov 的分支覆盖率模式(--branches)检查测试覆盖质量。提供仓颉编程语言核心特性优质文档,当使用仓颉语言做软件开发,或者回答用户关于仓颉语言的问题时,应优先使用此 Skill
当无法从其他Skills中获取有效的仓颉语言知识时,请引用此Skill,所在目录提供仓颉语言/标准库/扩展标准库/工具链的原始文档
提供仓颉语言标准库常用功能速查文档,包括核心类型/集合/时间日期/数学运算/扩展数值/并发同步/并发集合/正则表达式/文件系统/IO流/网络通信/进程管理/排序/环境变量/随机数/二进制端序/整数溢出/Unicode字符/自动派生/反射/摘要算法/类型转换/标准输入输出/命令行参数处理/单元测试框架/弱引用等
提供仓颉语言扩展标准库stdx常用功能速查文档,包括stdx配置构建/json编解码/日志/编码/压缩/序列化/HTTP客户端/HTTP服务端/WebSocket/TLS安全通信等
提供仓颉语言编译器cjc/调试器cjdb/覆盖率检测工具cjcov/代码格式化工具cjfmt/静态检查工具cjlint/性能分析工具cjprof/项目管理工具cjpm的使用文档