@aster-cloud/aster-lang-ts 0.0.16 → 0.0.18
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/dist/scripts/aster.js +0 -0
- package/dist/scripts/emit-core.js +0 -0
- package/dist/scripts/golden.js +0 -5
- package/dist/scripts/golden.js.map +1 -1
- package/dist/src/cli/policy-converter.js +0 -0
- package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/examples/canonicalizer-integration.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/registry.d.ts +1 -1
- package/dist/src/config/lexicons/identifiers/registry.d.ts.map +1 -1
- package/dist/src/config/lexicons/identifiers/registry.js.map +1 -1
- package/dist/src/config/lexicons/identifiers/types.js.map +1 -1
- package/dist/src/config/lexicons/types.d.ts +23 -0
- package/dist/src/config/lexicons/types.d.ts.map +1 -1
- package/dist/src/config/lexicons/types.js.map +1 -1
- package/dist/src/config/lexicons/zh-CN.d.ts +1 -1
- package/dist/src/config/lexicons/zh-CN.d.ts.map +1 -1
- package/dist/src/config/lexicons/zh-CN.js +16 -5
- package/dist/src/config/lexicons/zh-CN.js.map +1 -1
- package/dist/src/frontend/keyword-translator.d.ts +2 -10
- package/dist/src/frontend/keyword-translator.d.ts.map +1 -1
- package/dist/src/frontend/keyword-translator.js.map +1 -1
- package/dist/src/lsp/server.js +0 -0
- package/dist/src/parser/context.d.ts +8 -0
- package/dist/src/parser/context.d.ts.map +1 -1
- package/dist/src/parser/context.js +11 -0
- package/dist/src/parser/context.js.map +1 -1
- package/dist/src/parser/expr-stmt-parser.d.ts.map +1 -1
- package/dist/src/parser/expr-stmt-parser.js +28 -18
- package/dist/src/parser/expr-stmt-parser.js.map +1 -1
- package/dist/src/typecheck/utils.d.ts.map +1 -1
- package/dist/src/typecheck/utils.js +0 -3
- package/dist/src/typecheck/utils.js.map +1 -1
- package/dist/test/type-checker/cross-module-packages.test.js +4 -2
- package/dist/test/type-checker/cross-module-packages.test.js.map +1 -1
- package/dist/test/unit/config/lexicons/i18n.test.js +2 -2
- package/dist/test/unit/config/lexicons/i18n.test.js.map +1 -1
- package/dist/test/unit/config/lexicons/zh-CN.test.js +69 -36
- package/dist/test/unit/config/lexicons/zh-CN.test.js.map +1 -1
- package/dist/test/unit/keyword-translator.test.js +15 -10
- package/dist/test/unit/keyword-translator.test.js.map +1 -1
- package/dist/test/unit/parser/compound-context.test.d.ts +7 -0
- package/dist/test/unit/parser/compound-context.test.d.ts.map +1 -0
- package/dist/test/unit/parser/compound-context.test.js +85 -0
- package/dist/test/unit/parser/compound-context.test.js.map +1 -0
- package/package.json +36 -38
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module tests/unit/parser/compound-context.test
|
|
3
|
+
*
|
|
4
|
+
* Parser 复合上下文测试 - 验证复合关键词模式的上下文跟踪。
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it } from 'node:test';
|
|
7
|
+
import assert from 'node:assert';
|
|
8
|
+
import { createParserContext } from '../../../src/parser/context.js';
|
|
9
|
+
import { TokenKind } from '../../../src/frontend/tokens.js';
|
|
10
|
+
import { KW } from '../../../src/frontend/tokens.js';
|
|
11
|
+
/**
|
|
12
|
+
* 创建模拟 token 数组用于测试
|
|
13
|
+
*/
|
|
14
|
+
function createMockTokens() {
|
|
15
|
+
const pos = { line: 1, col: 1 };
|
|
16
|
+
return [
|
|
17
|
+
{ kind: TokenKind.EOF, start: pos, end: pos, value: null },
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
describe('Parser Compound Context', () => {
|
|
21
|
+
it('应正确跟踪复合模式上下文', () => {
|
|
22
|
+
const ctx = createParserContext(createMockTokens());
|
|
23
|
+
// 初始状态:不在任何复合上下文中
|
|
24
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), false);
|
|
25
|
+
// 进入 match 上下文
|
|
26
|
+
ctx.pushCompoundContext(KW.MATCH);
|
|
27
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), true);
|
|
28
|
+
// 退出 match 上下文
|
|
29
|
+
ctx.popCompoundContext();
|
|
30
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), false);
|
|
31
|
+
});
|
|
32
|
+
it('应支持嵌套上下文', () => {
|
|
33
|
+
const ctx = createParserContext(createMockTokens());
|
|
34
|
+
// 进入 match 上下文
|
|
35
|
+
ctx.pushCompoundContext(KW.MATCH);
|
|
36
|
+
// 进入 if 上下文(嵌套)
|
|
37
|
+
ctx.pushCompoundContext(KW.IF);
|
|
38
|
+
// 两个上下文都应处于活动状态
|
|
39
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), true);
|
|
40
|
+
assert.strictEqual(ctx.inCompoundContext(KW.IF), true);
|
|
41
|
+
// 退出 if 上下文
|
|
42
|
+
ctx.popCompoundContext();
|
|
43
|
+
assert.strictEqual(ctx.inCompoundContext(KW.IF), false);
|
|
44
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), true);
|
|
45
|
+
// 退出 match 上下文
|
|
46
|
+
ctx.popCompoundContext();
|
|
47
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), false);
|
|
48
|
+
});
|
|
49
|
+
it('应正确处理空栈弹出', () => {
|
|
50
|
+
const ctx = createParserContext(createMockTokens());
|
|
51
|
+
// 空栈弹出不应抛出异常
|
|
52
|
+
ctx.popCompoundContext();
|
|
53
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), false);
|
|
54
|
+
});
|
|
55
|
+
it('compoundContextStack 应可直接访问', () => {
|
|
56
|
+
const ctx = createParserContext(createMockTokens());
|
|
57
|
+
// 验证初始状态
|
|
58
|
+
assert.strictEqual(ctx.compoundContextStack.length, 0);
|
|
59
|
+
// 添加上下文
|
|
60
|
+
ctx.pushCompoundContext(KW.MATCH);
|
|
61
|
+
assert.strictEqual(ctx.compoundContextStack.length, 1);
|
|
62
|
+
assert.strictEqual(ctx.compoundContextStack[0], KW.MATCH);
|
|
63
|
+
// 嵌套上下文
|
|
64
|
+
ctx.pushCompoundContext(KW.IF);
|
|
65
|
+
assert.strictEqual(ctx.compoundContextStack.length, 2);
|
|
66
|
+
assert.strictEqual(ctx.compoundContextStack[1], KW.IF);
|
|
67
|
+
});
|
|
68
|
+
it('应在多次进入同一上下文时正确跟踪', () => {
|
|
69
|
+
const ctx = createParserContext(createMockTokens());
|
|
70
|
+
// 进入 match 上下文两次
|
|
71
|
+
ctx.pushCompoundContext(KW.MATCH);
|
|
72
|
+
ctx.pushCompoundContext(KW.MATCH);
|
|
73
|
+
assert.strictEqual(ctx.compoundContextStack.length, 2);
|
|
74
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), true);
|
|
75
|
+
// 退出一次
|
|
76
|
+
ctx.popCompoundContext();
|
|
77
|
+
assert.strictEqual(ctx.compoundContextStack.length, 1);
|
|
78
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), true);
|
|
79
|
+
// 再退出一次
|
|
80
|
+
ctx.popCompoundContext();
|
|
81
|
+
assert.strictEqual(ctx.compoundContextStack.length, 0);
|
|
82
|
+
assert.strictEqual(ctx.inCompoundContext(KW.MATCH), false);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=compound-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compound-context.test.js","sourceRoot":"","sources":["../../../../test/unit/parser/compound-context.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aster-cloud/aster-lang-ts",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
4
4
|
"description": "Aster CNL (Controlled Natural Language) TypeScript Compiler - Lexer, Parser, AST, Core IR, Type Checker",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -77,40 +77,6 @@
|
|
|
77
77
|
"aster-lsp": "./dist/src/lsp/server.js",
|
|
78
78
|
"aster-convert": "./dist/src/cli/policy-converter.js"
|
|
79
79
|
},
|
|
80
|
-
"scripts": {
|
|
81
|
-
"build": "tsc && node dist/scripts/build-peg.js",
|
|
82
|
-
"build:browser": "pnpm run build && node scripts/build-browser.js",
|
|
83
|
-
"build:watch": "tsc --watch",
|
|
84
|
-
"clean": "rm -rf dist",
|
|
85
|
-
"dev": "pnpm run build:watch",
|
|
86
|
-
"test": "pnpm run build && pnpm run test:unit:run && pnpm run test:integration:run",
|
|
87
|
-
"test:unit": "pnpm run build && pnpm run test:unit:run",
|
|
88
|
-
"test:unit:run": "node --test 'dist/test/unit/**/*.test.js' 'dist/test/type-checker/**/*.test.js'",
|
|
89
|
-
"test:unit:coverage": "pnpm run build && c8 node --test 'dist/test/unit/**/*.test.js' 'dist/test/type-checker/**/*.test.js'",
|
|
90
|
-
"test:integration": "pnpm run build && pnpm run test:integration:run",
|
|
91
|
-
"test:integration:run": "node --test 'dist/test/integration/**/*.test.js'",
|
|
92
|
-
"test:golden": "pnpm run build && pnpm run test:golden:run",
|
|
93
|
-
"test:golden:run": "node dist/scripts/golden.js",
|
|
94
|
-
"test:property": "pnpm run build && pnpm run test:property:run",
|
|
95
|
-
"test:property:run": "node --test 'dist/test/property/**/*.test.js'",
|
|
96
|
-
"test:fuzz": "pnpm run build && pnpm run test:fuzz:run",
|
|
97
|
-
"test:fuzz:run": "node --test 'dist/test/fuzz/**/*.test.js'",
|
|
98
|
-
"test:lsp": "pnpm run build && pnpm run test:lsp:run",
|
|
99
|
-
"test:lsp:run": "node dist/test/property/lsp-props.test.js",
|
|
100
|
-
"test:converter": "pnpm run build && pnpm run test:converter:run",
|
|
101
|
-
"test:converter:run": "node --test 'dist/test/policy-converter/**/*.test.js'",
|
|
102
|
-
"coverage:report": "c8 report --reporter=html --reporter=text",
|
|
103
|
-
"coverage:check": "c8 check-coverage --lines 75 --functions 75 --branches 70",
|
|
104
|
-
"lint": "eslint src scripts --ext .ts",
|
|
105
|
-
"lint:fix": "eslint src scripts --ext .ts --fix",
|
|
106
|
-
"format": "prettier --write src scripts",
|
|
107
|
-
"format:check": "prettier --check src scripts",
|
|
108
|
-
"typecheck": "tsc --noEmit",
|
|
109
|
-
"lsp": "node dist/src/lsp/server.js --stdio",
|
|
110
|
-
"repl": "node dist/scripts/repl.js",
|
|
111
|
-
"docs:api": "typedoc --options typedoc.json",
|
|
112
|
-
"prepublishOnly": "pnpm run clean && pnpm run build && pnpm run test"
|
|
113
|
-
},
|
|
114
80
|
"keywords": [
|
|
115
81
|
"programming-language",
|
|
116
82
|
"compiler",
|
|
@@ -134,7 +100,7 @@
|
|
|
134
100
|
},
|
|
135
101
|
"homepage": "https://aster-lang.cloud",
|
|
136
102
|
"engines": {
|
|
137
|
-
"node": ">=
|
|
103
|
+
"node": ">=24.0.0"
|
|
138
104
|
},
|
|
139
105
|
"dependencies": {
|
|
140
106
|
"@anthropic-ai/sdk": "^0.71.0",
|
|
@@ -177,5 +143,37 @@
|
|
|
177
143
|
"publishConfig": {
|
|
178
144
|
"access": "public"
|
|
179
145
|
},
|
|
180
|
-
"
|
|
181
|
-
|
|
146
|
+
"scripts": {
|
|
147
|
+
"build": "tsc && node dist/scripts/build-peg.js",
|
|
148
|
+
"build:browser": "pnpm run build && node scripts/build-browser.js",
|
|
149
|
+
"build:watch": "tsc --watch",
|
|
150
|
+
"clean": "rm -rf dist",
|
|
151
|
+
"dev": "pnpm run build:watch",
|
|
152
|
+
"test": "pnpm run build && pnpm run test:unit:run && pnpm run test:integration:run",
|
|
153
|
+
"test:unit": "pnpm run build && pnpm run test:unit:run",
|
|
154
|
+
"test:unit:run": "node --test 'dist/test/unit/**/*.test.js' 'dist/test/type-checker/**/*.test.js'",
|
|
155
|
+
"test:unit:coverage": "pnpm run build && c8 node --test 'dist/test/unit/**/*.test.js' 'dist/test/type-checker/**/*.test.js'",
|
|
156
|
+
"test:integration": "pnpm run build && pnpm run test:integration:run",
|
|
157
|
+
"test:integration:run": "node --test 'dist/test/integration/**/*.test.js'",
|
|
158
|
+
"test:golden": "pnpm run build && pnpm run test:golden:run",
|
|
159
|
+
"test:golden:run": "node dist/scripts/golden.js",
|
|
160
|
+
"test:property": "pnpm run build && pnpm run test:property:run",
|
|
161
|
+
"test:property:run": "node --test 'dist/test/property/**/*.test.js'",
|
|
162
|
+
"test:fuzz": "pnpm run build && pnpm run test:fuzz:run",
|
|
163
|
+
"test:fuzz:run": "node --test 'dist/test/fuzz/**/*.test.js'",
|
|
164
|
+
"test:lsp": "pnpm run build && pnpm run test:lsp:run",
|
|
165
|
+
"test:lsp:run": "node dist/test/property/lsp-props.test.js",
|
|
166
|
+
"test:converter": "pnpm run build && pnpm run test:converter:run",
|
|
167
|
+
"test:converter:run": "node --test 'dist/test/policy-converter/**/*.test.js'",
|
|
168
|
+
"coverage:report": "c8 report --reporter=html --reporter=text",
|
|
169
|
+
"coverage:check": "c8 check-coverage --lines 75 --functions 75 --branches 70",
|
|
170
|
+
"lint": "eslint src scripts --ext .ts",
|
|
171
|
+
"lint:fix": "eslint src scripts --ext .ts --fix",
|
|
172
|
+
"format": "prettier --write src scripts",
|
|
173
|
+
"format:check": "prettier --check src scripts",
|
|
174
|
+
"typecheck": "tsc --noEmit",
|
|
175
|
+
"lsp": "node dist/src/lsp/server.js --stdio",
|
|
176
|
+
"repl": "node dist/scripts/repl.js",
|
|
177
|
+
"docs:api": "typedoc --options typedoc.json"
|
|
178
|
+
}
|
|
179
|
+
}
|