@phoenix-wing/kt-codegen 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +4 -0
- package/README.md +328 -0
- package/dist/KtCodegenAdapter.d.ts +42 -0
- package/dist/KtCodegenAdapter.d.ts.map +1 -0
- package/dist/KtCodegenAdapter.js +90 -0
- package/dist/KtCodegenAdapter.js.map +1 -0
- package/dist/KtCodegenApply.d.ts +93 -0
- package/dist/KtCodegenApply.d.ts.map +1 -0
- package/dist/KtCodegenApply.js +194 -0
- package/dist/KtCodegenApply.js.map +1 -0
- package/dist/KtCodegenBlockPresentation.d.ts +14 -0
- package/dist/KtCodegenBlockPresentation.d.ts.map +1 -0
- package/dist/KtCodegenBlockPresentation.js +56 -0
- package/dist/KtCodegenBlockPresentation.js.map +1 -0
- package/dist/KtCodegenController.d.ts +68 -0
- package/dist/KtCodegenController.d.ts.map +1 -0
- package/dist/KtCodegenController.js +100 -0
- package/dist/KtCodegenController.js.map +1 -0
- package/dist/KtCodegenCore.d.ts +87 -0
- package/dist/KtCodegenCore.d.ts.map +1 -0
- package/dist/KtCodegenCore.js +234 -0
- package/dist/KtCodegenCore.js.map +1 -0
- package/dist/KtCodegenItem.d.ts +84 -0
- package/dist/KtCodegenItem.d.ts.map +1 -0
- package/dist/KtCodegenItem.js +88 -0
- package/dist/KtCodegenItem.js.map +1 -0
- package/dist/KtCodegenMarker.d.ts +110 -0
- package/dist/KtCodegenMarker.d.ts.map +1 -0
- package/dist/KtCodegenMarker.js +246 -0
- package/dist/KtCodegenMarker.js.map +1 -0
- package/dist/KtCodegenOptions.d.ts +29 -0
- package/dist/KtCodegenOptions.d.ts.map +1 -0
- package/dist/KtCodegenOptions.js +97 -0
- package/dist/KtCodegenOptions.js.map +1 -0
- package/dist/KtCodegenParam.d.ts +60 -0
- package/dist/KtCodegenParam.d.ts.map +1 -0
- package/dist/KtCodegenParam.js +68 -0
- package/dist/KtCodegenParam.js.map +1 -0
- package/dist/KtCodegenReader.d.ts +23 -0
- package/dist/KtCodegenReader.d.ts.map +1 -0
- package/dist/KtCodegenReader.js +28 -0
- package/dist/KtCodegenReader.js.map +1 -0
- package/dist/KtCodegenRenderer.d.ts +114 -0
- package/dist/KtCodegenRenderer.d.ts.map +1 -0
- package/dist/KtCodegenRenderer.js +1388 -0
- package/dist/KtCodegenRenderer.js.map +1 -0
- package/dist/KtCodegenTableColumns.d.ts +103 -0
- package/dist/KtCodegenTableColumns.d.ts.map +1 -0
- package/dist/KtCodegenTableColumns.js +35 -0
- package/dist/KtCodegenTableColumns.js.map +1 -0
- package/dist/KtCodegenTableCore.d.ts +61 -0
- package/dist/KtCodegenTableCore.d.ts.map +1 -0
- package/dist/KtCodegenTableCore.js +240 -0
- package/dist/KtCodegenTableCore.js.map +1 -0
- package/dist/KtCodegenTableData.d.ts +22 -0
- package/dist/KtCodegenTableData.d.ts.map +1 -0
- package/dist/KtCodegenTableData.js +17 -0
- package/dist/KtCodegenTableData.js.map +1 -0
- package/dist/api/analyze.d.ts +8 -0
- package/dist/api/analyze.d.ts.map +1 -0
- package/dist/api/analyze.js +102 -0
- package/dist/api/analyze.js.map +1 -0
- package/dist/api/contracts.d.ts +93 -0
- package/dist/api/contracts.d.ts.map +1 -0
- package/dist/api/contracts.js +3 -0
- package/dist/api/contracts.js.map +1 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +4 -0
- package/dist/api/index.js.map +1 -0
- package/dist/blocks/index.d.ts +2 -0
- package/dist/blocks/index.d.ts.map +1 -0
- package/dist/blocks/index.js +3 -0
- package/dist/blocks/index.js.map +1 -0
- package/dist/blocks/legacy-blocks.d.ts +309 -0
- package/dist/blocks/legacy-blocks.d.ts.map +1 -0
- package/dist/blocks/legacy-blocks.js +343 -0
- package/dist/blocks/legacy-blocks.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/legacy/csv.d.ts +25 -0
- package/dist/legacy/csv.d.ts.map +1 -0
- package/dist/legacy/csv.js +197 -0
- package/dist/legacy/csv.js.map +1 -0
- package/dist/legacy/index.d.ts +4 -0
- package/dist/legacy/index.d.ts.map +1 -0
- package/dist/legacy/index.js +5 -0
- package/dist/legacy/index.js.map +1 -0
- package/dist/legacy/v4-json.d.ts +12 -0
- package/dist/legacy/v4-json.d.ts.map +1 -0
- package/dist/legacy/v4-json.js +363 -0
- package/dist/legacy/v4-json.js.map +1 -0
- package/dist/legacy/v4-schema.d.ts +30 -0
- package/dist/legacy/v4-schema.d.ts.map +1 -0
- package/dist/legacy/v4-schema.js +63 -0
- package/dist/legacy/v4-schema.js.map +1 -0
- package/dist/model/diagnostic.d.ts +38 -0
- package/dist/model/diagnostic.d.ts.map +1 -0
- package/dist/model/diagnostic.js +6 -0
- package/dist/model/diagnostic.js.map +1 -0
- package/dist/model/equal.d.ts +10 -0
- package/dist/model/equal.d.ts.map +1 -0
- package/dist/model/equal.js +64 -0
- package/dist/model/equal.js.map +1 -0
- package/dist/model/index.d.ts +5 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +6 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/target.d.ts +58 -0
- package/dist/model/target.d.ts.map +1 -0
- package/dist/model/target.js +32 -0
- package/dist/model/target.js.map +1 -0
- package/dist/model/validate.d.ts +9 -0
- package/dist/model/validate.d.ts.map +1 -0
- package/dist/model/validate.js +52 -0
- package/dist/model/validate.js.map +1 -0
- package/dist/table/KtCodegenTable.d.ts +75 -0
- package/dist/table/KtCodegenTable.d.ts.map +1 -0
- package/dist/table/KtCodegenTable.js +541 -0
- package/dist/table/KtCodegenTable.js.map +1 -0
- package/dist/table/index.d.ts +4 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +5 -0
- package/dist/table/index.js.map +1 -0
- package/doc/CAA/344/270/216Qt/345/257/271/350/257/235/346/241/206/345/217/214/345/220/221/346/233/264/346/226/260/345/235/227/350/277/201/347/247/273.md +74 -0
- package/doc/CAA/345/257/271/350/257/235/346/241/206/351/200/232/347/237/245/345/235/227/350/277/201/347/247/273.md +45 -0
- package/doc/CAA/346/216/245/345/217/243/345/244/264/346/226/207/344/273/266/345/235/227/350/277/201/347/247/273.md +75 -0
- package/doc/CAA/347/211/271/345/276/201/350/257/273/345/206/231/345/235/227/350/277/201/347/247/273.md +77 -0
- package/doc/CAA/347/233/256/345/275/225/344/270/216/346/240/221/345/267/245/345/216/202/345/235/227/350/277/201/347/247/273.md +78 -0
- package/doc/CommandAgent/347/224/237/345/221/275/345/221/250/346/234/237/345/235/227/350/277/201/347/247/273.md +47 -0
- package/doc/Command/345/212/250/344/275/234/344/270/216/346/264/273/345/212/250/345/255/227/346/256/265/345/235/227/350/277/201/347/247/273.md +46 -0
- package/doc/Command/345/233/276/344/270/216/347/212/266/346/200/201/345/235/227/350/277/201/347/247/273.md +64 -0
- package/doc/Dialog/345/255/227/346/256/265/344/270/216/345/272/237/345/274/203/345/205/274/345/256/271/345/235/227/350/277/201/347/247/273.md +60 -0
- package/doc/KtCodegen/345/221/275/345/220/215/350/277/201/347/247/273/350/257/264/346/230/216.md +55 -0
- package/doc//344/270/244/345/260/217/346/227/266/350/277/201/347/247/273/350/256/241/345/210/222/344/270/216/351/252/214/346/224/266.md +52 -0
- package/doc//346/231/256/351/200/232C++/345/217/202/346/225/260/345/235/227/350/277/201/347/247/273.md +72 -0
- package/doc//346/235/245/346/272/220/344/270/216/350/256/270/345/217/257/345/275/222/346/241/243.md +29 -0
- package/doc//347/224/237/346/210/220/345/235/227/350/277/201/347/247/273/347/237/251/351/230/265.md +75 -0
- package/doc//350/207/252/345/212/250/344/273/243/347/240/201/346/240/207/350/256/260/346/211/253/346/217/217.md +84 -0
- package/package.json +62 -0
- package/src/index.ts +20 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# 普通 C++ 参数块迁移
|
|
2
|
+
|
|
3
|
+
本文记录 `cpp.parameter` Renderer 第一组已迁移能力:旧 `KevinCAAFileGuide` 的参数声明、构造、析构和赋值四个自动代码块。
|
|
4
|
+
|
|
5
|
+
## 迁移范围
|
|
6
|
+
|
|
7
|
+
| ID | block key | 旧 VB 方法 | 当前状态 |
|
|
8
|
+
| ---: | --- | --- | --- |
|
|
9
|
+
| 10 | `PARAM CONSTRUCTOR` | `CreateCAAParamConstructor` | 已迁移 |
|
|
10
|
+
| 11 | `PARAM DECLARATION` | `CreateCAAParamDeclaration` | 已迁移 |
|
|
11
|
+
| 12 | `PARAM DESTRUCTOR` | `CreateCAAParamDestructor` | 已迁移 |
|
|
12
|
+
| 13 | `PARAM EQUAL` | `CreateCAAParamEqual` | 已迁移 |
|
|
13
|
+
|
|
14
|
+
权威实现仍是归档基线中的 `KtaAutoCodeBase/KevinCAAFileGuide.vb`。TypeScript 版本位于 [`KtCodegenRenderer.ts`](../src/KtCodegenRenderer.ts),由 `KtCodegenCore` 注入旧默认值格式化函数,避免 Renderer 反向依赖 Core;基线位置见[《来源与许可归档》](来源与许可归档.md)。
|
|
15
|
+
|
|
16
|
+
## 数据流与职责
|
|
17
|
+
|
|
18
|
+
```mermaid
|
|
19
|
+
flowchart LR
|
|
20
|
+
Param["KtCodegenParam<br/>共享公开数据"] --> Core["KtCodegenCore<br/>默认值等纯算法"]
|
|
21
|
+
Snapshot["KtCodegenSnapshot"] --> Marker["KtCodegenMarker<br/>安全区域"]
|
|
22
|
+
Marker --> Renderer["KtCodegenRenderer<br/>cpp.parameter"]
|
|
23
|
+
Core -->|"注入默认值格式化函数"| Renderer
|
|
24
|
+
Param --> Renderer
|
|
25
|
+
Renderer --> Artifact["KtCodegenArtifact<br/>regionId + content"]
|
|
26
|
+
Artifact --> Plan["KtCodegenPlan<br/>仅预览,不写文件"]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
每个 artifact 对应一个已扫描的 `KtCodegenMarkerRegion.id`。区域保存文件指纹和替换偏移,artifact 保存目标、block、类身份和候选文本。当前包只形成 Analyze Plan;真实 Apply 必须由宿主根据 `regionId` 找到区域,在写入前重新检查文件指纹。
|
|
30
|
+
|
|
31
|
+
## 保留的旧行为
|
|
32
|
+
|
|
33
|
+
四个块都只消费与当前 `NameSuffix` 相同且 `id >= 1` 的 Item,并保持数据数组顺序。
|
|
34
|
+
|
|
35
|
+
### 参数构造
|
|
36
|
+
|
|
37
|
+
- `id === 1` 使用 `: `,其余 Item 使用 `, `;不按数组位置自动修正;
|
|
38
|
+
- 默认值复用 Core 中已经 golden 化的字符串、分号、毫米和角度规则;
|
|
39
|
+
- 旧方法对 `m_CurrentControlEnd.Trim()`,所以该块的 `clang-format on` 和 End 标记不保留 Start 缩进。新 Renderer 有意保留这一历史输出。
|
|
40
|
+
|
|
41
|
+
### 参数声明
|
|
42
|
+
|
|
43
|
+
- 生成旧版 `@app Kt Auto Code` 和 `@version 5.0.0, (2024)`;
|
|
44
|
+
- 按 `CodeAppendNotes(item, 0)` 输出 `brief`、可选 `author/date/note` 和 `id`;
|
|
45
|
+
- 相邻 Item 声明之间保留一个空行。
|
|
46
|
+
|
|
47
|
+
### 参数析构
|
|
48
|
+
|
|
49
|
+
- `CATISpecObject_var` 不区分大小写,重置为 `NULL_var`;
|
|
50
|
+
- 类型中任意位置包含 `*` 时重置为 `NULL`;
|
|
51
|
+
- 其他类型保留旧行为,输出被注释的默认值恢复语句。
|
|
52
|
+
|
|
53
|
+
### 参数赋值
|
|
54
|
+
|
|
55
|
+
- 普通类型生成 `value = iOriginal.value`;
|
|
56
|
+
- 旧代码判断条件是 `DataType.IndexOf("*") > 0`,因此常规指针复制语句被注释;
|
|
57
|
+
- 若 `*` 恰好是类型首字符,旧判断返回 false,新实现也不会擅自改变。
|
|
58
|
+
|
|
59
|
+
## 换行、缩进与可验证性
|
|
60
|
+
|
|
61
|
+
- Start 行最后一个 `//` 之前的 `linePrefix` 用于生成块缩进;
|
|
62
|
+
- 显式 `snapshot.eol` 优先,否则从文本检测 CRLF,默认使用 LF;
|
|
63
|
+
- 原 End 行有换行时 artifact 保留末尾换行,无换行时不额外添加;
|
|
64
|
+
- [`cpp-parameter-blocks.hpp`](../tests/fixtures/source/cpp-parameter-blocks.hpp) 提供四块旧源码;
|
|
65
|
+
- [`expected/cpp-parameter`](../tests/fixtures/expected/cpp-parameter) 保存逐块可人工审阅的 golden 文本;
|
|
66
|
+
- 测试另外覆盖 CRLF、`CATISpecObject_var`、常规指针和首字符星号。
|
|
67
|
+
|
|
68
|
+
## 当前边界
|
|
69
|
+
|
|
70
|
+
`cpp.parameter` 目标对这四个 block 返回 `ready`。只有源码标记结构无 error、存在至少一个 artifact、所有 artifact 都能关联区域,且本次请求的全部目标均为 `ready` 时,`plan.canApply` 才为 true。
|
|
71
|
+
|
|
72
|
+
这只表示计划具备 Apply 的基本条件,不表示本包已经写入文件。CAA 的二十六块和 Qt 的两个双向更新块已在后续阶段迁移,归档的32个旧 block 已全部建立 Renderer 与 golden 基线。
|
package/doc//346/235/245/346/272/220/344/270/216/350/256/270/345/217/257/345/275/222/346/241/243.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# KtCodegen 来源与许可归档
|
|
2
|
+
|
|
3
|
+
## 归档基线
|
|
4
|
+
|
|
5
|
+
本包从本机 `KtAutoCode` 仓库的只读标签 `kt-codegen-0.1.0` 迁入。该标签保存 TypeScript 初稿、17 列 CSV/v4 JSON 兼容、32 个生成块、fixture、测试与中文探测文档;迁入后由 Phoenix Wing 的 `@phoenix-wing/kt-codegen` 作为共享实现继续维护。
|
|
6
|
+
|
|
7
|
+
历史仓库继续保留,不从这里复制或改写其提交历史。它既是最初 CAA MVC-C、后续 Qt/普通 C++ 扩展的行为参考,也是代码来源和许可审计证据。
|
|
8
|
+
|
|
9
|
+
## 旧实现索引
|
|
10
|
+
|
|
11
|
+
以下路径均相对于 `KtAutoCode@kt-codegen-0.1.0`:
|
|
12
|
+
|
|
13
|
+
| 历史文件 | 迁移时采用的权威内容 |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| `KtaAutoCodeBase/KevinCAAFileGuide.vb` | Parameter 聚合、32 个块的分派与 CAA/Qt/C++ 代码生成行为 |
|
|
16
|
+
| `KtaAutoCodeBase/KevinCAAParamInfor.vb` | 单条参数字段、默认值与类型辅助规则 |
|
|
17
|
+
| `KtaAutoCodeBase/KevinControlID.vb` | 0~31 的旧生成块枚举顺序 |
|
|
18
|
+
| `KtaAutoCodeBase/KevinControlWords.vb` | Start/End 自动代码标记文本 |
|
|
19
|
+
| `KtaAutoCodeBase/KevinCAACreateItemModify.vb` | 待修改文件、标记位置与命中次数模型 |
|
|
20
|
+
| C++ `KtaControlConfigData` / `KtaControlConfigItem` | JSON 数据载体和 17 列 CSV 对应结构 |
|
|
21
|
+
| Qt `KtdAutoCodeParam` / `KtdAutoCodeItem` | 对话框、表格与共享 Parameter 的消费方式 |
|
|
22
|
+
|
|
23
|
+
具体方法与生成块的对应关系保留在本目录其余中文迁移文档和 golden fixtures 中。文档以“归档旧实现”为行为依据,但不使用跨仓库相对链接,避免 npm tarball 或独立 checkout 中出现失效链接。
|
|
24
|
+
|
|
25
|
+
## 许可边界
|
|
26
|
+
|
|
27
|
+
`@phoenix-wing/kt-codegen` 随 Phoenix Wing 按 Apache License 2.0 发布,包内包含 `LICENSE` 与 `NOTICE`。旧仓库和本地归档标签用于追溯来源;未来宿主只通过稳定 npm exports 集成,不在运行时读取相邻 Git 仓库。
|
|
28
|
+
|
|
29
|
+
当前迁移只建立纯 TypeScript 数据、兼容、Analyze 与 Renderer 契约,不包含真实源码 Apply、宿主文件 IO 或产品 UI。`kt-auto-code` 与 `phoenix-desk-tools` 的接入应在各自独立任务中完成。
|
package/doc//347/224/237/346/210/220/345/235/227/350/277/201/347/247/273/347/237/251/351/230/265.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 参数代码生成块迁移矩阵
|
|
2
|
+
|
|
3
|
+
本文把旧 VB 的32个自动代码块映射到 `KtCodegen` 的稳定 block key、主目标和迁移状态。它用于控制迁移顺序、建立 golden tests,并防止重写时遗漏或误删旧能力。
|
|
4
|
+
|
|
5
|
+
## 权威来源
|
|
6
|
+
|
|
7
|
+
- 归档基线 `KtaAutoCodeBase/KevinControlID.vb`:0~31 的旧枚举顺序;
|
|
8
|
+
- 归档基线 `KtaAutoCodeBase/KevinControlWords.vb`:源码标记中的稳定字符串;
|
|
9
|
+
- 归档基线 `KtaAutoCodeBase/KevinCAAFileGuide.vb`:`CreateCAAItem` 分派和实际生成方法;
|
|
10
|
+
- [`legacy-blocks.ts`](../src/blocks/legacy-blocks.ts):TypeScript 可执行迁移元数据;
|
|
11
|
+
- [`analyze.test.ts`](../tests/analyze.test.ts):数量、ID、key、旧调用、目标和状态约束。
|
|
12
|
+
|
|
13
|
+
归档标签和完整旧文件索引见[《来源与许可归档》](来源与许可归档.md)。
|
|
14
|
+
|
|
15
|
+
`legacySourceLine` 记录当前归档版本中旧方法定义的起始行,只用于人工审计;稳定身份仍是 `legacyId + key`。主目标表示新 Core/Renderer 中的职责归属,不代表旧源码所在文件。
|
|
16
|
+
|
|
17
|
+
## 32个生成块
|
|
18
|
+
|
|
19
|
+
| ID | 稳定 key | 旧 VB 分派调用 | 源码行 | 新主目标 | 旧状态 | TS 状态 |
|
|
20
|
+
| ---: | --- | --- | ---: | --- | --- | --- |
|
|
21
|
+
| 0 | `CATALOG PARAMS` | `CreateCAACatalogParam()` | 495 | `caa.feature-io` | 有效 | 已迁移 |
|
|
22
|
+
| 1 | `FACTRY ON TREE` | `CreateCAAFactoryOnTree()` | 1725 | `caa.model` | 有效 | 已迁移 |
|
|
23
|
+
| 2 | `IMPLEMENTS CPP GET` | `CreateCAAImplementsCppGet()` | 824 | `caa.feature-io` | 有效 | 已迁移 |
|
|
24
|
+
| 3 | `IMPLEMENTS CPP SET` | `CreateCAAImplementsCppSet()` | 951 | `caa.feature-io` | 有效 | 已迁移 |
|
|
25
|
+
| 4 | `IMPLEMENTS HEAD GET` | `CreateCAAInterfacesGet(False)` | 676 | `caa.core` | 有效 | 已迁移 |
|
|
26
|
+
| 5 | `IMPLEMENTS HEAD SET` | `CreateCAAInterfacesSet(False)` | 743 | `caa.core` | 有效 | 已迁移 |
|
|
27
|
+
| 6 | `IMPLEMENTS PARAM GET` | `CreateCAAImplementsCppParamsClassGet()` | 1027 | `caa.feature-io` | 有效 | 已迁移 |
|
|
28
|
+
| 7 | `IMPLEMENTS PARAM SET` | `CreateCAAImplementsCppParamsClassSet()` | 1063 | `caa.feature-io` | 有效 | 已迁移 |
|
|
29
|
+
| 8 | `INTERFACES HEAD GET` | `CreateCAAInterfacesGet(True)` | 676 | `caa.model` | 有效 | 已迁移 |
|
|
30
|
+
| 9 | `INTERFACES HEAD SET` | `CreateCAAInterfacesSet(True)` | 743 | `caa.model` | 有效 | 已迁移 |
|
|
31
|
+
| 10 | `PARAM CONSTRUCTOR` | `CreateCAAParamConstructor()` | 543 | `cpp.parameter` | 有效 | 已迁移 |
|
|
32
|
+
| 11 | `PARAM DECLARATION` | `CreateCAAParamDeclaration()` | 644 | `cpp.parameter` | 有效 | 已迁移 |
|
|
33
|
+
| 12 | `PARAM DESTRUCTOR` | `CreateCAAParamDestructor()` | 608 | `cpp.parameter` | 有效 | 已迁移 |
|
|
34
|
+
| 13 | `PARAM EQUAL` | `CreateCAAParamEqual()` | 579 | `cpp.parameter` | 有效 | 已迁移 |
|
|
35
|
+
| 14 | `DIALOG NOTIFY` | `CreateCAADialogNotifyValueChange()` | 1603 | `caa.dialog` | 有效 | 已迁移 |
|
|
36
|
+
| 15 | `UPDATE DIALOG` | `CreateCAAUpdateDialog()` | 1124 | `caa.dialog` | 有效 | 已迁移 |
|
|
37
|
+
| 16 | `UPDATE INFORS` | `CreateCAAUpdateInfors()` | 1347 | `caa.dialog` | 有效 | 已迁移 |
|
|
38
|
+
| 17 | `QT UPDATE DIALOG` | `CreateQTUpdateDialog()` | 1809 | `qt.dialog` | 有效 | 已迁移 |
|
|
39
|
+
| 18 | `QT UPDATE INFORS` | `CreateQTUpdateInfors()` | 2096 | `qt.parameter` | 有效 | 已迁移 |
|
|
40
|
+
| 19 | `DLG DEFINE FIELD TYPE` | `DlgDefineFieldType()` | 3141 | `caa.dialog` | 有效 | 已迁移 |
|
|
41
|
+
| 20 | `DLG SET ACTIVE FIELD` | `DlgSetActiveField()` | 3169 | `caa.dialog` | 旧代码标记废弃 | 已迁移(兼容) |
|
|
42
|
+
| 21 | `DLG GET SELECTOR LIST` | `DlgGetSelectorList()` | 3199 | `caa.dialog` | 旧代码标记废弃 | 已迁移(兼容) |
|
|
43
|
+
| 22 | `CMD AGENT DECLARE` | `CmdAgentDeclare()` | 3238 | `caa.control` | 有效 | 已迁移 |
|
|
44
|
+
| 23 | `CMD AGENT CONSTRUCTOR` | `CmdAgentConstructor()` | 3269 | `caa.control` | 有效 | 已迁移 |
|
|
45
|
+
| 24 | `CMD AGENT DESTRUCTOR` | `CmdAgentDestructor()` | 3290 | `caa.control` | 有效 | 已迁移 |
|
|
46
|
+
| 25 | `CMD AGENT BUILD GRAPH` | `CmdAgentBuildGraph()` | 3313 | `caa.control` | 有效 | 已迁移 |
|
|
47
|
+
| 26 | `CMD AGENT UPDATE STATE` | `CmdAgentUpdateState()` | 3436 | `caa.control` | 有效 | 已迁移 |
|
|
48
|
+
| 27 | `CMD AGENT FIA CLEAR` | `CmdAgentFiaClear()` | 3414 | `caa.control` | 有效 | 已迁移 |
|
|
49
|
+
| 28 | `CMD ACTION PDA` | `CmdActionPda()` | 3497 | `caa.control` | 有效 | 已迁移 |
|
|
50
|
+
| 29 | `CMD ACTION FIA` | `CmdActionFia()` | 3561 | `caa.control` | 有效 | 已迁移 |
|
|
51
|
+
| 30 | `CMD ELEMENT SELECTED` | `CmdElementSelected()` | 3621 | `caa.control` | 已由 `CMD ACTION FIA` 替代 | 已迁移(兼容) |
|
|
52
|
+
| 31 | `CMD SET ACTIVE FIELD` | `CmdSetActiveField()` | 3686 | `caa.control` | 有效 | 已迁移 |
|
|
53
|
+
|
|
54
|
+
## 建议迁移顺序
|
|
55
|
+
|
|
56
|
+
1. **普通 C++ Parameter**:10~13 已完成,用于确定换行、缩进、注释和 artifact 契约,详见[《普通 C++ 参数块迁移》](普通C++参数块迁移.md)。
|
|
57
|
+
2. **CAA 接口与 Feature I/O**:0~9 已完成,详见[《CAA 接口头文件块迁移》](CAA接口头文件块迁移.md)、[《CAA 特征读写块迁移》](CAA特征读写块迁移.md)和[《CAA 目录与树工厂块迁移》](CAA目录与树工厂块迁移.md)。
|
|
58
|
+
3. **CAA/Qt 对话框联动**:14~18 已完成,详见[《CAA 对话框通知块迁移》](CAA对话框通知块迁移.md)和[《CAA 与 Qt 对话框双向更新块迁移》](CAA与Qt对话框双向更新块迁移.md)。
|
|
59
|
+
4. **Dialog Selector 能力**:19~21 已完成,详见[《Dialog 字段与废弃兼容块迁移》](Dialog字段与废弃兼容块迁移.md)。
|
|
60
|
+
5. **Command Agent 生命周期**:22~24 已完成,详见[《Command Agent 生命周期块迁移》](CommandAgent生命周期块迁移.md)。
|
|
61
|
+
6. **Command Graph 与 State**:25~27 已完成,详见[《Command 图与状态块迁移》](Command图与状态块迁移.md)。
|
|
62
|
+
7. **Command Action 与活动 Field**:28~31 已完成,详见[《Command 动作与活动字段块迁移》](Command动作与活动字段块迁移.md)。
|
|
63
|
+
8. **废弃块策略**:20、21、30 均按兼容输出迁移,实际生成时发出 warning;三项都保留稳定 key 和解析能力,不得静默删除。
|
|
64
|
+
|
|
65
|
+
## 状态维护条件
|
|
66
|
+
|
|
67
|
+
矩阵中的“已迁移”必须同时满足:旧生成方法已审计、Renderer 已实现、golden 已建立、Analyze artifact 已关联安全标记区域。不能因已有相似功能而直接批量改状态。
|
|
68
|
+
|
|
69
|
+
- 32个 ID 连续且不重复;
|
|
70
|
+
- 32个 key 不重复;
|
|
71
|
+
- 每项都有可定位的旧 VB 调用和源码行;
|
|
72
|
+
- 每项都有新主目标;
|
|
73
|
+
- 旧代码明确废弃的三项被单独标记;
|
|
74
|
+
- 测试对以上规则形成自动约束;
|
|
75
|
+
- 当前 ID 0~31 全部标记为已迁移,其中 ID 20、21、30 明确保留废弃兼容状态。
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# 自动代码标记扫描
|
|
2
|
+
|
|
3
|
+
本文说明 `KtCodegenMarker` 如何兼容旧 `KevinCAAFileGuide` 的自动代码控制标记,并把原来直接搜索、替换文件的过程拆成可检查的只读 Analyze 数据。
|
|
4
|
+
|
|
5
|
+
## 旧实现依据
|
|
6
|
+
|
|
7
|
+
迁移以当前库归档的 VB 源码为准:
|
|
8
|
+
|
|
9
|
+
- 归档基线 `KtaAutoCodeBase/KevinCAAFileGuide.vb` 的 `CalulateStartControlWords`、`CalulateEndControlWords` 定义标记文本;
|
|
10
|
+
- 同一文件的 `SeachInCurrentFileText` 按行寻找 Start,跳过旧块内容,直到找到当前条目的 End;
|
|
11
|
+
- `AutoCodeWordsStart`、`AutoCodeWordsEnd` 把标记、`clang-format off/on` 和生成代码组成完整替换块;
|
|
12
|
+
- 归档基线 `KtaAutoCodeBase/KevinCAACreateItemModify.vb` 保存每个待修改条目的 Start、End 和文件命中次数。
|
|
13
|
+
|
|
14
|
+
归档标签和完整旧文件索引见[《来源与许可归档》](来源与许可归档.md)。
|
|
15
|
+
|
|
16
|
+
旧文本协议保持不变:
|
|
17
|
+
|
|
18
|
+
```cpp
|
|
19
|
+
// START KEVIN CAA WIZARD SECTION <NamePrefix><NameMiddle><NameSuffix> <block key>
|
|
20
|
+
// generated code
|
|
21
|
+
// END KEVIN CAA WIZARD SECTION <NamePrefix><NameMiddle><NameSuffix> <block key>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
例如:
|
|
25
|
+
|
|
26
|
+
```cpp
|
|
27
|
+
// START KEVIN CAA WIZARD SECTION KtCourseGuardItem PARAM DECLARATION
|
|
28
|
+
int _MachineId;
|
|
29
|
+
// END KEVIN CAA WIZARD SECTION KtCourseGuardItem PARAM DECLARATION
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 新职责边界
|
|
33
|
+
|
|
34
|
+
```mermaid
|
|
35
|
+
flowchart LR
|
|
36
|
+
Param["KtCodegenParam<br/>共享参数"] --> Marker["KtCodegenMarker<br/>只读扫描"]
|
|
37
|
+
Snapshot["KtCodegenSnapshot<br/>宿主源码快照"] --> Marker
|
|
38
|
+
Keys["block key 白名单"] --> Marker
|
|
39
|
+
Marker --> Regions["KtCodegenMarkerRegion[]<br/>安全替换范围"]
|
|
40
|
+
Marker --> Diagnostics["KtCodegenDiagnostic[]<br/>结构问题"]
|
|
41
|
+
Regions --> Plan["KtCodegenPlan<br/>Analyze 预览"]
|
|
42
|
+
Diagnostics --> Plan
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`KtCodegenMarker` 只构造和扫描控制标记。它不生成 CAA/Qt/C++ 业务代码,不修改 `KtCodegenParam`,也不读写文件系统。宿主先把已经按正确编码解码的文本放进 `KtCodegenSnapshot`,Core 再把扫描区域和诊断放入 `KtCodegenPlan`。
|
|
46
|
+
|
|
47
|
+
Renderer 后续产生 artifact 时,可使用区域的绝对偏移建立候选替换;真正写回、编码保持、指纹并发检查和失败回滚仍属于宿主或通用 code-core,不进入参数数据类。
|
|
48
|
+
|
|
49
|
+
## 区域数据
|
|
50
|
+
|
|
51
|
+
每个 `KtCodegenMarkerRegion` 包含:
|
|
52
|
+
|
|
53
|
+
- 稳定 `id`、文件路径、源文件指纹、`classId`、`nameSuffix` 和稳定 `blockKey`;
|
|
54
|
+
- Start、End 所在的0基行列;
|
|
55
|
+
- 两个标记、块正文和整块替换的绝对字符偏移;
|
|
56
|
+
- Start 行从最后一个 `//` 之前提取的 `linePrefix`,兼容旧 VB `_prefix` 行为;
|
|
57
|
+
- LF、CRLF 或末行无换行时仍可直接对原始字符串切片验证的范围。
|
|
58
|
+
|
|
59
|
+
扫描只把“当前 Param 中存在的 `NameSuffix` + 本次 block key 白名单”作为候选。没有打开当前块时,其他类和未请求 block 的合法标记保持原样,允许一个文件中存在多套参数生成代码。
|
|
60
|
+
|
|
61
|
+
## 比旧实现更严格的安全检查
|
|
62
|
+
|
|
63
|
+
旧 `SeachInCurrentFileText` 在找到 Start 后,只等待当前 End,中间出现的其他控制标记会被静默跳过。新扫描器不直接替换,因此可以在预览阶段阻止有歧义的范围:
|
|
64
|
+
|
|
65
|
+
| 诊断代码 | 含义 | 结果 |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| `marker.orphan-end` | End 前没有对应 Start | error,不产生区域 |
|
|
68
|
+
| `marker.missing-end` | 文件结束仍未找到对应 End | error,不产生区域 |
|
|
69
|
+
| `marker.nested-start` | 一个块未结束又出现 Start | error,涉及块不产生区域 |
|
|
70
|
+
| `marker.mismatched-end` | End 的类身份或 block key 与 Start 不同 | error,涉及块不产生区域 |
|
|
71
|
+
| `marker.ambiguous-line` | 同一行同时含 Start 和 End | error |
|
|
72
|
+
| `marker.malformed` | 标记固定文本与类身份之间格式错误 | error |
|
|
73
|
+
| `marker.missing-class-id` | block key 前没有类身份 | error |
|
|
74
|
+
| `marker.unknown-block` | 不属于归档32块的控制标记 | warning,保留原文 |
|
|
75
|
+
|
|
76
|
+
这些检查不自动修复源码。UI 可以用文件、行、列定位提示用户;只有标记结构无 error、目标 Renderer 已迁移并产生 artifact 时,计划才可能进入 Apply。
|
|
77
|
+
|
|
78
|
+
## 当前阶段限制
|
|
79
|
+
|
|
80
|
+
- 已完成旧标记构造、扫描、配对、偏移和 Analyze Plan 接口;
|
|
81
|
+
- 已覆盖多区域、LF/CRLF、孤立、缺失、嵌套、错配和其他类共存测试;
|
|
82
|
+
- 普通 C++ Parameter、CAA 与 Qt 的32块归档旧生成能力均可产生关联 `regionId` 的 artifact;
|
|
83
|
+
- `plan.canApply` 只表示计划满足基本条件,本包仍不执行真实写回;
|
|
84
|
+
- 不在本原型中实现真实文件写入,也不修改 Phoenix Wing、`kt-auto-code` 或 `phoenix-desk-tools`。
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@phoenix-wing/kt-codegen",
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "CAA、Qt 与普通 C++ 的参数驱动代码生成核心",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./legacy": {
|
|
15
|
+
"types": "./dist/legacy/index.d.ts",
|
|
16
|
+
"import": "./dist/legacy/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./model": {
|
|
19
|
+
"types": "./dist/model/index.d.ts",
|
|
20
|
+
"import": "./dist/model/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./table": {
|
|
23
|
+
"types": "./dist/table/index.d.ts",
|
|
24
|
+
"import": "./dist/table/index.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"src/index.ts",
|
|
30
|
+
"README.md",
|
|
31
|
+
"doc",
|
|
32
|
+
"LICENSE",
|
|
33
|
+
"NOTICE"
|
|
34
|
+
],
|
|
35
|
+
"author": "上海锟钛",
|
|
36
|
+
"license": "Apache-2.0",
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://gitee.com/PhoenixWing321/phoenix-wing.git"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"phoenix",
|
|
46
|
+
"codegen",
|
|
47
|
+
"caa",
|
|
48
|
+
"qt",
|
|
49
|
+
"cpp"
|
|
50
|
+
],
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/node": "^22.0.0",
|
|
53
|
+
"typescript": "^5.7.0",
|
|
54
|
+
"vitest": "^3.0.0"
|
|
55
|
+
},
|
|
56
|
+
"scripts": {
|
|
57
|
+
"build": "tsc -p tsconfig.build.json",
|
|
58
|
+
"test": "vitest run",
|
|
59
|
+
"test:watch": "vitest",
|
|
60
|
+
"typecheck": "tsc --noEmit --pretty false"
|
|
61
|
+
}
|
|
62
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
|
|
3
|
+
export * from "./api/index.js";
|
|
4
|
+
export * from "./blocks/index.js";
|
|
5
|
+
export * from "./legacy/index.js";
|
|
6
|
+
export * from "./model/index.js";
|
|
7
|
+
export * from "./KtCodegenAdapter.js";
|
|
8
|
+
export * from "./KtCodegenApply.js";
|
|
9
|
+
export * from "./KtCodegenBlockPresentation.js";
|
|
10
|
+
export * from "./KtCodegenController.js";
|
|
11
|
+
export * from "./KtCodegenCore.js";
|
|
12
|
+
export * from "./KtCodegenItem.js";
|
|
13
|
+
export * from "./KtCodegenMarker.js";
|
|
14
|
+
export * from "./KtCodegenOptions.js";
|
|
15
|
+
export * from "./KtCodegenParam.js";
|
|
16
|
+
export * from "./KtCodegenReader.js";
|
|
17
|
+
export * from "./KtCodegenRenderer.js";
|
|
18
|
+
export * from "./KtCodegenTableColumns.js";
|
|
19
|
+
export * from "./KtCodegenTableCore.js";
|
|
20
|
+
export * from "./KtCodegenTableData.js";
|