修复: 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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user