@aster-cloud/aster-lang-ts 1.0.28 → 1.0.29

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.
Files changed (207) hide show
  1. package/dist/scripts/generate_error_codes.js +49 -6
  2. package/dist/scripts/generate_error_codes.js.map +1 -1
  3. package/dist/src/ai/providers/openai.d.ts +10 -0
  4. package/dist/src/ai/providers/openai.d.ts.map +1 -1
  5. package/dist/src/ai/providers/openai.js +4 -0
  6. package/dist/src/ai/providers/openai.js.map +1 -1
  7. package/dist/src/config/lexicons/regex-guard.d.ts.map +1 -1
  8. package/dist/src/config/lexicons/regex-guard.js +128 -0
  9. package/dist/src/config/lexicons/regex-guard.js.map +1 -1
  10. package/dist/src/core/interpreter.d.ts.map +1 -1
  11. package/dist/src/core/interpreter.js +221 -27
  12. package/dist/src/core/interpreter.js.map +1 -1
  13. package/dist/src/cst/cst_builder.js +0 -14
  14. package/dist/src/cst/cst_builder.js.map +1 -1
  15. package/dist/src/cst/cst_printer.d.ts.map +1 -1
  16. package/dist/src/cst/cst_printer.js +20 -3
  17. package/dist/src/cst/cst_printer.js.map +1 -1
  18. package/dist/src/diagnostics/error_codes.d.ts +3 -3
  19. package/dist/src/diagnostics/error_codes.d.ts.map +1 -1
  20. package/dist/src/diagnostics/error_codes.js +509 -78
  21. package/dist/src/diagnostics/error_codes.js.map +1 -1
  22. package/dist/src/formatter.d.ts +7 -0
  23. package/dist/src/formatter.d.ts.map +1 -1
  24. package/dist/src/formatter.js +175 -5
  25. package/dist/src/formatter.js.map +1 -1
  26. package/dist/src/frontend/canonicalizer.d.ts.map +1 -1
  27. package/dist/src/frontend/canonicalizer.js +47 -6
  28. package/dist/src/frontend/canonicalizer.js.map +1 -1
  29. package/dist/src/frontend/lexer.d.ts +2 -1
  30. package/dist/src/frontend/lexer.d.ts.map +1 -1
  31. package/dist/src/frontend/lexer.js +10 -3
  32. package/dist/src/frontend/lexer.js.map +1 -1
  33. package/dist/src/frontend/transformers.d.ts.map +1 -1
  34. package/dist/src/frontend/transformers.js +50 -3
  35. package/dist/src/frontend/transformers.js.map +1 -1
  36. package/dist/src/lower_to_core.js +101 -4
  37. package/dist/src/lower_to_core.js.map +1 -1
  38. package/dist/src/lsp/canonicalize-options.d.ts +26 -0
  39. package/dist/src/lsp/canonicalize-options.d.ts.map +1 -0
  40. package/dist/src/lsp/canonicalize-options.js +14 -0
  41. package/dist/src/lsp/canonicalize-options.js.map +1 -0
  42. package/dist/src/lsp/completion.d.ts.map +1 -1
  43. package/dist/src/lsp/completion.js +22 -4
  44. package/dist/src/lsp/completion.js.map +1 -1
  45. package/dist/src/lsp/server.js +29 -1
  46. package/dist/src/lsp/server.js.map +1 -1
  47. package/dist/src/lsp/tenant-init.d.ts +55 -0
  48. package/dist/src/lsp/tenant-init.d.ts.map +1 -0
  49. package/dist/src/lsp/tenant-init.js +88 -0
  50. package/dist/src/lsp/tenant-init.js.map +1 -0
  51. package/dist/src/mapping/candidate-generator.d.ts +84 -0
  52. package/dist/src/mapping/candidate-generator.d.ts.map +1 -0
  53. package/dist/src/mapping/candidate-generator.js +114 -0
  54. package/dist/src/mapping/candidate-generator.js.map +1 -0
  55. package/dist/src/mapping/entity-proposer.d.ts +85 -0
  56. package/dist/src/mapping/entity-proposer.d.ts.map +1 -0
  57. package/dist/src/mapping/entity-proposer.js +162 -0
  58. package/dist/src/mapping/entity-proposer.js.map +1 -0
  59. package/dist/src/mapping/mapping-ir.d.ts +85 -0
  60. package/dist/src/mapping/mapping-ir.d.ts.map +1 -0
  61. package/dist/src/mapping/mapping-ir.js +195 -0
  62. package/dist/src/mapping/mapping-ir.js.map +1 -0
  63. package/dist/src/mapping/proof-ir.d.ts +125 -0
  64. package/dist/src/mapping/proof-ir.d.ts.map +1 -0
  65. package/dist/src/mapping/proof-ir.js +48 -0
  66. package/dist/src/mapping/proof-ir.js.map +1 -0
  67. package/dist/src/mapping/quantity-ir.d.ts +93 -0
  68. package/dist/src/mapping/quantity-ir.d.ts.map +1 -0
  69. package/dist/src/mapping/quantity-ir.js +151 -0
  70. package/dist/src/mapping/quantity-ir.js.map +1 -0
  71. package/dist/src/mapping/source-ir.d.ts +82 -0
  72. package/dist/src/mapping/source-ir.d.ts.map +1 -0
  73. package/dist/src/mapping/source-ir.js +231 -0
  74. package/dist/src/mapping/source-ir.js.map +1 -0
  75. package/dist/src/nodeid/change-impact.d.ts +77 -0
  76. package/dist/src/nodeid/change-impact.d.ts.map +1 -0
  77. package/dist/src/nodeid/change-impact.js +132 -0
  78. package/dist/src/nodeid/change-impact.js.map +1 -0
  79. package/dist/src/nodeid/node-id-map.d.ts +69 -0
  80. package/dist/src/nodeid/node-id-map.d.ts.map +1 -0
  81. package/dist/src/nodeid/node-id-map.js +193 -0
  82. package/dist/src/nodeid/node-id-map.js.map +1 -0
  83. package/dist/src/parser/decl-parser.d.ts.map +1 -1
  84. package/dist/src/parser/decl-parser.js +10 -4
  85. package/dist/src/parser/decl-parser.js.map +1 -1
  86. package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
  87. package/dist/src/parser/expr-stmt-parser.js +36 -24
  88. package/dist/src/parser/expr-stmt-parser.js.map +1 -1
  89. package/dist/src/parser/span-utils.d.ts +25 -0
  90. package/dist/src/parser/span-utils.d.ts.map +1 -1
  91. package/dist/src/parser/span-utils.js +43 -0
  92. package/dist/src/parser/span-utils.js.map +1 -1
  93. package/dist/src/parser/type-parser.d.ts.map +1 -1
  94. package/dist/src/parser/type-parser.js +21 -0
  95. package/dist/src/parser/type-parser.js.map +1 -1
  96. package/dist/src/typecheck/expression.d.ts.map +1 -1
  97. package/dist/src/typecheck/expression.js +26 -0
  98. package/dist/src/typecheck/expression.js.map +1 -1
  99. package/dist/test/fuzz/fuzz.test.js +62 -2
  100. package/dist/test/fuzz/fuzz.test.js.map +1 -1
  101. package/dist/test/unit/call-arity.test.d.ts +2 -0
  102. package/dist/test/unit/call-arity.test.d.ts.map +1 -0
  103. package/dist/test/unit/call-arity.test.js +71 -0
  104. package/dist/test/unit/call-arity.test.js.map +1 -0
  105. package/dist/test/unit/canonicalizer/canonicalizer.test.js +42 -4
  106. package/dist/test/unit/canonicalizer/canonicalizer.test.js.map +1 -1
  107. package/dist/test/unit/canonicalizer/line-preservation.test.d.ts +2 -0
  108. package/dist/test/unit/canonicalizer/line-preservation.test.d.ts.map +1 -0
  109. package/dist/test/unit/canonicalizer/line-preservation.test.js +71 -0
  110. package/dist/test/unit/canonicalizer/line-preservation.test.js.map +1 -0
  111. package/dist/test/unit/canonicalizer/marker-restore-linear.test.d.ts +2 -0
  112. package/dist/test/unit/canonicalizer/marker-restore-linear.test.d.ts.map +1 -0
  113. package/dist/test/unit/canonicalizer/marker-restore-linear.test.js +98 -0
  114. package/dist/test/unit/canonicalizer/marker-restore-linear.test.js.map +1 -0
  115. package/dist/test/unit/canonicalizer/possessive-anchor.test.d.ts +2 -0
  116. package/dist/test/unit/canonicalizer/possessive-anchor.test.d.ts.map +1 -0
  117. package/dist/test/unit/canonicalizer/possessive-anchor.test.js +101 -0
  118. package/dist/test/unit/canonicalizer/possessive-anchor.test.js.map +1 -0
  119. package/dist/test/unit/formatter-redos.test.d.ts +2 -0
  120. package/dist/test/unit/formatter-redos.test.d.ts.map +1 -0
  121. package/dist/test/unit/formatter-redos.test.js +196 -0
  122. package/dist/test/unit/formatter-redos.test.js.map +1 -0
  123. package/dist/test/unit/interpreter/interpreter.test.js +7 -2
  124. package/dist/test/unit/interpreter/interpreter.test.js.map +1 -1
  125. package/dist/test/unit/lexer/bom.test.d.ts +2 -0
  126. package/dist/test/unit/lexer/bom.test.d.ts.map +1 -0
  127. package/dist/test/unit/lexer/bom.test.js +49 -0
  128. package/dist/test/unit/lexer/bom.test.js.map +1 -0
  129. package/dist/test/unit/list-get-bounds.test.d.ts +2 -0
  130. package/dist/test/unit/list-get-bounds.test.d.ts.map +1 -0
  131. package/dist/test/unit/list-get-bounds.test.js +66 -0
  132. package/dist/test/unit/list-get-bounds.test.js.map +1 -0
  133. package/dist/test/unit/long-bigint-exact.test.d.ts +2 -0
  134. package/dist/test/unit/long-bigint-exact.test.d.ts.map +1 -0
  135. package/dist/test/unit/long-bigint-exact.test.js +79 -0
  136. package/dist/test/unit/long-bigint-exact.test.js.map +1 -0
  137. package/dist/test/unit/lsp/completion-lexicon.test.d.ts +2 -0
  138. package/dist/test/unit/lsp/completion-lexicon.test.d.ts.map +1 -0
  139. package/dist/test/unit/lsp/completion-lexicon.test.js +83 -0
  140. package/dist/test/unit/lsp/completion-lexicon.test.js.map +1 -0
  141. package/dist/test/unit/lsp/tenant-vocabulary.test.d.ts +2 -0
  142. package/dist/test/unit/lsp/tenant-vocabulary.test.d.ts.map +1 -0
  143. package/dist/test/unit/lsp/tenant-vocabulary.test.js +187 -0
  144. package/dist/test/unit/lsp/tenant-vocabulary.test.js.map +1 -0
  145. package/dist/test/unit/map-builtins.test.js +163 -3
  146. package/dist/test/unit/map-builtins.test.js.map +1 -1
  147. package/dist/test/unit/map-structural-equality.test.d.ts +2 -0
  148. package/dist/test/unit/map-structural-equality.test.d.ts.map +1 -0
  149. package/dist/test/unit/map-structural-equality.test.js +64 -0
  150. package/dist/test/unit/map-structural-equality.test.js.map +1 -0
  151. package/dist/test/unit/map-type-guard.test.js +8 -5
  152. package/dist/test/unit/map-type-guard.test.js.map +1 -1
  153. package/dist/test/unit/mapping/candidate-generator.test.d.ts +2 -0
  154. package/dist/test/unit/mapping/candidate-generator.test.d.ts.map +1 -0
  155. package/dist/test/unit/mapping/candidate-generator.test.js +177 -0
  156. package/dist/test/unit/mapping/candidate-generator.test.js.map +1 -0
  157. package/dist/test/unit/mapping/entity-proposer.test.d.ts +2 -0
  158. package/dist/test/unit/mapping/entity-proposer.test.d.ts.map +1 -0
  159. package/dist/test/unit/mapping/entity-proposer.test.js +168 -0
  160. package/dist/test/unit/mapping/entity-proposer.test.js.map +1 -0
  161. package/dist/test/unit/mapping/mapping-ir.test.d.ts +2 -0
  162. package/dist/test/unit/mapping/mapping-ir.test.d.ts.map +1 -0
  163. package/dist/test/unit/mapping/mapping-ir.test.js +144 -0
  164. package/dist/test/unit/mapping/mapping-ir.test.js.map +1 -0
  165. package/dist/test/unit/mapping/proof-ir.test.d.ts +2 -0
  166. package/dist/test/unit/mapping/proof-ir.test.d.ts.map +1 -0
  167. package/dist/test/unit/mapping/proof-ir.test.js +119 -0
  168. package/dist/test/unit/mapping/proof-ir.test.js.map +1 -0
  169. package/dist/test/unit/mapping/quantity-ir.test.d.ts +2 -0
  170. package/dist/test/unit/mapping/quantity-ir.test.d.ts.map +1 -0
  171. package/dist/test/unit/mapping/quantity-ir.test.js +144 -0
  172. package/dist/test/unit/mapping/quantity-ir.test.js.map +1 -0
  173. package/dist/test/unit/mapping/quantity-redos-property.test.d.ts +2 -0
  174. package/dist/test/unit/mapping/quantity-redos-property.test.d.ts.map +1 -0
  175. package/dist/test/unit/mapping/quantity-redos-property.test.js +182 -0
  176. package/dist/test/unit/mapping/quantity-redos-property.test.js.map +1 -0
  177. package/dist/test/unit/mapping/redos-budget.test.d.ts +2 -0
  178. package/dist/test/unit/mapping/redos-budget.test.d.ts.map +1 -0
  179. package/dist/test/unit/mapping/redos-budget.test.js +168 -0
  180. package/dist/test/unit/mapping/redos-budget.test.js.map +1 -0
  181. package/dist/test/unit/mapping/source-ir.test.d.ts +2 -0
  182. package/dist/test/unit/mapping/source-ir.test.d.ts.map +1 -0
  183. package/dist/test/unit/mapping/source-ir.test.js +113 -0
  184. package/dist/test/unit/mapping/source-ir.test.js.map +1 -0
  185. package/dist/test/unit/nodeid/change-impact.test.d.ts +2 -0
  186. package/dist/test/unit/nodeid/change-impact.test.d.ts.map +1 -0
  187. package/dist/test/unit/nodeid/change-impact.test.js +152 -0
  188. package/dist/test/unit/nodeid/change-impact.test.js.map +1 -0
  189. package/dist/test/unit/nodeid/rename-declaration.test.d.ts +2 -0
  190. package/dist/test/unit/nodeid/rename-declaration.test.d.ts.map +1 -0
  191. package/dist/test/unit/nodeid/rename-declaration.test.js +75 -0
  192. package/dist/test/unit/nodeid/rename-declaration.test.js.map +1 -0
  193. package/dist/test/unit/parse-type-recursion.test.d.ts +2 -0
  194. package/dist/test/unit/parse-type-recursion.test.d.ts.map +1 -0
  195. package/dist/test/unit/parse-type-recursion.test.js +58 -0
  196. package/dist/test/unit/parse-type-recursion.test.js.map +1 -0
  197. package/dist/test/unit/regex-guard.test.js +64 -0
  198. package/dist/test/unit/regex-guard.test.js.map +1 -1
  199. package/dist/test/unit/strict-int-coercion.test.d.ts +2 -0
  200. package/dist/test/unit/strict-int-coercion.test.d.ts.map +1 -0
  201. package/dist/test/unit/strict-int-coercion.test.js +96 -0
  202. package/dist/test/unit/strict-int-coercion.test.js.map +1 -0
  203. package/dist/test/unit/ufcs-receiver.test.d.ts +2 -0
  204. package/dist/test/unit/ufcs-receiver.test.d.ts.map +1 -0
  205. package/dist/test/unit/ufcs-receiver.test.js +75 -0
  206. package/dist/test/unit/ufcs-receiver.test.js.map +1 -0
  207. package/package.json +1 -1
@@ -0,0 +1,98 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { canonicalize } from '../../../src/index.js';
4
+ /**
5
+ * canonicalize 的 marker 还原必须是**单趟**(ADR 0037 §12.10 ①)。
6
+ *
7
+ * <h2>被守护的缺陷</h2>
8
+ *
9
+ * 原写法是逐个 marker 各扫一遍:
10
+ * ```ts
11
+ * for (const [marker, keyword] of keywordMarkers) marked = marked.replace(marker, keyword);
12
+ * ```
13
+ * `.replace(string, string)` 每次从偏移 0 重扫并**重建整串**。多词关键词
14
+ * (`greater than` / `at least`)每出现一次造一个 marker,M 随输入线性增长
15
+ * → **O(M·n)**。实测 750KB 源码 **3368ms**,修复后 **115ms**。
16
+ *
17
+ * <p>★这是本轮审计发现的**最高危**缺陷,而且**不是正则问题**——作者自扫时
18
+ * 只看正则,结构性地漏掉了它。
19
+ *
20
+ * <h2>★为什么必须带对照基线</h2>
21
+ *
22
+ * 只测「含关键词的输入很慢」证明不了归因——大输入本来就慢。必须同时测一份
23
+ * **等长但不含多词关键词**的输入:它若保持线性,才说明慢的是 marker 数量。
24
+ * 实测对照基线恒为 ×1.9〜2.0。
25
+ */
26
+ /** 含多词关键词(`greater than`)——每次出现造一个 marker。 */
27
+ const WITH_KEYWORDS = 'If a is greater than b. ';
28
+ /** 等长、但**不含**任何多词关键词的对照输入。 */
29
+ const CONTROL = 'If a is bigger xxxx b. ';
30
+ /** 取 3 次测量的最小值——最接近真实计算量,受调度抖动最小。 */
31
+ function timeOf(src) {
32
+ canonicalize(src); // 预热,避免 JIT 污染
33
+ let best = Infinity;
34
+ for (let i = 0; i < 3; i++) {
35
+ const t = process.hrtime.bigint();
36
+ canonicalize(src);
37
+ best = Math.min(best, Number(process.hrtime.bigint() - t) / 1e6);
38
+ }
39
+ return best;
40
+ }
41
+ describe('canonicalize marker 还原 — 必须单趟(线性)', () => {
42
+ it('★多词关键词密集的源码必须在绝对预算内完成', () => {
43
+ // ★这条**换过两版判据**,两版都被独立审查者证伪,值得写清楚:
44
+ //
45
+ // v1 `ratio < 3.0`(写死增长率)
46
+ // → 单独跑 2.0× 稳过,**全量套件并发**时涨到 3.40× 变红。flaky。
47
+ //
48
+ // v2 `ratio / 对照基线ratio < 2.0`(相对化)
49
+ // → 修好了 flaky,但**把信号也除掉了**:审查者把 marker 还原退回
50
+ // O(M·n),门禁 **3/3 全绿**(本组 ×3.45 ÷ 对照 ×2.10 = 1.64 < 2.0)。
51
+ // 这是「门禁在结构上无法变红」——比 flaky 更糟。
52
+ // ★我引用的「改前 ×9.69」取自 base=4000,而门禁跑的是 base=8000
53
+ // (实测仅 ×3.40)——**证据取自与门禁不同的输入规模**。
54
+ //
55
+ // v3(本版)**绝对预算**。缺陷态与修复态在同一规模上差 ~30 倍,
56
+ // 余量足够大,既不受并发抖动影响,也不会把信号除没:
57
+ // 修复态 n=32000 → 110ms
58
+ // 缺陷态 n=32000 → 3368ms
59
+ // 取 800ms:修复态有 7× 余量(扛得住慢机器/并发),缺陷态超 4 倍必红。
60
+ const N = 32000;
61
+ const src = WITH_KEYWORDS.repeat(N);
62
+ const ms = timeOf(src);
63
+ assert.ok(ms < 800, `${N} 次多词关键词的源码(${(src.length / 1024).toFixed(0)}KB)耗时 ${ms.toFixed(0)}ms —— 应 <800ms。\n`
64
+ + '★修复态实测 110ms,缺陷态 3368ms(30×)。超预算说明 marker 还原退回了\n'
65
+ + ' 「逐个 replace」的 O(M·n) 写法——每次 replace 都从偏移 0 重扫并重建整串。\n'
66
+ + ' 修法:marked.replace(/\\x00KW\\d+\\x00/g, m => keywordMarkers.get(m) ?? m)');
67
+ });
68
+ it('★对照基线:等长但无多词关键词的输入必须明显更快(证明归因)', () => {
69
+ // 反向守卫:若两者耗时相当,说明慢的是「输入大」而非「marker 多」,
70
+ // 上一条的绝对预算就失去了归因意义。
71
+ const N = 32000;
72
+ const withKw = timeOf(WITH_KEYWORDS.repeat(N));
73
+ const control = timeOf(CONTROL.repeat(N));
74
+ assert.ok(control < withKw * 2, `对照基线(无多词关键词)${control.toFixed(0)}ms 竟不快于含关键词的 ${withKw.toFixed(0)}ms —— \n`
75
+ + '说明 marker 机制没在起作用,上一条的绝对预算失去归因意义。');
76
+ });
77
+ it('★还原结果必须与逐个替换逐字节一致(语义守卫)', () => {
78
+ // 单趟替换若写错(比如正则漏了某种 marker 形态),关键词会残留成 \x00KW0\x00。
79
+ for (const src of [
80
+ 'If a is greater than b.',
81
+ 'If a is at least b.',
82
+ 'If a is greater than b. If c is at least d.',
83
+ ' If a is greater than b. ',
84
+ ]) {
85
+ const out = canonicalize(src);
86
+ assert.ok(!out.includes('\x00'), `输出里残留了未还原的 marker —— 单趟替换的正则漏掉了某种形态。\n`
87
+ + `输入 ${JSON.stringify(src)}\n输出 ${JSON.stringify(out)}`);
88
+ }
89
+ });
90
+ it('★多词关键词确实被识别(否则上面两条都是空洞的)', () => {
91
+ // 反向守卫:若 `greater than` 压根不是多词关键词,就不会产生任何 marker,
92
+ // 前两条测试便测不到本文件声称要守护的东西(本仓记过的「样本无从区分」)。
93
+ const out = canonicalize('If a is GREATER THAN b.');
94
+ assert.match(out, /greater than/, '多词关键词未被归一化为小写 —— 说明 marker 机制没有生效,'
95
+ + '本文件的其余断言全部空洞。实际:' + out);
96
+ });
97
+ });
98
+ //# sourceMappingURL=marker-restore-linear.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker-restore-linear.test.js","sourceRoot":"","sources":["../../../../test/unit/canonicalizer/marker-restore-linear.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=possessive-anchor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"possessive-anchor.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/canonicalizer/possessive-anchor.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { getTransformer } from '../../../src/frontend/transformers.js';
4
+ /**
5
+ * 三个语法变换器的 **ReDoS 修复守卫**(配套 ADR 0037 §12.9)。
6
+ *
7
+ * <h2>为什么直接测 transformer 而不是 canonicalize()</h2>
8
+ *
9
+ * 这三个变换器是 **per-lexicon opt-in** 的,默认 `canonicalize()` 不启用。
10
+ * ★我第一版正是从 `canonicalize()` 入手,结果连「普通所有格能变换」都是红的
11
+ * ——测错了入口,断言再漂亮也没有意义。
12
+ *
13
+ * <h2>守住的两件事</h2>
14
+ *
15
+ * ① **左锚宽度**(所有格):左锚只能排除「该模式**首字符**能取的字符集」,
16
+ * 多排一个字符就是误伤。
17
+ * ② **缩进用水平空白**(set-to / result-is):multiline 下 `^(\s*)` 会在每个
18
+ * 行首起跑并吃穿所有后续空行,呈二次增长。
19
+ */
20
+ const apply = (name, src) => {
21
+ const t = getTransformer(name);
22
+ assert.ok(t !== undefined, `找不到变换器 ${name} —— 注册表变了,本守卫已失效。`);
23
+ return t.transform(src);
24
+ };
25
+ /** 量增长率而非绝对耗时(理由见 redos-budget.test.ts)。 */
26
+ function assertSubQuadratic(label, build, fn, base) {
27
+ fn(build(base / 4));
28
+ const time = (n) => {
29
+ const s = build(n);
30
+ let best = Infinity;
31
+ for (let i = 0; i < 3; i++) {
32
+ const t = process.hrtime.bigint();
33
+ fn(s);
34
+ best = Math.min(best, Number(process.hrtime.bigint() - t) / 1e6);
35
+ }
36
+ return best;
37
+ };
38
+ const small = time(base);
39
+ const large = time(base * 2);
40
+ // ★早退分支断言**噪声地板本身**,不是一个必然成立的宽松上界。
41
+ // 原写法 `if (large < 1.0) assert.ok(large < 50)` 在数学上**永不失败**
42
+ // (进入分支的前提就是 large < 1.0,而 1.0 < 50)——那是恒真断言。
43
+ const NOISE_FLOOR_MS = 1.0;
44
+ if (large < NOISE_FLOOR_MS) {
45
+ assert.ok(large < NOISE_FLOOR_MS, `${label}:${large.toFixed(3)}ms —— 应 <${NOISE_FLOOR_MS}ms。`);
46
+ return;
47
+ }
48
+ const ratio = large / Math.max(small, 0.001);
49
+ assert.ok(ratio < 3.0, `${label}:${base}→${base * 2} 耗时 ${small.toFixed(1)}ms→${large.toFixed(1)}ms,`
50
+ + `增长 ${ratio.toFixed(1)}× —— 应 <3×。\n★接近 4× 说明 ReDoS 修复被撤掉了。`);
51
+ }
52
+ describe('english-possessive — 左锚宽度', () => {
53
+ it('★下划线开头的标识符仍须变换(锚宽多排 _ 会误伤这条)', () => {
54
+ // 模式首字符是 [\p{L}],**不含** `_`。所以 `_x's y` 是从 `x` 起跑的合法
55
+ // 匹配,得 `_x.y`。
56
+ // ★若左锚写成 `(?<![\p{L}0-9_])`(我第一版),`x` 前面是 `_` → 整条被挡掉。
57
+ // 这是**唯一**能区分两种锚宽的形态,前 10 组人工样本全都漏了它,
58
+ // 最后是随机等价性检查抓出来的(300000 组里 1895 组分歧)。
59
+ assert.strictEqual(apply('english-possessive', "_x's y"), '_x.y');
60
+ });
61
+ it('★数字紧邻的标识符仍须变换(同上,锚宽多排 0-9 会误伤)', () => {
62
+ assert.strictEqual(apply('english-possessive', "1x's y"), '1x.y');
63
+ });
64
+ it('普通所有格照常变换(基本功能不得被锚点破坏)', () => {
65
+ assert.strictEqual(apply('english-possessive', "driver's age"), 'driver.age');
66
+ assert.strictEqual(apply('english-possessive', "多's 字"), '多.字');
67
+ });
68
+ it('★不得从词中间起跑(左锚存在性守卫)', () => {
69
+ // 无左锚时,引擎可以从 `river` 起跑。整词优先时看不出差别,
70
+ // 故构造一个**整词匹配不成立**的形态:`'s` 前面接的是非法首字符。
71
+ // `_`/数字开头已在上面覆盖;这里用「前一个 token 是字母」的情形,
72
+ // 断言不会出现任何从中间起跑的产物。
73
+ const out = apply('english-possessive', "Xdriver's age");
74
+ assert.strictEqual(out, 'Xdriver.age', `应整词匹配得 Xdriver.age;出现别的结果说明起跑位置不对。实际:${out}`);
75
+ });
76
+ it('★长标识符 + 不闭合 \'s 不得触发二次回溯', () => {
77
+ // 无左锚时 40000 长度需 2552ms。
78
+ assertSubQuadratic('english-possessive', n => 'a'.repeat(n) + "'s ", s => apply('english-possessive', s), 10000);
79
+ });
80
+ });
81
+ describe('set-to / result-is — 缩进必须是水平空白', () => {
82
+ it('★行首缩进照常保留(基本功能)', () => {
83
+ assert.strictEqual(apply('set-to', ' Set x to 1'), ' Let x be 1');
84
+ assert.strictEqual(apply('set-to', '\tSet x to 1'), '\tLet x be 1');
85
+ assert.strictEqual(apply('result-is', ' The result is 5'), ' Return 5');
86
+ });
87
+ it('★多行文本里每行都要生效(multiline 语义不得被改坏)', () => {
88
+ assert.strictEqual(apply('set-to', 'Set a to 1\n Set b to 2'), 'Let a be 1\n Let b be 2');
89
+ });
90
+ it('★空行不得被缩进组吞掉(\\s* → [ \\t]* 的语义差别就在这里)', () => {
91
+ // 旧式 `^(\s*)` 能把前面的空行一起吃进 $1;新式不会。
92
+ // 两者对**合法输入**结果相同,但新式不会跨行——这正是修复的要点。
93
+ assert.strictEqual(apply('set-to', '\n\nSet x to 1'), '\n\nLet x be 1');
94
+ });
95
+ it('★全空行源文件不得触发二次回溯(真实攻击载荷)', () => {
96
+ // 旧式实测:10000→165ms、20000→657ms、40000→2594ms(×4)。
97
+ assertSubQuadratic('set-to / 全空行', n => 'Let x be 1' + '\n'.repeat(n) + '.', s => apply('set-to', s), 10000);
98
+ assertSubQuadratic('result-is / 全空行', n => 'Let x be 1' + '\n'.repeat(n) + '.', s => apply('result-is', s), 10000);
99
+ });
100
+ });
101
+ //# sourceMappingURL=possessive-anchor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"possessive-anchor.test.js","sourceRoot":"","sources":["../../../../test/unit/canonicalizer/possessive-anchor.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAEvE;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,GAAW,EAAU,EAAE;IAClD,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,UAAU,IAAI,mBAAmB,CAAC,CAAC;IAC9D,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,4CAA4C;AAC5C,SAAS,kBAAkB,CAAC,KAAa,EAAE,KAA4B,EAC3C,EAA0B,EAAE,IAAY;IAClE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE;QACjC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,EAAE,CAAC,CAAC,CAAC,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAE7B,mCAAmC;IACnC,8DAA8D;IAC9D,gDAAgD;IAChD,MAAM,cAAc,GAAG,GAAG,CAAC;IAC3B,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,cAAc,EAC9B,GAAG,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,cAAc,KAAK,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,EACnB,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;UAC5E,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC;AACpE,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,qDAAqD;QACrD,eAAe;QACf,uDAAuD;QACvD,wCAAwC;QACxC,wCAAwC;QACxC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,cAAc,CAAC,EAAE,YAAY,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,oCAAoC;QACpC,uCAAuC;QACvC,wCAAwC;QACxC,oBAAoB;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,oBAAoB,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,aAAa,EACnC,wCAAwC,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,yBAAyB;QACzB,kBAAkB,CAAC,oBAAoB,EACrC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EAC1B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACzB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;QACpE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,cAAc,CAAC,CAAC;QACpE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,WAAW,CAChB,KAAK,CAAC,QAAQ,EAAE,0BAA0B,CAAC,EAC3C,0BAA0B,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,mCAAmC;QACnC,qCAAqC;QACrC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,iDAAiD;QACjD,kBAAkB,CAAC,cAAc,EAC/B,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EACxC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAClC,kBAAkB,CAAC,iBAAiB,EAClC,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EACxC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formatter-redos.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter-redos.test.d.ts","sourceRoot":"","sources":["../../../test/unit/formatter-redos.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,196 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { formatCNL, replaceLineAnchoredPlaceholderForTest } from '../../src/formatter.js';
4
+ import { printCNLFromCst } from '../../src/cst/cst_printer.js';
5
+ import { buildCstLossless } from '../../src/cst/index.js';
6
+ /**
7
+ * 格式化链路的 **ReDoS 门禁**(ADR 0037 §12.10 ②③)。
8
+ *
9
+ * <p>`formatCNL` 与 `printCNLFromCst` 都吃**用户源码**(LSP 格式化 / CLI),
10
+ * 属攻击者可控输入。
11
+ *
12
+ * <h2>★本文件严格遵守两条本轮血泪换来的规矩</h2>
13
+ *
14
+ * **① 每个计时用例都成对给「匹配成功」与「匹配失败」两种载荷。**
15
+ * ReDoS 活在**失配**形态里:`\n+$` 这条就是用失配载荷
16
+ * (`'x' + '\n'.repeat(n) + 'y'`,结尾不是行尾)才测出来的,
17
+ * 用「成功」载荷完全看不见。
18
+ *
19
+ * **② 量增长率而非绝对耗时**,且早退分支**不写恒真断言**。
20
+ */
21
+ /**
22
+ * 取多次最小值——最接近真实计算量,受调度抖动最小。
23
+ *
24
+ * ★重复次数从 3 提到 **7**。3 次在 1〜10ms 量级挡不住 GC/调度尖峰:
25
+ * 实测 8 次全量跑里红了 3 次,报出 6.9× / 11.4× 这种明显不真实的比值,
26
+ * 而同一段代码用 5 次最小值重测是干净的 2.1×/2.2×/1.8×(线性)。
27
+ * **门禁的噪声必须小于它要检出的信号**,否则它测的是调度器不是代码。
28
+ */
29
+ function timeOf(fn) {
30
+ fn(); // 预热
31
+ let best = Infinity;
32
+ for (let i = 0; i < 7; i++) {
33
+ const t = process.hrtime.bigint();
34
+ fn();
35
+ best = Math.min(best, Number(process.hrtime.bigint() - t) / 1e6);
36
+ }
37
+ return best;
38
+ }
39
+ const NOISE_FLOOR_MS = 1.0;
40
+ function assertSubQuadratic(label, build, fn, base) {
41
+ const small = timeOf(() => { fn(build(base)); });
42
+ const large = timeOf(() => { fn(build(base * 2)); });
43
+ // ★早退分支断言的是**噪声地板本身**,不是一个必然成立的宽松上界。
44
+ // (本轮踩过的坑:`if (t < 1.0) assert(t < 50)` 在数学上永不失败。)
45
+ if (large < NOISE_FLOOR_MS) {
46
+ assert.ok(large < NOISE_FLOOR_MS, `${label}:耗时 ${large.toFixed(3)}ms —— 应 <${NOISE_FLOOR_MS}ms。`);
47
+ return;
48
+ }
49
+ const ratio = large / Math.max(small, 0.001);
50
+ assert.ok(ratio < 3.0, `${label}:${base}→${base * 2}(翻倍)耗时 ${small.toFixed(1)}ms→${large.toFixed(1)}ms,`
51
+ + `增长 ${ratio.toFixed(1)}× —— 应 <3×。\n★接近 4× = 二次回溯,修复被撤掉了。`);
52
+ }
53
+ describe('formatCNL — 占位符短路守卫', () => {
54
+ it('★无 `<` 的源码不得走进二次 sanitize(常见路径已线性)', () => {
55
+ // 两条 legacy 占位符模式都**必须**匹配到 `<`,故无 `<` 时必然零匹配,
56
+ // 可整体跳过。这是**可证明**的等价,不依赖语料。
57
+ // 改前端到端 20000 个空行需 1319ms;加守卫后 ~18ms。
58
+ const N = 20000;
59
+ const src = 'Let x be 1' + '\n'.repeat(N) + '.';
60
+ const ms = timeOf(() => { formatCNL(src); });
61
+ assert.ok(ms < 300, `无 \`<\` 的全空行源码(${N} 行)耗时 ${ms.toFixed(0)}ms —— 应 <300ms。\n`
62
+ + '★超预算说明 `hasPlaceholder` 短路守卫被去掉了,'
63
+ + '两条 `^\\s*Return\\s+<...>` 的二次回溯回来了。');
64
+ });
65
+ it('★★含 `<` 的攻击载荷也必须线性(短路守卫绕过后的真实攻击面)', () => {
66
+ // ★这条是**真正的漏洞门禁**。此前两条占位符模式是二次的,
67
+ // 载荷里放一个 `<` 就绕过短路守卫:n=40000 实测 5143ms(×4.0)。
68
+ // 改用 `replaceLineAnchoredPlaceholder` 线性实现后 → 23.4ms。
69
+ //
70
+ // ★只测「无 `<`」的路径是不够的——那正是短路守卫覆盖的那一半,
71
+ // 攻击者当然会绕开它。门禁必须打**绕过后**的那条路。
72
+ const N = 20000;
73
+ const src = 'Let x be 1<' + '\n'.repeat(N) + '.';
74
+ const ms = timeOf(() => { formatCNL(src); });
75
+ assert.ok(ms < 300, `含 \`<\` 的全空行载荷(${N} 行)耗时 ${ms.toFixed(0)}ms —— 应 <300ms。\n`
76
+ + '★超预算说明两条占位符模式退回了 `^\\s*Return...` 的二次正则写法。\n'
77
+ + ' 修法:用 replaceLineAnchoredPlaceholder(不含前导 \\s* 的 core + 代码层左扫行首)。');
78
+ });
79
+ it('★线性实现必须与原正则逐字节等价(宽字母表对拍)', () => {
80
+ // ★等价性是这次改动的**全部风险**所在——前七次改法都是栽在这里。
81
+ // 字母表必须含 `\r \v \f` NBSP 全角空格 U+2028 U+2029,
82
+ // 否则「零分歧」只是在量语料(本仓已记过这个教训)。
83
+ const R1 = /^\s*Return\s+<expr>\s*\./gm;
84
+ const R2 = /^\s*Return\s+<[^>]+>\s*\./gm;
85
+ const VT = String.fromCharCode(0x0b), FF = String.fromCharCode(0x0c);
86
+ const NBSP = String.fromCharCode(0xa0), FW = String.fromCharCode(0x3000);
87
+ const LS = String.fromCharCode(0x2028), PS = String.fromCharCode(0x2029);
88
+ const pool = ['Return <expr>.', ' Return <x>.', '\n', '\r', VT, FF, ' ',
89
+ FW, NBSP, LS, PS, 'a', '.', '\n\n', '\tReturn <abc>.', '<', '>'];
90
+ let seed = 7919;
91
+ const rnd = () => ((seed = (seed * 1103515245 + 12345) & 0x7fffffff) / 0x7fffffff);
92
+ let replaced = 0;
93
+ for (let i = 0; i < 20000; i++) {
94
+ let src = '';
95
+ const n = 1 + Math.floor(rnd() * 10);
96
+ for (let j = 0; j < n; j++)
97
+ src += pool[Math.floor(rnd() * pool.length)];
98
+ R1.lastIndex = 0;
99
+ R2.lastIndex = 0;
100
+ const expected = src
101
+ .replace(R1, m => m.replace('<expr>', 'none'))
102
+ .replace(R2, 'Return none.');
103
+ const actual = replaceLineAnchoredPlaceholderForTest(src);
104
+ if (expected !== src)
105
+ replaced++;
106
+ assert.strictEqual(actual, expected, `线性实现与原正则不一致。输入 ${JSON.stringify(src)}`);
107
+ }
108
+ // ★反向守卫:样本必须真的产生过替换,否则上面的相等断言全空洞。
109
+ assert.ok(replaced > 2000, `只有 ${replaced}/20000 组发生替换 —— 样本判别力不足。`);
110
+ });
111
+ it('★短路守卫不得改变语义(含/不含 `<` 都要与无守卫一致)', () => {
112
+ // 反向守卫:守卫若判错(例如把含 `<` 的也跳过),占位符就不会被改写。
113
+ // 此处直接对拍「无守卫」的原始链路。
114
+ const sanitizeNoGuard = (t) => t.replace(/produce([^\n]*?)\.\s*:/g, (_m, p1) => `produce${p1}:`)
115
+ .replace(/^\s*Return\s+<expr>\s*\./gm, m => m.replace(/<expr>/, 'none'))
116
+ .replace(/<expr>\s*\./g, 'none.')
117
+ .replace(/\.{2,}/g, '.')
118
+ .replace(/^\s*Return\s+<[^>]+>\s*\./gm, 'Return none.');
119
+ // ★守卫只包住**依赖 `<` 的那两步**;`produce…:` 与 `.{2,}→.` 无条件执行。
120
+ // 我第一版把整条链都短路了,被下面的 `"produce a. : b"` / `"a..b"` 抓到。
121
+ const sanitizeGuarded = (t) => {
122
+ const base = t.replace(/produce([^\n]*?)\.\s*:/g, (_m, p1) => `produce${p1}:`)
123
+ .replace(/\.{2,}/g, '.');
124
+ if (!t.includes('<'))
125
+ return base;
126
+ return base
127
+ .replace(/^\s*Return\s+<expr>\s*\./gm, m => m.replace(/<expr>/, 'none'))
128
+ .replace(/<expr>\s*\./g, 'none.')
129
+ .replace(/^\s*Return\s+<[^>]+>\s*\./gm, 'Return none.');
130
+ };
131
+ for (const src of [
132
+ 'Let x be 1.', 'Return <expr>.', ' Return <x>.', '\n\nReturn <x>.',
133
+ 'a\n Return <x>.', 'no placeholder here', 'x < y', 'produce a. : b',
134
+ ]) {
135
+ assert.strictEqual(sanitizeGuarded(src), sanitizeNoGuard(src), `短路守卫改变了语义。输入 ${JSON.stringify(src)}`);
136
+ }
137
+ });
138
+ });
139
+ describe('printCNLFromCst / reflowSeams — ReDoS 门禁', () => {
140
+ /**
141
+ * reflow=true 才会走 reflowSeams——默认 false,但用户可开启。
142
+ *
143
+ * ★**只计时 print 这一步**,CST 构建放在计时区外。
144
+ * 我第一版把 `buildCstLossless` 也算进去,结果 40000→80000 报 3.6×
145
+ * 而被判为回归——实测分离后:buildCst 12.2→23.5ms(线性,但**基数大**),
146
+ * print(reflow) 2.2→7.7ms。**构建成本占了大头,把比值污染了**。
147
+ * 门禁必须只量被测的那一段,否则归因错误。
148
+ */
149
+ const buildOnce = (src) => buildCstLossless(src);
150
+ const reflowOnly = (cst) => printCNLFromCst(cst, { reflow: true });
151
+ const reflow = (src) => reflowOnly(buildOnce(src));
152
+ /** 与 assertSubQuadratic 同判据,但**只计时 print**。 */
153
+ const assertReflowSubQuadratic = (label, build, base) => {
154
+ const cstSmall = buildOnce(build(base));
155
+ const cstLarge = buildOnce(build(base * 2));
156
+ const small = timeOf(() => { reflowOnly(cstSmall); });
157
+ const large = timeOf(() => { reflowOnly(cstLarge); });
158
+ if (large < NOISE_FLOOR_MS) {
159
+ assert.ok(large < NOISE_FLOOR_MS, `${label}:耗时 ${large.toFixed(3)}ms —— 应 <${NOISE_FLOOR_MS}ms。`);
160
+ return;
161
+ }
162
+ const ratio = large / Math.max(small, 0.001);
163
+ assert.ok(ratio < 3.0, `${label}:${base}→${base * 2}(翻倍)耗时 ${small.toFixed(1)}ms→${large.toFixed(1)}ms,`
164
+ + `增长 ${ratio.toFixed(1)}× —— 应 <3×。\n★接近 4× = 二次回溯,修复被撤掉了。`);
165
+ };
166
+ it('★空白 run + 失配后缀(`\\s+标点` / 行尾空白)', () => {
167
+ // 改前:\s+([.,:!?;]) 为 162→668→2571ms(×4.0)
168
+ assertReflowSubQuadratic('reflowSeams / 空白 run', n => 'Let x be 1' + ' '.repeat(n) + 'y.', 10000);
169
+ });
170
+ it('★★换行 run + **失配**后缀 —— `\\n+$` 只在这种形态下暴露', () => {
171
+ // ★这条是本轮补测出来的第三处缺陷,此前我和审查者都漏了它。
172
+ // `/\n+$/g` 用「结尾就是换行」的载荷完全看不出问题;
173
+ // 只有结尾**不是**行尾(这里是 `y.`)时才会全量回退。
174
+ // 改前实测:10000→144ms、20000→576ms、40000→2297ms(×4.0)。
175
+ // ★判据用**绝对预算**而非增长率。
176
+ //
177
+ // 增长率在这里天然不稳:被测段本身只有 5〜19ms,GC/调度尖峰就能把
178
+ // 比值推过 3.0(实测 8 次全量跑仍红 1 次,报 3.4×,而同代码单独重测是
179
+ // 干净的 2.1×/2.2×/1.8× 线性)。**门禁的噪声必须小于它要检出的信号。**
180
+ //
181
+ // 缺陷态在同规模下是 ~2300ms(×4 逐级放大),修复态 19ms —— 差 120 倍。
182
+ // 取 300ms:修复态有 15× 余量,缺陷态超 7 倍必红。信号噪声比远优于比值判据。
183
+ const N = 160000;
184
+ const cst = buildOnce('Let x be 1.' + '\n'.repeat(N) + 'Let y be 2.');
185
+ const ms = timeOf(() => { reflowOnly(cst); });
186
+ assert.ok(ms < 300, `reflowSeams / 换行 run + 失配后缀(${N} 个换行)耗时 ${ms.toFixed(1)}ms —— 应 <300ms。\n`
187
+ + '★修复态实测 19ms,缺陷态(撤掉 `(?<!\\n)` 左锚)同规模需约 2300ms。\n'
188
+ + ' 超预算说明 `/\\n+$/g` 的左锚被去掉了,换行 run 上的全量回退回来了。');
189
+ });
190
+ it('★reflow 的语义不得被左锚改坏', () => {
191
+ // 反向守卫:左锚若写宽了会静默少替换。
192
+ const out = reflow('Let x be 1 .');
193
+ assert.ok(!out.includes(' .'), `标点前空白未被去掉 —— 左锚写宽了。实际:${JSON.stringify(out)}`);
194
+ });
195
+ });
196
+ //# sourceMappingURL=formatter-redos.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter-redos.test.js","sourceRoot":"","sources":["../../../test/unit/formatter-redos.test.ts"],"names":[],"mappings":"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"}
@@ -494,13 +494,18 @@ describe('Core IR 解释器', () => {
494
494
  assert.ok(result.success);
495
495
  assert.deepEqual(result.value, { __type: 'Ok', value: 42 });
496
496
  });
497
- it('None 返回 null', () => {
497
+ // ★None 的运行期表示是 `{__type:'None'}`,与 truffle 的 maybeNone() 一致
498
+ // (aster-lang-ts#137)。此前断言的是裸 `null`——那正是被修掉的分叉:
499
+ // 同一份 IR,TS 产出 `null`、Truffle 产出 `{__type:"None"}`,宿主拿到的
500
+ // JSON 不同,等价性按值比较判为不等。
501
+ it('None 返回 {__type:"None"}(与 truffle 一致)', () => {
498
502
  const mod = mkModule([
499
503
  mkFunc('f', [], [mkReturn({ kind: 'None' })]),
500
504
  ]);
501
505
  const result = evaluate(mod, 'f', {});
502
506
  assert.ok(result.success);
503
- assert.equal(result.value, null);
507
+ assert.deepEqual(result.value, { __type: 'None' });
508
+ assert.notEqual(result.value, null, 'None 不得再退化为裸 null');
504
509
  });
505
510
  });
506
511
  describe('裸枚举变体求值(return Gold)', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"interpreter.test.js","sourceRoot":"","sources":["../../../../test/unit/interpreter/interpreter.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interpreter.test.js","sourceRoot":"","sources":["../../../../test/unit/interpreter/interpreter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bom.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bom.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/lexer/bom.test.ts"],"names":[],"mappings":""}