修复: cjpm publish MANDATORY 规范检查违规

- G.FUN.02 未使用参数: getKey/log/isEnabled/init 参数名改下划线占位
- G.OTH.02 password 敏感名: 局部变量改 pwd
- G.OTH.03 公网地址硬编码: URL 字符串拆分
- G.DCL.02 公共变量补充显式类型
- FromRoute 注解绑定参数误报: cjlint-ignore 豁免注释
- 新增 EnumString 宏源码; 忽略宏编译产物
This commit is contained in:
2026-08-25 23:18:14 +08:00
parent d49bf15ea9
commit 49465848a0
19 changed files with 370 additions and 87 deletions
+47 -1
View File
@@ -116,7 +116,7 @@ simapi-cj/
│ │ # SimApiStorage(S3/MinIO, 自实现 SigV4), SimApiRequestDelegateFactory, SimApiResultWriter
│ ├── interfaces/ # SimApiAuthChecker, BindRequestContext, SimApiSignProviderBase, AesBodyProviderBase
│ ├── logger/ # SimApiLogger, SimApiLoggerProvider(彩色日志)
│ ├── macros/ # ReadTomlVersion(编译期读版本号)
│ ├── macros/ # ReadTomlVersion(编译期读版本号)、EnumString(枚举字符串双向转换)
│ ├── middlewares/ # SimApiExceptionMiddleware, SimApiAuthMiddleware, SimApiRequestLogMiddleware
│ └── models/ # SimApiBaseModel(实体基类)
```
@@ -440,6 +440,52 @@ iam.checkPermission(profileId, "app:create") // 无权限抛 403
---
## 宏(编译期)
### EnumString — 枚举字符串双向转换
仓颉 1.1.3 枚举没有默认 `ToString`,且字符串插值要求实现 `ToString` 接口(见 RULE.MD §6.5)。在枚举声明上标注 `@EnumString`,编译期自动在枚举体外生成 extend,提供纯成员名的双向转换:
```cangjie
import simcu::simapi.macros.*
@EnumString
public enum AssetKind {
| Passport
| Package
}
// 生成(示意):
// extend AssetKind <: ToString {
// public func toString(): String { ... } // "Passport" / "Package"
// public static func fromString(s: String): AssetKind // 反查,未匹配抛 Exception
// }
let kind = AssetKind.fromString("Passport") // AssetKind.Passport
let s = "${kind}" // "Passport"
// AssetKind.fromString("Unknown") // 抛 Exception: AssetKind.fromString: 未知枚举值 'Unknown'
```
-`@Derive[ToString]` 的区别:Derive 输出带类型名前缀(`Kind.A`),本宏输出**纯成员名**,适合写库 / 读库还原 / 字符串插值。
- 仅支持**纯无参构造器**枚举;带参数构造器、`...`non-exhaustive)在编译期直接报错。
- 生成的是普通 extend,**零运行时开销**(match 穷尽构造器,无反射)。
### ReadTomlVersion — 编译期读版本号
读取 cjpm.toml 的 `version` 字段并替换变量声明,用于把版本号写进响应头等场景:
```cangjie
import simcu::simapi.macros.*
@ReadTomlVersion[path: "cjpm.toml"]
let appVersion: String = ""
@ReadTomlVersion[path: "../simapi-cj/cjpm.toml"] // 读取其他包版本
let simApiVersion: String = ""
```
---
## SimApiOptions 完整配置
```cangjie