@aster-cloud/aster-lang-ts 1.2.3 → 1.2.4

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 (54) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/src/config/semantic.d.ts +8 -0
  3. package/dist/src/config/semantic.d.ts.map +1 -1
  4. package/dist/src/config/semantic.js +13 -0
  5. package/dist/src/config/semantic.js.map +1 -1
  6. package/dist/src/core/interpreter.js +22 -7
  7. package/dist/src/core/interpreter.js.map +1 -1
  8. package/dist/src/core/resolve-typed-references.d.ts.map +1 -1
  9. package/dist/src/core/resolve-typed-references.js +18 -1
  10. package/dist/src/core/resolve-typed-references.js.map +1 -1
  11. package/dist/src/lsp/member-completion.d.ts.map +1 -1
  12. package/dist/src/lsp/member-completion.js +22 -5
  13. package/dist/src/lsp/member-completion.js.map +1 -1
  14. package/dist/src/typecheck/browser.d.ts.map +1 -1
  15. package/dist/src/typecheck/browser.js +3 -3
  16. package/dist/src/typecheck/browser.js.map +1 -1
  17. package/dist/src/typecheck/context.d.ts +1 -1
  18. package/dist/src/typecheck/context.d.ts.map +1 -1
  19. package/dist/src/typecheck/context.js +6 -3
  20. package/dist/src/typecheck/context.js.map +1 -1
  21. package/dist/src/typecheck/expression.d.ts.map +1 -1
  22. package/dist/src/typecheck/expression.js +60 -19
  23. package/dist/src/typecheck/expression.js.map +1 -1
  24. package/dist/src/typecheck/module.d.ts.map +1 -1
  25. package/dist/src/typecheck/module.js +3 -3
  26. package/dist/src/typecheck/module.js.map +1 -1
  27. package/dist/src/typecheck/pure.d.ts +15 -0
  28. package/dist/src/typecheck/pure.d.ts.map +1 -1
  29. package/dist/src/typecheck/pure.js +83 -0
  30. package/dist/src/typecheck/pure.js.map +1 -1
  31. package/dist/src/typecheck/statement.d.ts.map +1 -1
  32. package/dist/src/typecheck/statement.js +3 -1
  33. package/dist/src/typecheck/statement.js.map +1 -1
  34. package/dist/src/typecheck/symbol_table.d.ts +3 -0
  35. package/dist/src/typecheck/symbol_table.d.ts.map +1 -1
  36. package/dist/src/typecheck/symbol_table.js +1 -0
  37. package/dist/src/typecheck/symbol_table.js.map +1 -1
  38. package/dist/src/typecheck/utils.d.ts +1 -1
  39. package/dist/src/typecheck/utils.d.ts.map +1 -1
  40. package/dist/src/typecheck/utils.js +1 -1
  41. package/dist/src/typecheck/utils.js.map +1 -1
  42. package/dist/test/unit/core/caseless-pattern-name.test.d.ts +2 -0
  43. package/dist/test/unit/core/caseless-pattern-name.test.d.ts.map +1 -0
  44. package/dist/test/unit/core/caseless-pattern-name.test.js +114 -0
  45. package/dist/test/unit/core/caseless-pattern-name.test.js.map +1 -0
  46. package/dist/test/unit/formatter-corpus-roundtrip.test.js +2 -0
  47. package/dist/test/unit/formatter-corpus-roundtrip.test.js.map +1 -1
  48. package/dist/test/unit/lsp/member-completion.test.js +67 -6
  49. package/dist/test/unit/lsp/member-completion.test.js.map +1 -1
  50. package/dist/test/unit/rule-call-checks.test.d.ts +2 -0
  51. package/dist/test/unit/rule-call-checks.test.d.ts.map +1 -0
  52. package/dist/test/unit/rule-call-checks.test.js +269 -0
  53. package/dist/test/unit/rule-call-checks.test.js.map +1 -0
  54. package/package.json +1 -1
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @module test/unit/core/caseless-pattern-name.test
3
+ *
4
+ * 无大小写文字(中文等)的裸模式名(ADR 0051 裁决 R55,aster-lang-core#227)。
5
+ *
6
+ * 成员还是绑定由 R2 按 R12 判定(主语为枚举时查该枚举的成员,主语类型未知时查全部枚举成员的精确写法,
7
+ * 其余为绑定),两引擎一致;R2 再按判定结果给出统一的 IR 形态:成员为无参数 PatCtor,绑定为 PatName。
8
+ * 首字母为 ASCII 大写的名字 IR 不变;de 变音开头成员与小写 ASCII 成员同样产出 PatCtor。用例与 aster-lang-core 的 CaselessPatternNameTest 同输入同断言,
9
+ * 另加解释器求值(core 没有解释器,求值由 truffle 与 aster-lang-test 的 tier1 样本覆盖)。
10
+ */
11
+ import { describe, it } from 'node:test';
12
+ import assert from 'node:assert/strict';
13
+ import { compileAndTypecheck } from '../../../src/browser.js';
14
+ import { evaluate } from '../../../src/core/interpreter.js';
15
+ import { ZH_CN } from '../../../src/config/lexicons/zh-CN.js';
16
+ import { DE_DE } from '../../../src/config/lexicons/de-DE.js';
17
+ const ENUM_ZH = '模块 探针.样例。\n\n定义 状态 为以下之一 待处理、进行中、已删除。\n\n';
18
+ function compileClean(source, lexicon) {
19
+ const result = compileAndTypecheck(source, lexicon ? { lexicon } : {});
20
+ assert.equal(result.success, true, JSON.stringify(result.parseErrors));
21
+ const errors = (result.typeErrors ?? []).filter((d) => d.severity === 'error');
22
+ assert.deepEqual(errors, [], '类型检查');
23
+ return result.core;
24
+ }
25
+ function patterns(core, func) {
26
+ const fn = core.decls.find((d) => d.kind === 'Func' && d.name === func);
27
+ assert.ok(fn, `缺少规则 ${func}`);
28
+ const match = fn.body.statements.find((s) => s.kind === 'Match');
29
+ assert.ok(match, `${func} 中没有 匹配于`);
30
+ return match.cases.map((c) => c.pattern);
31
+ }
32
+ function assertVariant(name, p) {
33
+ assert.equal(p?.kind, 'PatCtor', `成员应为无参数 PatCtor:${name}`);
34
+ const ctor = p;
35
+ assert.equal(ctor.typeName, name);
36
+ assert.deepEqual([...(ctor.names ?? [])], []);
37
+ assert.deepEqual([...(ctor.args ?? [])], []);
38
+ }
39
+ function assertBinding(name, p) {
40
+ assert.equal(p?.kind, 'PatName', `绑定应为 PatName:${name}`);
41
+ assert.equal(p.name, name);
42
+ }
43
+ function run(core, entry, context) {
44
+ const result = evaluate(core, entry, context);
45
+ assert.equal(result.success, true, result.error);
46
+ return result.value;
47
+ }
48
+ describe('无大小写文字的裸模式名(R55)', () => {
49
+ const describeSource = ENUM_ZH
50
+ + '规则 描述 给定 s 作为 状态,产出 整数:\n 匹配于 s:\n 当 待处理,返回 1。\n 当 进行中,返回 2。\n'
51
+ + ' 当 其余,返回 9。\n\n'
52
+ + '规则 删除后,产出 整数:\n 返回 描述(已删除)。\n\n'
53
+ + '规则 进行时,产出 整数:\n 返回 描述(进行中)。\n';
54
+ it('主语枚举的成员是变体,其余名字是绑定', () => {
55
+ const ps = patterns(compileClean(describeSource, ZH_CN), '描述');
56
+ assertVariant('待处理', ps[0]);
57
+ assertVariant('进行中', ps[1]);
58
+ assertBinding('其余', ps[2]);
59
+ });
60
+ it('变体只匹配同名成员,绑定兜底其余成员', () => {
61
+ const core = compileClean(describeSource, ZH_CN);
62
+ assert.equal(run(core, '进行时', {}), 2);
63
+ assert.equal(run(core, '删除后', {}), 9);
64
+ });
65
+ it('非枚举主语下的名字是绑定', () => {
66
+ const core = compileClean(ENUM_ZH
67
+ + '规则 分类 给定 n 作为 整数,产出 整数:\n 匹配于 n:\n 当 0,返回 100。\n 当 其他,返回 其他 加上 1。\n', ZH_CN);
68
+ assertBinding('其他', patterns(core, '分类')[1]);
69
+ assert.equal(run(core, '分类', { n: 5 }), 6);
70
+ assert.equal(run(core, '分类', { n: 0 }), 100);
71
+ });
72
+ it('非枚举主语下与枚举成员同名的名字仍是绑定', () => {
73
+ const core = compileClean(ENUM_ZH
74
+ + '规则 分类 给定 n 作为 整数,产出 整数:\n 匹配于 n:\n 当 待处理,返回 待处理 加上 1。\n', ZH_CN);
75
+ assertBinding('待处理', patterns(core, '分类')[0]);
76
+ });
77
+ it('主语类型未知时精确命中的成员是变体,其余是绑定', () => {
78
+ const ps = patterns(compileClean(ENUM_ZH
79
+ + '规则 选择 给定 s,产出 整数:\n 匹配于 s:\n 当 已删除,返回 1。\n 当 别的,返回 2。\n', ZH_CN), '选择');
80
+ assertVariant('已删除', ps[0]);
81
+ assertBinding('别的', ps[1]);
82
+ });
83
+ it('de 变音字母开头的成员是变体,非成员是绑定', () => {
84
+ const core = compileClean('Modul probe.de.\n\nDefiniere Laune als eines von Übel, Gut, Ärger.\n\n'
85
+ + 'Regel wert gegeben l als Laune, liefert Ganzzahl:\n pruefe l:\n bei Übel, gib zurueck 1.\n'
86
+ + ' bei Gut, gib zurueck 2.\n bei rest, gib zurueck 9.\n\n'
87
+ + 'Regel wAerger, liefert Ganzzahl:\n gib zurueck wert(Laune.Ärger).\n\n'
88
+ + 'Regel bind gegeben n als Ganzzahl, liefert Ganzzahl:\n pruefe n:\n bei 0, gib zurueck 100.\n'
89
+ + ' bei Ärger, gib zurueck Ärger.\n', DE_DE);
90
+ const ps = patterns(core, 'wert');
91
+ assertVariant('Übel', ps[0]);
92
+ assert.equal(ps[1]?.kind, 'PatName');
93
+ assertBinding('rest', ps[2]);
94
+ assertBinding('Ärger', patterns(core, 'bind')[1]);
95
+ assert.equal(run(core, 'wAerger', {}), 9);
96
+ assert.equal(run(core, 'bind', { n: 7 }), 7);
97
+ });
98
+ it('小写 ASCII 枚举成员是变体(本仓接受的写法)', () => {
99
+ const core = compileClean('Module probe.lc.\n\nDefine Color as one of red, Green.\n\n'
100
+ + 'Rule f given c as Color, produce Int:\n Match c:\n When red, Return 1.\n When Green, Return 2.\n\n'
101
+ + 'Rule g, produce Int:\n Return f(Color.Green).\n');
102
+ assertVariant('red', patterns(core, 'f')[0]);
103
+ assert.equal(run(core, 'g', {}), 2);
104
+ });
105
+ it('首字母为 ASCII 大写的名字 IR 不变', () => {
106
+ // en:裸 TYPE_IDENT 在 TS 仍为 PatName(运行时按大写判为变体),小写绑定仍为 PatName,IR 不变
107
+ const ps = patterns(compileClean('Module demo.cased.\n\nDefine Color as one of Red, Green.\n\n'
108
+ + 'Rule f given c as Color, produce Int:\n Match c:\n When Red, Return 1.\n When other, Return 2.\n'), 'f');
109
+ assert.equal(ps[0]?.kind, 'PatName');
110
+ assert.equal(ps[0].name, 'Red');
111
+ assertBinding('other', ps[1]);
112
+ });
113
+ });
114
+ //# sourceMappingURL=caseless-pattern-name.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caseless-pattern-name.test.js","sourceRoot":"","sources":["../../../../test/unit/core/caseless-pattern-name.test.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,8 @@ const ALLOW_LIST = new Map([
48
48
  ['corpus/tier1-parity/vocab-zh/synonyms.aster', CJK_IDENTIFIERS],
49
49
  ['corpus/tier1-parity/vocab-zh/type-equals-field.aster', CJK_IDENTIFIERS],
50
50
  ['corpus/tier1-parity/vocab-zh/set-writeback.aster', CJK_IDENTIFIERS],
51
+ ['corpus/tier1-parity/vocab-zh/block-scope-shadowing.aster', CJK_IDENTIFIERS],
52
+ ['corpus/tier1-parity/vocab-zh/cjk-pattern-binding.aster', CJK_IDENTIFIERS],
51
53
  ['corpus/tier1-reject/vocab-e804-zh-member-vs-rule.aster', CJK_IDENTIFIERS],
52
54
  ]);
53
55
  function asterFiles(dir, out = []) {
@@ -1 +1 @@
1
- {"version":3,"file":"formatter-corpus-roundtrip.test.js","sourceRoot":"","sources":["../../../test/unit/formatter-corpus-roundtrip.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,oCAAoC,CAAC;AAI3D,oCAAoC;AACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACnG,MAAM,QAAQ,GAAsC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAEvG,uEAAuE;AACvE,2CAA2C;AAC3C,MAAM,eAAe,GAAG,wCAAwC,CAAC;AACjE,MAAM,UAAU,GAAgC,IAAI,GAAG,CAAC;IACtD,CAAC,sDAAsD,EAAE,eAAe,CAAC;IACzE,CAAC,wDAAwD,EAAE,eAAe,CAAC;IAC3E,CAAC,4DAA4D,EAAE,eAAe,CAAC;IAC/E,CAAC,+DAA+D,EAAE,eAAe,CAAC;IAClF,CAAC,+DAA+D,EAAE,eAAe,CAAC;IAClF,CAAC,mEAAmE,EAAE,eAAe,CAAC;IACtF,CAAC,sEAAsE,EAAE,eAAe,CAAC;IACzF,CAAC,kEAAkE,EAAE,eAAe,CAAC;IACrF,CAAC,mEAAmE,EAAE,eAAe,CAAC;IACtF,CAAC,wDAAwD,EAAE,eAAe,CAAC;IAC3E,6DAA6D;IAC7D,CAAC,2DAA2D,EAAE,eAAe,CAAC;IAC9E,CAAC,6CAA6C,EAAE,eAAe,CAAC;IAChE,CAAC,sDAAsD,EAAE,eAAe,CAAC;IACzE,CAAC,kDAAkD,EAAE,eAAe,CAAC;IACrE,CAAC,wDAAwD,EAAE,eAAe,CAAC;CAC5E,CAAC,CAAC;AAEH,SAAS,UAAU,CAAC,GAAW,EAAE,MAAgB,EAAE;IACjD,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;YAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iFAAiF;AACjF,SAAS,eAAe;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACpD,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;SAC1F,IAAI,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,MAAM,CAAC,MAAc,EAAE,OAAgB;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACxE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC;IAC3D,OAAO,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA0B,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACjH,CAAC;AAED,8CAA8C;AAC9C,SAAS,qBAAqB,CAAC,IAAY,EAAE,MAAc;IACzD,MAAM,KAAK,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;IAClH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAE,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,UAAU;QACZ,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,yCAAyC;AACzC,SAAS,WAAW,CAAC,CAAsC;IACzD,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,qEAAqE,CAAC,CAAC;QAClG,CAAC,CAAC,UAAU,CAAC,sCAAsC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO;QACL,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7E,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7G,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,SAAS,WAAW,CAAC,MAAc;IACjC,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAc;IACjC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IAC1G,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM;SACpB,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC3E,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,mBAAmB,CAAC;IACtD,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC;IACjF,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC;IACxE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7E,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,IAAI,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QACrG,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9E,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAQ,CAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxE,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAQ,CAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE;IAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC;SAC5B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAClE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kDAAkD,EAAE,CAAC,CAAC,EAAE,EAAE;IAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC;SAC5B,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC/D,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE,EAAE;IACvC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACzE,yCAAyC;IACzC,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,IAAI;SACf,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SACvC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACvE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,SAAS,kBAAkB,CAAC,OAAe,EAAE,OAA0B;IACrE,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM;QAC5B,CAAC,CAAC,0CAA0C;QAC5C,CAAC,CAAC,UAAU,MAAM,IAAI,MAAM,oBAAoB,CAAC;IACnD,OAAO,QAAQ,OAAO,CAAC,MAAM,eAAe,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC5E,CAAC;AAED,yEAAyE;AACzE,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAc,EAAsB,EAAE;QACpD,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACrC,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;IAC7H,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"formatter-corpus-roundtrip.test.js","sourceRoot":"","sources":["../../../test/unit/formatter-corpus-roundtrip.test.ts"],"names":[],"mappings":"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"}
@@ -107,23 +107,84 @@ describe('#258 修补推断的缓存与规模上限', () => {
107
107
  return { text, ...parseDocumentText(text, ZH_CN, undefined, undefined) };
108
108
  };
109
109
  const ZH_AT = { line: 5, character: ' 如果 司机.'.length };
110
+ /** 统计次数、但每份修补都推断不出接收者类型的 parse(模拟所有修补都失败) */
111
+ const failingParse = () => {
112
+ let n = 0;
113
+ return {
114
+ parse: ((_text, lexicon, vocabulary) => {
115
+ n += 1;
116
+ return parseDocumentWith('Module demo.p.\n', lexicon, vocabulary);
117
+ }),
118
+ count: () => n,
119
+ };
120
+ };
110
121
  it('★累计耗时超过预算后放弃其余修补:第一份修补失败即返回 null', () => {
111
- const probe = countingParse();
112
- const items = memberCompletions(zhDoc(), ZH_AT, ZH_CN, { parse: probe.parse, now: ticking(1000), repairBudgetMs: 150, repairBudgetFromLines: 0 });
122
+ const probe = failingParse();
123
+ const items = memberCompletions(docOf(broken('')), at(''), EN_US, { parse: probe.parse, now: ticking(1000), repairBudgetMs: 150, repairBudgetFromLines: 0 });
113
124
  assert.equal(items, null);
114
125
  assert.equal(probe.count(), 1, '第一份修补总会尝试,之后超预算即停止');
115
126
  });
116
- it('小文档(不足 MEMBER_REPAIR_BUDGET_FROM_LINES 行)不受预算约束:冷启动或高负载下也依次尝试到成功', () => {
127
+ it('★#267 块头行(如果/If/Match/Otherwise 开头)先试「换成 返回 接收者.」:高负载下首次请求即出字段', () => {
128
+ const filler = Array.from({ length: 1200 }, () => '');
129
+ const lines = [...ZH_LINES.slice(0, 5), ' 如果 司机.', ...filler];
130
+ assert.ok(lines.length >= 1000, '须达到预算生效的行数');
131
+ const text = lines.join('\n');
132
+ const doc = { text, ...parseDocumentText(text, ZH_CN, undefined, undefined) };
117
133
  const probe = countingParse();
118
- const items = memberCompletions(zhDoc(), ZH_AT, ZH_CN, { parse: probe.parse, now: ticking(1000), repairBudgetMs: 150 });
134
+ const items = memberCompletions(doc, ZH_AT, ZH_CN, { parse: probe.parse, now: ticking(1000), repairBudgetMs: 150 });
119
135
  assert.deepEqual(labels(items), ['姓名', '年龄'].sort());
136
+ assert.equal(probe.count(), 1, '块头行第一份修补即为「换成 返回 接收者.」');
137
+ });
138
+ it('#267 英文块头同样优先:Match d. / Otherwise if d. 在预算耗尽时首次请求即出字段', () => {
139
+ for (const header of [' Match d.', ' Otherwise if d.', ' if d.']) {
140
+ clearMemberRepairCache();
141
+ const lines = [...HEAD, ' If d.age greater than 1:', ' Return 1.', header, ''];
142
+ const probe = countingParse();
143
+ const items = memberCompletions(docOf(lines), { line: 7, character: header.length }, EN_US, { parse: probe.parse, now: ticking(1000), repairBudgetMs: 150, repairBudgetFromLines: 0 });
144
+ assert.deepEqual(labels(items), ['age', 'name'], header);
145
+ assert.equal(probe.count(), 1, header);
146
+ }
147
+ });
148
+ it('#267 非块头行保持原修补顺序:先删 `.前缀`', () => {
149
+ const tried = [];
150
+ const parse = (text, lexicon, vocabulary) => {
151
+ tried.push(text.split('\n')[5]);
152
+ return parseDocumentWith(text, lexicon, vocabulary);
153
+ };
154
+ const line = ' Let x be d. plus 1';
155
+ memberCompletions(docOf([...HEAD, line, ' Return 1.', '']), { line: 5, character: ' Let x be d.'.length }, EN_US, { parse, now: ticking(0), repairBudgetFromLines: 0 });
156
+ assert.equal(tried[0], ' Let x be d plus 1');
157
+ });
158
+ /** 前 failures 份修补推断失败、之后正常解析的 parse */
159
+ const failFirst = (failures) => {
160
+ let n = 0;
161
+ return {
162
+ parse: ((text, lexicon, vocabulary) => {
163
+ n += 1;
164
+ return parseDocumentWith(n <= failures ? 'Module demo.p.\n' : text, lexicon, vocabulary);
165
+ }),
166
+ count: () => n,
167
+ };
168
+ };
169
+ const LET_LINES = [...HEAD, ' Let x be d. plus 1', ' Return 1.', ''];
170
+ const LET_AT = { line: 5, character: ' Let x be d.'.length };
171
+ it('小文档(不足 MEMBER_REPAIR_BUDGET_FROM_LINES 行)不受预算约束:冷启动或高负载下也依次尝试到成功', () => {
172
+ const probe = failFirst(2);
173
+ const items = memberCompletions(docOf(LET_LINES), LET_AT, EN_US, { parse: probe.parse, now: ticking(1000), repairBudgetMs: 150 });
174
+ assert.deepEqual(labels(items), ['age', 'name']);
120
175
  assert.equal(probe.count(), 3);
121
176
  });
122
177
  it('预算未超出时依次尝试,直到某份修补成功', () => {
178
+ const probe = failFirst(2);
179
+ const items = memberCompletions(docOf(LET_LINES), LET_AT, EN_US, { parse: probe.parse, now: ticking(0), repairBudgetMs: 150, repairBudgetFromLines: 0 });
180
+ assert.deepEqual(labels(items), ['age', 'name']);
181
+ assert.equal(probe.count(), 3);
182
+ });
183
+ it('zh 块头 `如果 司机.` 在小文档里同样一次修补即成功', () => {
123
184
  const probe = countingParse();
124
- const items = memberCompletions(zhDoc(), ZH_AT, ZH_CN, { parse: probe.parse, now: ticking(0), repairBudgetMs: 150, repairBudgetFromLines: 0 });
185
+ const items = memberCompletions(zhDoc(), ZH_AT, ZH_CN, { parse: probe.parse, now: ticking(1000), repairBudgetMs: 150 });
125
186
  assert.deepEqual(labels(items), ['姓名', '年龄'].sort());
126
- assert.equal(probe.count(), 3);
187
+ assert.equal(probe.count(), 1);
127
188
  });
128
189
  it('命中缓存的修补不计耗时:预算耗尽时继续输入前缀仍能补全', () => {
129
190
  memberCompletions(docOf(broken('')), at(''), EN_US);
@@ -1 +1 @@
1
- {"version":3,"file":"member-completion.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/member-completion.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"member-completion.test.js","sourceRoot":"","sources":["../../../../test/unit/lsp/member-completion.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rule-call-checks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule-call-checks.test.d.ts","sourceRoot":"","sources":["../../../test/unit/rule-call-checks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,269 @@
1
+ /**
2
+ * 用户规则调用的静态检查与运行期调用目标(#266 #268)。
3
+ *
4
+ * #266:调用本模块规则或函数值局部名时,按**显式写了类型**的形参比较实参类型,不符报 E001
5
+ * (与 Java BaseTypeChecker.checkCall 同码)。未写类型的形参(解析器按名字推断出类型,
6
+ * `typeInferred`)不参与比较——推断类型只是按名字猜的。Java 目前仍按推断类型比较并拒绝这类调用,
7
+ * TS 放行(向 TS 对齐见 aster-lang-core#229)。原则:能正常运行的程序不新增 E001,拿不准时放行。
8
+ * #268:调用目标解析与 Java/truffle 一致——局部名遮蔽同名规则。局部名类型已知且不是函数类型时
9
+ * 报 E001(期望函数);TS 解释器同样按局部名分派,不再悄悄改调同名规则。
10
+ */
11
+ import { describe, it } from 'node:test';
12
+ import { existsSync, readFileSync } from 'node:fs';
13
+ import { join, resolve } from 'node:path';
14
+ import assert from 'node:assert/strict';
15
+ import { compileAndTypecheck, evaluate, EN_US } from '../../src/browser.js';
16
+ import { NAMED_BUILTIN_OPS } from '../../src/config/semantic.js';
17
+ const INC = 'Rule inc given x as Int, produce Int:\n Return x plus 1.\n\n';
18
+ const GREET = 'Rule greet given name as Text, produce Text:\n Return name.\n\n';
19
+ const TWICE = 'Rule twice given f as (Int) -> Int, n as Int, produce Int:\n Return f(f(n)).\n\n';
20
+ function check(body) {
21
+ const r = compileAndTypecheck(`Module demo.\n\n${body}`, { lexicon: EN_US });
22
+ const errors = [...(r.parseErrors ?? []), ...(r.resolutionDiagnostics ?? []), ...(r.typeErrors ?? [])]
23
+ .filter((d) => d.severity === 'error');
24
+ return { errors, core: r.core };
25
+ }
26
+ function mismatches(errors) {
27
+ return errors.filter((d) => d.code === 'E001').map((d) => d.data);
28
+ }
29
+ describe('#266 用户规则调用的实参类型', () => {
30
+ it('★inc("a"):形参 Int、实参 Text,报 E001', () => {
31
+ const { errors } = check(INC + 'Rule main given n as Int, produce Int:\n Return inc("a").\n');
32
+ assert.deepEqual(mismatches(errors), [{ expected: 'Int', actual: 'Text' }]);
33
+ });
34
+ it('经函数值局部名调用同样比较:Let g be inc. Return g("a").', () => {
35
+ const { errors } = check(INC + 'Rule main given n as Int, produce Int:\n Let g be inc.\n Return g("a").\n');
36
+ assert.deepEqual(mismatches(errors), [{ expected: 'Int', actual: 'Text' }]);
37
+ });
38
+ it('函数值实参与函数类型形参不符:twice(greet, n) 报 E001', () => {
39
+ const { errors } = check(GREET + TWICE + 'Rule main given n as Int, produce Int:\n Return twice(greet, n).\n');
40
+ assert.deepEqual(mismatches(errors), [{ expected: '(Int) -> Int', actual: '(Text) -> Text' }]);
41
+ });
42
+ it('类型相符不报错:inc(n)、twice(inc, n)', () => {
43
+ const { errors } = check(INC + TWICE + 'Rule main given n as Int, produce Int:\n Return twice(inc, inc(n)).\n');
44
+ assert.deepEqual(errors, []);
45
+ });
46
+ it('★未写类型的形参不比较:greet given name 推断为 Text,传 Int 不报错', () => {
47
+ const { errors } = check('Rule label given amount, produce Text:\n Return "x".\n\n' +
48
+ 'Rule main given n as Int, produce Text:\n Return label("a").\n');
49
+ assert.deepEqual(errors, []);
50
+ });
51
+ it('未写类型的形参经函数值传递也不比较:twice(bump, n) 不因推断类型报错', () => {
52
+ const { errors } = check('Rule bump given amount, produce Int:\n Return 1.\n\n' + TWICE +
53
+ 'Rule main given n as Int, produce Int:\n Return twice(bump, n).\n');
54
+ assert.deepEqual(mismatches(errors), []);
55
+ });
56
+ it('lambda 函数值:显式类型形参比较,未写类型的形参不比较', () => {
57
+ const typed = check('Rule main given n as Int, produce Int:\n Let f be function with x as Int, produce Int:\n Return x.\n Return f("a").\n');
58
+ assert.deepEqual(mismatches(typed.errors), [{ expected: 'Int', actual: 'Text' }]);
59
+ const untyped = check('Rule main given flag as Bool, produce Int:\n Let f be function with x, produce:\n Return 1.\n Return f(flag).\n');
60
+ assert.deepEqual(mismatches(untyped.errors), []);
61
+ });
62
+ it('Int 实参传给 Float 形参按数值拓宽放行', () => {
63
+ const { errors } = check('Rule half given x as Float, produce Float:\n Return x.\n\n' +
64
+ 'Rule main given n as Int, produce Float:\n Return half(n).\n');
65
+ assert.deepEqual(mismatches(errors), []);
66
+ });
67
+ it('函数类型形参位按逆变比较:期望 (Int) -> Int 时可传 (Float) -> Int', () => {
68
+ const { errors } = check('Rule widen given x as Float, produce Int:\n Return 1.\n\n' + TWICE +
69
+ 'Rule main given n as Int, produce Int:\n Return twice(widen, n).\n');
70
+ assert.deepEqual(mismatches(errors), []);
71
+ });
72
+ it('实参只类型化一次:实参内部的诊断不重复', () => {
73
+ const { errors } = check(INC + 'Rule main given n as Int, produce Int:\n Return inc(Verdict.nope()).\n');
74
+ assert.deepEqual(errors.map((d) => d.code), ['E101'], JSON.stringify(errors));
75
+ });
76
+ it('个数不符报 E032,前缀位置照常比较类型(与 Java 一致,按 min 个数比较)', () => {
77
+ const { errors } = check(INC + 'Rule main given n as Int, produce Int:\n Return inc("a", n).\n');
78
+ assert.deepEqual(errors.map((d) => d.code).sort(), ['E001', 'E032']);
79
+ });
80
+ });
81
+ describe('#268 非函数局部名与规则同名', () => {
82
+ const SCORE = 'Rule score given a as Int, produce Int:\n Return a.\n\n';
83
+ it('★Rule main given score as Int … Return score(1, 2).:报 E001(期望函数),不按同名规则校验', () => {
84
+ const { errors } = check(SCORE + 'Rule main given score as Int, produce Int:\n Return score(1, 2).\n');
85
+ assert.deepEqual(errors.map((d) => d.code), ['E001']);
86
+ assert.deepEqual(errors[0].data, { expected: 'a function', actual: "'score' of type Int" });
87
+ });
88
+ it('没有同名规则时调用非函数局部名同样报 E001', () => {
89
+ const { errors } = check('Rule main given n as Int, produce Int:\n Return n(1).\n');
90
+ assert.deepEqual(errors.map((d) => d.data), [{ expected: 'a function', actual: "'n' of type Int" }]);
91
+ });
92
+ it('★解释器按局部名分派:局部值不可调用时报错,不再静默调用同名规则', () => {
93
+ const { core } = check(SCORE + 'Rule main given score as Int, produce Int:\n Return score(1, 2).\n');
94
+ assert.ok(core, '应产出 Core IR');
95
+ const r = evaluate(core, 'main', { score: 7 });
96
+ assert.equal(r.success, false, `不应求值成功:${JSON.stringify(r)}`);
97
+ assert.match(r.error ?? '', /score/);
98
+ });
99
+ it('函数类型局部名遮蔽同名规则的既有行为不变', () => {
100
+ const { errors, core } = check(INC + 'Rule main given inc as (Int) -> Int, n as Int, produce Int:\n Return inc(n).\n\n' +
101
+ 'Rule dec given x as Int, produce Int:\n Return x minus 1.\n\n' +
102
+ 'Rule run given n as Int, produce Int:\n Return main(dec, n).\n');
103
+ assert.deepEqual(errors, []);
104
+ const r = evaluate(core, 'run', { n: 5 });
105
+ assert.equal(r.success, true, r.error);
106
+ assert.equal(r.value, 4);
107
+ });
108
+ });
109
+ /** 运行 main 并断言成功:放行的用例须是真能跑通的程序 */
110
+ function runsOk(core, input) {
111
+ assert.ok(core, '应产出 Core IR');
112
+ const r = evaluate(core, 'main', input);
113
+ assert.equal(r.success, true, r.error);
114
+ return r.value;
115
+ }
116
+ describe('#266 审查跟进:能正常运行的调用不新增 E001', () => {
117
+ it('M1 实参为推断失败的返回类型(produce:):inc(mk(n)) 放行', () => {
118
+ const { errors, core } = check(INC + 'Rule mk given x as Int, produce:\n Return x.\n\nRule main given n as Int, produce Int:\n Return inc(mk(n)).\n');
119
+ assert.deepEqual(mismatches(errors), []);
120
+ assert.equal(runsOk(core, { n: 1 }), 2);
121
+ });
122
+ it('M1 函数值的返回类型为推断占位:twice(inc2, n)(inc2 写 produce:)放行', () => {
123
+ const { errors, core } = check('Rule inc2 given x as Int, produce:\n Return x plus 1.\n\n' + TWICE + 'Rule main given n as Int, produce Int:\n Return twice(inc2, n).\n');
124
+ assert.deepEqual(mismatches(errors), []);
125
+ assert.equal(runsOk(core, { n: 1 }), 3);
126
+ });
127
+ it('M1 未写类型且 produce: 推断不出返回类型的规则作函数值:twice(bump, n) 放行', () => {
128
+ // `amount plus 1` 推断不出返回类型,签名 ret 为 TypeVar 'Unknown' 占位,函数值类型为 (Unknown) -> Unknown
129
+ const { errors, core } = check('Rule bump given amount, produce:\n Return amount plus 1.\n\n' + TWICE + 'Rule main given n as Int, produce Int:\n Return twice(bump, n).\n');
130
+ assert.deepEqual(mismatches(errors), []);
131
+ assert.equal(runsOk(core, { n: 1 }), 3);
132
+ });
133
+ it('M1 泛型规则 id of T 作函数值传给 (Int) -> Int 放行', () => {
134
+ const { errors, core } = check('Rule id of T given x as T, produce T:\n Return x.\n\n' + TWICE + 'Rule main given n as Int, produce Int:\n Return twice(id, n).\n');
135
+ assert.deepEqual(mismatches(errors), []);
136
+ assert.equal(runsOk(core, { n: 4 }), 4);
137
+ });
138
+ it('M2 T → T?、None → T?、T? ↔ Option of T、Some(n) → Option of Int 都放行', () => {
139
+ const OPT = 'Rule pick given x as Text?, produce Text:\n Return "k".\n\nRule pickO given x as Option of Text, produce Text:\n Return "o".\n\nRule pickI given x as Option of Int, produce Text:\n Return "i".\n\n';
140
+ for (const call of ['pick(t)', 'pick(None)', 'pickO(m)', 'pick(o)', 'pickI(Some(n))']) {
141
+ const { errors, core } = check(OPT + `Rule main given t as Text, m as Text?, o as Option of Text, n as Int, produce Text:\n Return ${call}.\n`);
142
+ assert.deepEqual(mismatches(errors), [], call);
143
+ runsOk(core, { t: 'a', m: 'b', o: 'c', n: 1 });
144
+ }
145
+ });
146
+ it('M2 内层类型不符仍报:Text? 形参传 Int', () => {
147
+ const { errors } = check('Rule pick given x as Text?, produce Text:\n Return "k".\n\nRule main given n as Int, produce Text:\n Return pick(n).\n');
148
+ assert.deepEqual(mismatches(errors), [{ expected: 'Text?', actual: 'Int' }]);
149
+ });
150
+ it('M3 实参类型只来自名字推断(given amount)时放行:inc(amount)', () => {
151
+ const { errors, core } = check(INC + 'Rule main given amount, produce Int:\n Return inc(amount).\n');
152
+ assert.deepEqual(mismatches(errors), []);
153
+ assert.equal(runsOk(core, { amount: 1 }), 2);
154
+ });
155
+ it('M3 调用未写类型的形参(given f … f(n))不报「期望函数」', () => {
156
+ const { errors, core } = check(INC + 'Rule ap given f, n as Int, produce Int:\n Return f(n).\n\nRule main given n as Int, produce Int:\n Return ap(inc, n).\n');
157
+ assert.deepEqual(errors, []);
158
+ assert.equal(runsOk(core, { n: 1 }), 2);
159
+ });
160
+ it('数值拓宽统一放行:Int → Long / Float、Long → Float,含字面量与容器元素', () => {
161
+ const DECLS = 'Rule toL given x as Long, produce Int:\n Return 1.\n\nRule toF given x as Float, produce Int:\n Return 1.\n\n' +
162
+ 'Rule toLF given xs as List of Float, produce Int:\n Return 1.\n\nRule toOF given x as Option of Float, produce Int:\n Return 1.\n\n';
163
+ for (const call of ['toL(n)', 'toL(5)', 'toF(5)', 'toF(l)', 'toLF(xs)', 'toLF([1, 2])', 'toOF(Some(n))']) {
164
+ const { errors } = check(DECLS + `Rule main given n as Int, l as Long, xs as List of Int, produce Int:\n Return ${call}.\n`);
165
+ assert.deepEqual(mismatches(errors), [], call);
166
+ }
167
+ });
168
+ // Decimal 形参目前被降级为类型变量(#276),任何实参都放行,断言没有意义;#276 修复后去掉 skip
169
+ it('数值拓宽:Int / Long 实参传给 Decimal 形参放行,Double 传 Decimal 报错(ADR 0025)', { skip: '#276 Decimal 形参被降级为类型变量' }, () => {
170
+ const DECLS = 'Rule toD given x as Decimal, produce Int:\n Return 1.\n\n';
171
+ for (const call of ['toD(n)', 'toD(l)', 'toD(5)']) {
172
+ const { errors } = check(DECLS + `Rule main given n as Int, l as Long, produce Int:\n Return ${call}.\n`);
173
+ assert.deepEqual(mismatches(errors), [], call);
174
+ }
175
+ const { errors } = check(DECLS + 'Rule main given x as Float, produce Int:\n Return toD(x).\n');
176
+ assert.equal(mismatches(errors).length, 1);
177
+ });
178
+ it('收窄仍报:Float 实参传给 Int 形参', () => {
179
+ const { errors } = check(INC + 'Rule main given x as Float, produce Int:\n Return inc(x).\n');
180
+ assert.deepEqual(mismatches(errors), [{ expected: 'Int', actual: 'Double' }]);
181
+ });
182
+ });
183
+ describe('core#231 审查跟进:TS 不比 Java 严', () => {
184
+ const codes = (errors) => errors.map((d) => d.code);
185
+ it('F2 字段构造(E012)复用实参兼容规则:T? ← T、T? ← None、Long ← Int、List of Float ← List of Int 放行', () => {
186
+ const DATA = 'Define Box has t as Text?, l as Long, fs as List of Float.\n\n';
187
+ for (const [t, l, fs] of [['s', 'n', 'xs'], ['None', '5', '[1, 2]']]) {
188
+ const { errors, core } = check(DATA + `Rule main given s as Text, n as Int, xs as List of Int, produce Int:\n Let b be Box with t set to ${t}, l set to ${l}, fs set to ${fs}.\n Return 1.\n`);
189
+ assert.deepEqual(codes(errors), [], `${t} ${l} ${fs}`);
190
+ runsOk(core, { s: 'a', n: 1, xs: [1] });
191
+ }
192
+ });
193
+ it('F2 字段构造:推断不出返回类型的实参(produce:)放行,不再报 expects Float, got Unknown', () => {
194
+ const { errors } = check('Define Q has cost as Float.\n\nRule est given x as Int, produce:\n Return x plus 1.\n\n' +
195
+ 'Rule main given n as Int, produce Int:\n Let q be Q with cost set to est(n).\n Return 1.\n');
196
+ assert.deepEqual(codes(errors), []);
197
+ });
198
+ it('F2 字段构造的收窄仍报 E012:Int 字段 ← Float', () => {
199
+ const { errors } = check('Define Box has i as Int.\n\nRule main given x as Float, produce Int:\n Let b be Box with i set to x.\n Return 1.\n');
200
+ assert.deepEqual(codes(errors), ['E012']);
201
+ });
202
+ it('F2 Set(E002)复用实参兼容规则:Float 变量 ← Int、Text? 变量 ← Text 放行', () => {
203
+ const { errors, core } = check('Rule main given n as Int, f as Float, m as Text?, t as Text, produce Int:\n Let x be f.\n Set x to n.\n Let y be m.\n Set y to t.\n Return 1.\n');
204
+ assert.deepEqual(codes(errors), []);
205
+ runsOk(core, { n: 1, f: 1.5, m: 'a', t: 'b' });
206
+ });
207
+ it('F2 Set 的收窄仍报 E002:Int 变量 ← Float', () => {
208
+ const { errors } = check('Rule main given n as Int, f as Float, produce Int:\n Let x be n.\n Set x to f.\n Return 1.\n');
209
+ assert.deepEqual(codes(errors), ['E002']);
210
+ });
211
+ it('按名字推断的标记随 Let 传播:given amount 后 Let y be amount. inc(y) 放行', () => {
212
+ const { errors, core } = check(INC + 'Rule main given amount, produce Int:\n Let y be amount.\n Return inc(y).\n');
213
+ assert.deepEqual(codes(errors), []);
214
+ assert.equal(runsOk(core, { amount: 1 }), 2);
215
+ });
216
+ it('F1 局部名与单段 builtin 同名、调用的正是 builtin:不报「期望函数」,解释器先调 builtin(与 truffle 一致)', () => {
217
+ const cases = [
218
+ ['Rule main given add as Int, produce Int:\n Return add(1, 2).\n', { add: 7 }, 3],
219
+ ['Rule main given n as Int, produce Int:\n Let sub be 3.\n Return sub(5, n).\n', { n: 2 }, 3],
220
+ ['Rule main given gt as Int, produce Bool:\n Return gt(2, 1).\n', { gt: 0 }, true],
221
+ ];
222
+ for (const [body, input, expected] of cases) {
223
+ const { errors, core } = check(body);
224
+ assert.deepEqual(codes(errors), [], body);
225
+ assert.equal(runsOk(core, input), expected, body);
226
+ }
227
+ });
228
+ it('F1 builtin 名一律不做调用目标检查(与 core CallTargetBuiltins 一致);有同名规则时运行期按局部值分派,与 truffle 一致失败', () => {
229
+ const { errors, core } = check('Rule add given a as Int, b as Int, produce Int:\n Return a.\n\nRule main given add as Int, produce Int:\n Return add(1, 2).\n');
230
+ assert.deepEqual(codes(errors), []);
231
+ const r = evaluate(core, 'main', { add: 7 });
232
+ assert.equal(r.success, false);
233
+ assert.match(r.error ?? '', /'add' is not a function/);
234
+ });
235
+ it('R1 局部函数值优先于同名 builtin:函数类型形参 gt、闭包 add、单参闭包 add 都调用局部值', () => {
236
+ const cases = [
237
+ [
238
+ 'Rule lessThan given a as Int, b as Int, produce Bool:\n Return a less than b.\n\n' +
239
+ 'Rule ap given gt as (Int, Int) -> Bool, produce Bool:\n Return gt(1, 2).\n\n' +
240
+ 'Rule main given n as Int, produce Bool:\n Return ap(lessThan).\n',
241
+ { n: 0 },
242
+ true,
243
+ ],
244
+ ['Rule main given n as Int, produce Int:\n Let add be function with a as Int, b as Int, produce Int:\n Return a times b.\n Return add(2, 3).\n', { n: 0 }, 6],
245
+ ['Rule main given n as Int, produce Int:\n Let add be function with a as Int, produce Int:\n Return a.\n Return add(n).\n', { n: 1 }, 1],
246
+ ];
247
+ for (const [body, input, expected] of cases) {
248
+ const { errors, core } = check(body);
249
+ assert.deepEqual(codes(errors), [], body);
250
+ assert.equal(runsOk(core, input), expected, body);
251
+ }
252
+ });
253
+ it('R1 与 builtin 同名的局部函数值按局部函数类型检查:add 闭包为 (Int) -> Int 时 add(1, 2) 报 E032', () => {
254
+ const { errors } = check('Rule main given n as Int, produce Int:\n Let add be function with a as Int, produce Int:\n Return a.\n Return add(1, 2).\n');
255
+ assert.deepEqual(codes(errors), ['E032']);
256
+ });
257
+ it('F1 交叉核对:单段 builtin 名单与 aster-lang-core CallTargetBuiltins.NAMES 一致(找不到 core 即失败)', () => {
258
+ // CI 的 test job 把 core 检出到工作区内 ./aster-lang-core;本地可用 ASTER_CORE_DIR 指定,或放在兄弟目录 ../aster-lang-core
259
+ const RELATIVE = 'src/main/java/aster/core/typecheck/CallTargetBuiltins.java';
260
+ const roots = [process.env['ASTER_CORE_DIR'], resolve(process.cwd(), 'aster-lang-core'), resolve(process.cwd(), '..', 'aster-lang-core')];
261
+ const file = roots.filter((r) => !!r).map((r) => join(r, RELATIVE)).find((f) => existsSync(f));
262
+ assert.ok(file, `找不到 aster-lang-core 的 ${RELATIVE}(CI 检出 ./aster-lang-core;本地用 ASTER_CORE_DIR 指定)`);
263
+ const block = /Set\.of\(([^)]*)\)/.exec(readFileSync(file, 'utf8'));
264
+ assert.ok(block, 'CallTargetBuiltins.NAMES 的 Set.of(...) 未找到');
265
+ const names = [...block[1].matchAll(/"([^"]+)"/g)].map((m) => m[1]);
266
+ assert.deepEqual([...new Set(names)].sort(), Object.keys(NAMED_BUILTIN_OPS).sort());
267
+ });
268
+ });
269
+ //# sourceMappingURL=rule-call-checks.test.js.map