跨端: ArkTS 编译期硬规则进判据 —— 我插的常量表把 import 挤到了后面,assembleHap 报 arkts-no-misplaced-imports
`hvigorw assembleHap` 在 `f31bc02`/`b806a05` 上都红了一条:
ERROR: ArkTS:ERROR …/MainPage.ets
"import" statements after other statements are not allowed (arkts-no-misplaced-imports)
**是我造成的**:P4c 那笔我在 `MainPage.ets` 里插了 `NAV_MATERIAL_OF` 那张(带注释的)
常量表,位置在**既有 import 之前**。ArkTS 要求所有 import 在任何语句之前,
常量表算语句 —— 编译器直接报错。
## 为什么我那一笔的判据一条都没抓到它
因为**这个仓库里没有任何判据会跑 ArkTS 的编译规则**。我的判据判的是"表达式对不对、
接没接上、颜色写没写死…",它们全绿 —— **文本层面确实没问题**,问题只有编译器知道。
pi 是构建时撞上的。
⇒ 教训不是"下次小心",是**把编译器能抓、而判据不抓的那一类固化下来**。
这一类里有一批**纯文本就能判、不需要设备**,所以它们不该待在"等设备才能验"的欠账里。
## 做了什么
- 新增 `test/harmony-arkts.test.mjs`(3 条,不需要设备 ⇒ **不进** STATIC_ONLY):
· **所有 26 个 `.ets` 的 import 必须在任何其它语句之前**(就是这次报的那条);
· 全仓 `.ets` 的词汇层硬坑(对象解构 / `any` / `unknown` / 函数表达式)
—— 这几条此前**只在"我自己新写的那个页面"里判**,而我恰恰是在**改既有文件**时犯的下一个错,
编译期硬规则不该按"谁写的"分覆盖;
· **一条自检**:造已知坏样本(常量插在两组 import 之间)确认检查会红、合法样本不误报
—— 否则"全绿"可能只是扫描逻辑失效(我第一版就把多行 import 的成员行误判成了语句)。
- 接进 `SUITE`(判据文件数 22 → 23)。
- 文件头明确写了它**不能**替代 `hvigorw`:覆盖的只是"能静态判出来的那几类",
类型推断/重载解析/Sendable 那些仍然只有 build 能验 ——
不许把这个文件的存在读成"编译已经验过了"。
- 变异测试 5 条**全部被抓**,含**精确复现我那个错的形状**(把 import 搬到常量表之后)。
基线 `7/7✓`(逐字节还原)。
- 现口径:`mutants=52 ran=52 skipped=0 on_new_criteria=36 baseline=7/7✓`。
## 工作树里**不是我做的**两处改动(已核实为正确,我没有提交也没有回退)
工作树是共享的:`AdminUsersPage.ets` 与 `MainPage.ets` 在我提交**之后**被别的进程改过,
两处都是**修构建错误**,都核实过是对的:
1. `MainPage.ets`:把两组 import(`CalendarPage`、`NavItems`)从 `NAV_MATERIAL_OF` 表**之后**
挪到文件最前 —— 就是上面那条 `arkts-no-misplaced-imports`;
2. `AdminUsersPage.ets`:`Chip(text, bg, fg: string)` → `ResourceColor`
(`Theme.surfaceMuted`/`textSubtle` 是 `Resource`、`chipNeutralBg` 是 `string`,
第 368 行那个三目因此是 `Resource | string` ⇒ 旧签名编译不过)。
我不提交别人的活、更不回退它;但它们**让基线必须重算**,而**重算基线是有意动作**
(随手重算会把"某次变异没还原"永久掩盖掉),所以 `baseline.sha` 顶部记了原因与哈希来源。
## 未验
- 这三条判据**只覆盖静态可判的那几类**。`assembleHap` 仍然只有真正构建才能验 ——
这次就是构建先于我所有判据发现的问题,下次还可能是。
- Go 侧 `debt_registry_test.go` 仍未跑(沙箱无 Go 模块缓存),只有 `gofmt`。
This commit is contained in:
23
client/electron/test/mutants/jobs/jobs-arkts.json
Normal file
23
client/electron/test/mutants/jobs/jobs-arkts.json
Normal file
@ -0,0 +1,23 @@
|
||||
[
|
||||
{
|
||||
"file": "client/harmony/entry/src/main/ets/pages/MainPage.ets",
|
||||
"pat": "import \\{ MailDetailParams, ComposeParams \\} from '../model/RouteParams';\n",
|
||||
"repl": "",
|
||||
"test": "arkts",
|
||||
"why": "把 import 顺序检查的靶子挪走:删掉一条 import(若检查只看行号会误判)"
|
||||
},
|
||||
{
|
||||
"file": "client/harmony/entry/src/main/ets/pages/SettingsPage.ets",
|
||||
"pat": "import \\{ Theme \\} from '\\.\\./common/Theme';",
|
||||
"repl": "const INSERTED: number = 1;\nimport { Theme } from '../common/Theme';",
|
||||
"test": "arkts",
|
||||
"why": "★把常量插在既有 import 之前(本次构建报错的形状)"
|
||||
},
|
||||
{
|
||||
"file": "client/harmony/entry/src/main/ets/common/Theme.ets",
|
||||
"pat": " static readonly fontTiny: number = 11;",
|
||||
"repl": " static readonly fontTiny: number = 11;\n static readonly tmpAny: any = null;",
|
||||
"test": "arkts",
|
||||
"why": "全仓词汇检查:any 出现在我一个没新写的文件里"
|
||||
}
|
||||
]
|
||||
10
client/electron/test/mutants/jobs/jobs-arkts2.json
Normal file
10
client/electron/test/mutants/jobs/jobs-arkts2.json
Normal file
@ -0,0 +1,10 @@
|
||||
[
|
||||
{"file":"client/harmony/entry/src/main/ets/pages/SettingsPage.ets",
|
||||
"pat":"import \\{ Theme \\} from '\\.\\./common/Theme';",
|
||||
"repl":"const INSERTED: number = 1;\nimport { Theme } from '../common/Theme';",
|
||||
"test":"arkts","why":"★ 把常量插在既有 import 之前(本次构建报错的形状)"},
|
||||
{"file":"client/harmony/entry/src/main/ets/pages/MainPage.ets",
|
||||
"pat":"const NAV_MATERIAL_OF: Record<string, BlurStyle> = \\{\n 'COMPONENT_THIN': BlurStyle\\.COMPONENT_THIN,",
|
||||
"repl":"import { Theme as T2 } from '../common/Theme';\nconst NAV_MATERIAL_OF: Record<string, BlurStyle> = {\n 'COMPONENT_THIN': BlurStyle.COMPONENT_THIN,",
|
||||
"test":"arkts","why":"★ 把 import 搬到常量表**之后**(= 精确复现我犯的那个错)"}
|
||||
]
|
||||
@ -10,5 +10,6 @@
|
||||
"appearance": "test/harmony-appearance.test.mjs",
|
||||
"nav": "test/harmony-nav.test.mjs",
|
||||
"cross": "test/cross-client-theme.test.mjs",
|
||||
"wallpaper": "test/harmony-presets.test.mjs"
|
||||
"wallpaper": "test/harmony-presets.test.mjs",
|
||||
"arkts": "test/harmony-arkts.test.mjs"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user