meaoiu 0.1.0
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/LANGUAGE_GUIDE.md +511 -0
- package/LICENSE +21 -0
- package/README.md +336 -0
- package/dist/api/execution.d.ts +9 -0
- package/dist/api/execution.d.ts.map +1 -0
- package/dist/api/execution.js +17 -0
- package/dist/api/execution.js.map +1 -0
- package/dist/api/serviceState.d.ts +24 -0
- package/dist/api/serviceState.d.ts.map +1 -0
- package/dist/api/serviceState.js +53 -0
- package/dist/api/serviceState.js.map +1 -0
- package/dist/api/services/completions.d.ts +15 -0
- package/dist/api/services/completions.d.ts.map +1 -0
- package/dist/api/services/completions.js +48 -0
- package/dist/api/services/completions.js.map +1 -0
- package/dist/api/services/diagnostics.d.ts +9 -0
- package/dist/api/services/diagnostics.d.ts.map +1 -0
- package/dist/api/services/diagnostics.js +5 -0
- package/dist/api/services/diagnostics.js.map +1 -0
- package/dist/api/services/formatting.d.ts +2 -0
- package/dist/api/services/formatting.d.ts.map +1 -0
- package/dist/api/services/formatting.js +223 -0
- package/dist/api/services/formatting.js.map +1 -0
- package/dist/api/services/highlight.d.ts +14 -0
- package/dist/api/services/highlight.d.ts.map +1 -0
- package/dist/api/services/highlight.js +58 -0
- package/dist/api/services/highlight.js.map +1 -0
- package/dist/api/services/inlayHints.d.ts +22 -0
- package/dist/api/services/inlayHints.d.ts.map +1 -0
- package/dist/api/services/inlayHints.js +100 -0
- package/dist/api/services/inlayHints.js.map +1 -0
- package/dist/api/services/search.d.ts +17 -0
- package/dist/api/services/search.d.ts.map +1 -0
- package/dist/api/services/search.js +35 -0
- package/dist/api/services/search.js.map +1 -0
- package/dist/api/utils/astUtils.d.ts +11 -0
- package/dist/api/utils/astUtils.d.ts.map +1 -0
- package/dist/api/utils/astUtils.js +106 -0
- package/dist/api/utils/astUtils.js.map +1 -0
- package/dist/api/utils/lspUtils.d.ts +16 -0
- package/dist/api/utils/lspUtils.d.ts.map +1 -0
- package/dist/api/utils/lspUtils.js +5 -0
- package/dist/api/utils/lspUtils.js.map +1 -0
- package/dist/api/utils/symbolAnalyzer.d.ts +37 -0
- package/dist/api/utils/symbolAnalyzer.d.ts.map +1 -0
- package/dist/api/utils/symbolAnalyzer.js +440 -0
- package/dist/api/utils/symbolAnalyzer.js.map +1 -0
- package/dist/api/utils/symbolTable.d.ts +28 -0
- package/dist/api/utils/symbolTable.d.ts.map +1 -0
- package/dist/api/utils/symbolTable.js +3 -0
- package/dist/api/utils/symbolTable.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +92 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/tools/completer.d.ts +2 -0
- package/dist/cli/tools/completer.d.ts.map +1 -0
- package/dist/cli/tools/completer.js +24 -0
- package/dist/cli/tools/completer.js.map +1 -0
- package/dist/cli/tools/diagnoser.d.ts +2 -0
- package/dist/cli/tools/diagnoser.d.ts.map +1 -0
- package/dist/cli/tools/diagnoser.js +29 -0
- package/dist/cli/tools/diagnoser.js.map +1 -0
- package/dist/cli/tools/formatter.d.ts +2 -0
- package/dist/cli/tools/formatter.d.ts.map +1 -0
- package/dist/cli/tools/formatter.js +27 -0
- package/dist/cli/tools/formatter.js.map +1 -0
- package/dist/cli/tools/searcher.d.ts +4 -0
- package/dist/cli/tools/searcher.d.ts.map +1 -0
- package/dist/cli/tools/searcher.js +30 -0
- package/dist/cli/tools/searcher.js.map +1 -0
- package/dist/cli/tools/starter.d.ts +3 -0
- package/dist/cli/tools/starter.d.ts.map +1 -0
- package/dist/cli/tools/starter.js +23 -0
- package/dist/cli/tools/starter.js.map +1 -0
- package/dist/cli/tools/toolUtils.d.ts +8 -0
- package/dist/cli/tools/toolUtils.d.ts.map +1 -0
- package/dist/cli/tools/toolUtils.js +52 -0
- package/dist/cli/tools/toolUtils.js.map +1 -0
- package/dist/core/ast.d.ts +140 -0
- package/dist/core/ast.d.ts.map +1 -0
- package/dist/core/ast.js +3 -0
- package/dist/core/ast.js.map +1 -0
- package/dist/core/builtIns.d.ts +15 -0
- package/dist/core/builtIns.d.ts.map +1 -0
- package/dist/core/builtIns.js +175 -0
- package/dist/core/builtIns.js.map +1 -0
- package/dist/core/error.d.ts +41 -0
- package/dist/core/error.d.ts.map +1 -0
- package/dist/core/error.js +63 -0
- package/dist/core/error.js.map +1 -0
- package/dist/core/parser.d.ts +89 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +578 -0
- package/dist/core/parser.js.map +1 -0
- package/dist/core/preprocessor.d.ts +2 -0
- package/dist/core/preprocessor.d.ts.map +1 -0
- package/dist/core/preprocessor.js +187 -0
- package/dist/core/preprocessor.js.map +1 -0
- package/dist/core/run/environment.d.ts +43 -0
- package/dist/core/run/environment.d.ts.map +1 -0
- package/dist/core/run/environment.js +192 -0
- package/dist/core/run/environment.js.map +1 -0
- package/dist/core/run/interpreter.d.ts +13 -0
- package/dist/core/run/interpreter.d.ts.map +1 -0
- package/dist/core/run/interpreter.js +415 -0
- package/dist/core/run/interpreter.js.map +1 -0
- package/dist/core/run/io.d.ts +18 -0
- package/dist/core/run/io.d.ts.map +1 -0
- package/dist/core/run/io.js +34 -0
- package/dist/core/run/io.js.map +1 -0
- package/dist/core/run/logger.d.ts +12 -0
- package/dist/core/run/logger.d.ts.map +1 -0
- package/dist/core/run/logger.js +17 -0
- package/dist/core/run/logger.js.map +1 -0
- package/dist/core/run/value.d.ts +41 -0
- package/dist/core/run/value.d.ts.map +1 -0
- package/dist/core/run/value.js +37 -0
- package/dist/core/run/value.js.map +1 -0
- package/dist/core/tokenizer.d.ts +82 -0
- package/dist/core/tokenizer.d.ts.map +1 -0
- package/dist/core/tokenizer.js +277 -0
- package/dist/core/tokenizer.js.map +1 -0
- package/dist/core/typedef.d.ts +32 -0
- package/dist/core/typedef.d.ts.map +1 -0
- package/dist/core/typedef.js +67 -0
- package/dist/core/typedef.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/package.json +60 -0
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// src/cli/main.ts - Meaoiu CLI
|
|
3
|
+
const version = '0.1.0';
|
|
4
|
+
import { cac } from 'cac';
|
|
5
|
+
import { readFile } from 'node:fs/promises';
|
|
6
|
+
import { MeaoiuError } from '../index.js';
|
|
7
|
+
import { complete } from './tools/completer.js';
|
|
8
|
+
import { diagnose } from './tools/diagnoser.js';
|
|
9
|
+
import { format } from './tools/formatter.js';
|
|
10
|
+
import { definition, hover, references } from './tools/searcher.js';
|
|
11
|
+
import { run } from './tools/starter.js';
|
|
12
|
+
import { prompt } from './tools/toolUtils.js';
|
|
13
|
+
const cli = cac('meaoiu').version(version);
|
|
14
|
+
cli.help(sections => {
|
|
15
|
+
sections.splice(1, 0, {
|
|
16
|
+
title: 'Description',
|
|
17
|
+
body: ' 喵谕Meaoiu 语言工具集 — 运行、诊断、格式化、查定义/引用、补全',
|
|
18
|
+
});
|
|
19
|
+
const infoIndex = sections.findIndex(section => section.title?.includes('For more info'));
|
|
20
|
+
if (infoIndex !== -1)
|
|
21
|
+
sections.splice(infoIndex, 1);
|
|
22
|
+
})
|
|
23
|
+
.usage('<file> [options]')
|
|
24
|
+
.command('<file>', 'Meaoiu 源文件 (.miu)')
|
|
25
|
+
.option(`--${"diagnose" /* Option.DIAGNOSE */}`, '执行诊断(静态分析/错误提示)')
|
|
26
|
+
.option(`--${"format" /* Option.FORMAT */}`, '格式化代码')
|
|
27
|
+
.option(`--${"definition" /* Option.DEFINITION */} <line:col>`, "查找定义,格式 '行:列',例如 '2:3'")
|
|
28
|
+
.option(`--${"references" /* Option.REFERENCES */} <line:col>`, "查找引用,格式 '行:列'")
|
|
29
|
+
.option(`--${"hover" /* Option.HOVER */} <line:col>`, "悬停信息,格式 '行:列'")
|
|
30
|
+
.option(`--${"complete" /* Option.COMPLETE */} <line:col>`, "获取自动补全,格式 '行:列'")
|
|
31
|
+
.option(`--${"debug" /* Option.DEBUG */}`, '运行 Meaoiu 脚本并输出调试日志')
|
|
32
|
+
.action(async (file, options) => {
|
|
33
|
+
try {
|
|
34
|
+
const sourceCode = await readFile(file, 'utf-8');
|
|
35
|
+
// 优先命令式选项(诊断 / LSP 式功能)
|
|
36
|
+
const lspActions = {
|
|
37
|
+
["diagnose" /* Option.DIAGNOSE */]: () => diagnose(sourceCode, file),
|
|
38
|
+
["format" /* Option.FORMAT */]: () => void format(sourceCode, file),
|
|
39
|
+
["definition" /* Option.DEFINITION */]: pos => definition(sourceCode, file, pos),
|
|
40
|
+
["references" /* Option.REFERENCES */]: pos => references(sourceCode, file, pos),
|
|
41
|
+
["hover" /* Option.HOVER */]: pos => hover(sourceCode, pos),
|
|
42
|
+
["complete" /* Option.COMPLETE */]: pos => complete(sourceCode, pos),
|
|
43
|
+
["debug" /* Option.DEBUG */]: () => (debug = true) /* true 则继续执行 */,
|
|
44
|
+
};
|
|
45
|
+
let debug = false;
|
|
46
|
+
// 找出第一个被设置的选项(优先级顺序按 keys 顺序)
|
|
47
|
+
for (const [key, action] of Object.entries(lspActions)) {
|
|
48
|
+
const value = options[key];
|
|
49
|
+
if (value && !action(value))
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// 默认行为:运行脚本(交互 I/O)
|
|
53
|
+
const ioConfig = {
|
|
54
|
+
onPrint: console.log,
|
|
55
|
+
onPrompt: prompt,
|
|
56
|
+
styleize: true,
|
|
57
|
+
};
|
|
58
|
+
await run(sourceCode, ioConfig, file, debug);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
if (err instanceof MeaoiuError)
|
|
62
|
+
console.error(err.message);
|
|
63
|
+
else if (err instanceof Error && 'code' in err && err.code === 'ENOENT') {
|
|
64
|
+
console.error(`坏了喵!文件 ${file} 不见了喵!`);
|
|
65
|
+
}
|
|
66
|
+
else
|
|
67
|
+
console.error(`坏了喵!读取文件 ${file} 失败: `, err);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
try {
|
|
72
|
+
cli.parse();
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
if (err instanceof Error && err.name === 'CACError') {
|
|
76
|
+
if (err.message.includes('missing required args')) {
|
|
77
|
+
console.error('不好喵!忘记说文件在哪了喵!\n');
|
|
78
|
+
cli.outputHelp();
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
else if (err.message.includes('value is missing'))
|
|
82
|
+
console.error('不好喵!不能没有坐标喵!');
|
|
83
|
+
else if (err.message.includes('Unknown option'))
|
|
84
|
+
console.error('不好喵!有不认识的选项喵!');
|
|
85
|
+
else
|
|
86
|
+
console.error(`坏了喵!${err.message}`);
|
|
87
|
+
console.error('\n可以用 meaoiu --help 偷看攻略喵。');
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completer.d.ts","sourceRoot":"","sources":["../../../src/cli/tools/completer.ts"],"names":[],"mappings":"AAKA,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA0BjE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/cli/tools/completer.ts
|
|
2
|
+
import { getCompletions, ServiceState } from '../../index.js';
|
|
3
|
+
import { parsePosition } from './toolUtils.js';
|
|
4
|
+
export function complete(sourceCode, posRaw) {
|
|
5
|
+
const pos = parsePosition(posRaw);
|
|
6
|
+
const kindMap = {
|
|
7
|
+
[3 /* SuggestionKind.FUNCTION */]: 'function',
|
|
8
|
+
[6 /* SuggestionKind.VARIABLE */]: 'variable',
|
|
9
|
+
[14 /* SuggestionKind.KEYWORD */]: 'keyword',
|
|
10
|
+
[18 /* SuggestionKind.REFERENCE */]: 'parameter',
|
|
11
|
+
};
|
|
12
|
+
const completions = getCompletions(new ServiceState(0, sourceCode), pos);
|
|
13
|
+
const suggestions = completions.reduce((acc, { label, kind }) => {
|
|
14
|
+
const k = kindMap[kind] ?? 'variable';
|
|
15
|
+
acc[k].push(label);
|
|
16
|
+
return acc;
|
|
17
|
+
}, { variable: [], function: [], parameter: [], keyword: [] });
|
|
18
|
+
console.log(`[自动补全] 在位置 ${pos.line}:${pos.col} 的建议:`);
|
|
19
|
+
suggestions.keyword.length && console.log('- 关键字>', suggestions.keyword.join(', '));
|
|
20
|
+
suggestions.parameter.length && console.log('- 参数>', suggestions.parameter.join(', '));
|
|
21
|
+
suggestions.function.length && console.log('- 函数>', suggestions.function.join(', '));
|
|
22
|
+
suggestions.variable.length && console.log('- 变量>', suggestions.variable.join(', '));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=completer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completer.js","sourceRoot":"","sources":["../../../src/cli/tools/completer.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,UAAU,QAAQ,CAAC,UAAkB,EAAE,MAAc;IAC1D,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAGlC,MAAM,OAAO,GAAuC;QACnD,iCAAyB,EAAE,UAAU;QACrC,iCAAyB,EAAE,UAAU;QACrC,iCAAwB,EAAE,SAAS;QACnC,mCAA0B,EAAE,WAAW;KACvC,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CACrC,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;QACxB,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC;QACtC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,GAAG,CAAC;IACZ,CAAC,EACD,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAC1D,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IACtD,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,WAAW,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrF,WAAW,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnoser.d.ts","sourceRoot":"","sources":["../../../src/cli/tools/diagnoser.ts"],"names":[],"mappings":"AAKA,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAuBnE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/cli/tools/diagnoser.ts
|
|
2
|
+
import { getDiagnostics, ServiceState } from '../../index.js';
|
|
3
|
+
import { formatError } from './toolUtils.js';
|
|
4
|
+
export function diagnose(sourceCode, filePath) {
|
|
5
|
+
console.log('-----------------------------');
|
|
6
|
+
console.log(`[诊断器] 正在分析 ${filePath} ...`);
|
|
7
|
+
console.log('-----------------------------');
|
|
8
|
+
try {
|
|
9
|
+
const { syntaxErrors, semanticErrors } = getDiagnostics(new ServiceState(0, sourceCode));
|
|
10
|
+
const noErrorTypes = [
|
|
11
|
+
{ type: '语法', errors: syntaxErrors },
|
|
12
|
+
{ type: '语义', errors: semanticErrors },
|
|
13
|
+
].reduce((acc, { type, errors }) => {
|
|
14
|
+
if (!errors.length)
|
|
15
|
+
return [...acc, type];
|
|
16
|
+
console.log(`[诊断器] ❌ 发现了 ${errors.length} 个${type}问题:`);
|
|
17
|
+
for (const e of errors)
|
|
18
|
+
console.error(`- ${e}`);
|
|
19
|
+
return acc;
|
|
20
|
+
}, []);
|
|
21
|
+
noErrorTypes.length && console.log(`[诊断器] ✅ 未发现任何${noErrorTypes.join('或')}错误。`);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
console.error('\n-----------------------------');
|
|
25
|
+
console.error(formatError(err, sourceCode, filePath));
|
|
26
|
+
}
|
|
27
|
+
console.log('-----------------------------');
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=diagnoser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnoser.js","sourceRoot":"","sources":["../../../src/cli/tools/diagnoser.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,UAAU,QAAQ,CAAC,UAAkB,EAAE,QAAgB;IAC5D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,MAAM,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,IAAI,CAAC;QACJ,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,cAAc,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAEzF,MAAM,YAAY,GAAG;YACpB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE;YACpC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE;SACtC,CAAC,MAAM,CAAW,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC;YACxD,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChD,OAAO,GAAG,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/cli/tools/formatter.ts"],"names":[],"mappings":"AAMA,wBAAsB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/cli/tools/formatter.ts
|
|
2
|
+
import { writeFile } from 'node:fs/promises';
|
|
3
|
+
import { getFormattedCode } from '../../index.js';
|
|
4
|
+
import { formatError, prompt } from './toolUtils.js';
|
|
5
|
+
export async function format(sourceCode, filePath) {
|
|
6
|
+
console.log('-----------------------------');
|
|
7
|
+
console.log(`[格式化器] 尝试格式化 ${filePath} ...`);
|
|
8
|
+
console.log('-----------------------------');
|
|
9
|
+
try {
|
|
10
|
+
const formattedCode = getFormattedCode(sourceCode);
|
|
11
|
+
console.log(formattedCode);
|
|
12
|
+
console.log('-----------------------------');
|
|
13
|
+
// 询问是否格式化
|
|
14
|
+
const confirm = await prompt(`[格式化器] ⚠ 是否应用到 ${filePath}? (y/n)`);
|
|
15
|
+
if (confirm.toLowerCase() !== 'y')
|
|
16
|
+
return console.log(`[格式化器] ✖ 操作已取消`);
|
|
17
|
+
// 格式化并写入文件
|
|
18
|
+
await writeFile(filePath, formattedCode, 'utf-8');
|
|
19
|
+
console.log(`[格式化器] ✔ 已写入文件`);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
console.error('\n-----------------------------');
|
|
23
|
+
console.error(formatError(err, sourceCode, filePath));
|
|
24
|
+
}
|
|
25
|
+
console.log('-----------------------------');
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/cli/tools/formatter.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAkB,EAAE,QAAgB;IAChE,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,MAAM,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,UAAU;QACV,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,kBAAkB,QAAQ,SAAS,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACxE,WAAW;QACX,MAAM,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function definition(sourceCode: string, filePath: string, posRaw: string): void;
|
|
2
|
+
export declare function references(sourceCode: string, filePath: string, posRaw: string): void;
|
|
3
|
+
export declare function hover(sourceCode: string, posRaw: string): void;
|
|
4
|
+
//# sourceMappingURL=searcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searcher.d.ts","sourceRoot":"","sources":["../../../src/cli/tools/searcher.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQrF;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAOrF;AAED,wBAAgB,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ9D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/cli/tools/searcher.ts
|
|
2
|
+
import { findDefinition, findReferences, getHoverInfo, ServiceState } from '../../index.js';
|
|
3
|
+
import { parsePosition } from './toolUtils.js';
|
|
4
|
+
export function definition(sourceCode, filePath, posRaw) {
|
|
5
|
+
const pos = parsePosition(posRaw);
|
|
6
|
+
const definitionInfo = findDefinition(new ServiceState(0, sourceCode), pos);
|
|
7
|
+
const defNode = definitionInfo?.declarations[0];
|
|
8
|
+
if (!defNode)
|
|
9
|
+
return console.log(`[定义查找] 找不到 '${posRaw}' 位置符号的定义。`);
|
|
10
|
+
console.log(`[定义查找] '${definitionInfo.name}' 在 ${filePath}:${defNode.line}:${defNode.col} 被定义。`);
|
|
11
|
+
}
|
|
12
|
+
export function references(sourceCode, filePath, posRaw) {
|
|
13
|
+
const pos = parsePosition(posRaw);
|
|
14
|
+
const references = findReferences(new ServiceState(0, sourceCode), pos);
|
|
15
|
+
if (!references.length)
|
|
16
|
+
return console.log(`[引用查找] 找不到 '${posRaw}' 位置符号的引用。`);
|
|
17
|
+
console.log(`[引用查找] 在 ${filePath} 中找到了 ${references.length} 处引用:`);
|
|
18
|
+
for (const { line, col } of references)
|
|
19
|
+
console.log(`- L${line}:${col}`);
|
|
20
|
+
}
|
|
21
|
+
export function hover(sourceCode, posRaw) {
|
|
22
|
+
const pos = parsePosition(posRaw);
|
|
23
|
+
const hoverInfo = getHoverInfo(new ServiceState(0, sourceCode), pos);
|
|
24
|
+
if (!hoverInfo)
|
|
25
|
+
return console.log(`[悬停] 在 '${posRaw}' 位置找不到可显示的信息。`);
|
|
26
|
+
console.log('---- 悬停信息 ----');
|
|
27
|
+
console.log(hoverInfo.contents.value);
|
|
28
|
+
console.log('-----------------');
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=searcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searcher.js","sourceRoot":"","sources":["../../../src/cli/tools/searcher.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,UAAU,UAAU,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAc;IAC9E,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAElC,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,YAAY,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,WAAW,cAAc,CAAC,IAAI,OAAO,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAc;IAC9E,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAElC,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,YAAY,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,SAAS,UAAU,CAAC,MAAM,OAAO,CAAC,CAAC;IACnE,KAAK,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,UAAU;QAAE,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,UAAkB,EAAE,MAAc;IACvD,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAElC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IACrE,IAAI,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,gBAAgB,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter.d.ts","sourceRoot":"","sources":["../../../src/cli/tools/starter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGlE,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjH"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/cli/tools/starter.ts
|
|
2
|
+
import { execute } from '../../index.js';
|
|
3
|
+
import { formatError } from './toolUtils.js';
|
|
4
|
+
export async function run(sourceCode, ioConfig, filePath, debug) {
|
|
5
|
+
if (/^\s*$/.test(sourceCode))
|
|
6
|
+
return console.error('没有字喵!');
|
|
7
|
+
let start = 0, end = 0;
|
|
8
|
+
console.log('=============================');
|
|
9
|
+
console.log('执行 Meaoiu 代码...');
|
|
10
|
+
console.log('=============================');
|
|
11
|
+
try {
|
|
12
|
+
start = performance.now();
|
|
13
|
+
await execute(sourceCode, ioConfig, { logLevel: debug ? 0 /* LogLevel.DEBUG */ : 2 /* LogLevel.WARN */ });
|
|
14
|
+
end = performance.now();
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
console.error('\n-----------------------------');
|
|
18
|
+
console.error(formatError(err, sourceCode, filePath));
|
|
19
|
+
}
|
|
20
|
+
console.log('=============================');
|
|
21
|
+
end > start && (console.log(`耗时: ${end - start} 毫秒`), console.log('============================='));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=starter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter.js","sourceRoot":"","sources":["../../../src/cli/tools/starter.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,OAAO,EAAE,OAAO,EAA2B,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,UAAkB,EAAE,QAAkB,EAAE,QAAgB,EAAE,KAAc;IACjG,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,KAAK,GAAG,CAAC,EACZ,GAAG,GAAG,CAAC,CAAC;IACT,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,IAAI,CAAC;QACJ,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,wBAAgB,CAAC,sBAAc,EAAE,CAAC,CAAC;QAC1F,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,GAAG,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;AACrG,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function parsePosition(pos: string): {
|
|
2
|
+
line: number;
|
|
3
|
+
col: number;
|
|
4
|
+
character: number;
|
|
5
|
+
};
|
|
6
|
+
export declare function formatError(error: unknown, sourceCode: string, filePath: string): string;
|
|
7
|
+
export declare function prompt(question: string): Promise<string>;
|
|
8
|
+
//# sourceMappingURL=toolUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolUtils.d.ts","sourceRoot":"","sources":["../../../src/cli/tools/toolUtils.ts"],"names":[],"mappings":"AAOA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAS3F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkCxF;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ9D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// src/cli/tools/toolUtils.ts
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import readline from 'node:readline';
|
|
4
|
+
import stringWidth from 'string-width';
|
|
5
|
+
import { MeaoiuError, parseError } from '../../index.js';
|
|
6
|
+
export function parsePosition(pos) {
|
|
7
|
+
const parts = pos.split(':');
|
|
8
|
+
if (parts.length !== 2)
|
|
9
|
+
throw parseError("位置参数格式错误,应为 '行:列',如 '2:3'");
|
|
10
|
+
const line = Number(parts[0]);
|
|
11
|
+
const col = Number(parts[1]);
|
|
12
|
+
if (!Number.isInteger(line) || !Number.isInteger(col) || line <= 0 || col <= 0) {
|
|
13
|
+
throw parseError('位置参数格式错误,行和列必须为正整数');
|
|
14
|
+
}
|
|
15
|
+
return { line, col, character: col };
|
|
16
|
+
}
|
|
17
|
+
export function formatError(error, sourceCode, filePath) {
|
|
18
|
+
const { messageWithPhase: message, line, col, endLine, endCol, } = error instanceof MeaoiuError ? error : parseError(error instanceof Error ? error.message : String(error));
|
|
19
|
+
if (line <= 0)
|
|
20
|
+
return `\n💥 坏了喵!💥\n${message}\n`;
|
|
21
|
+
const lines = sourceCode.split('\n');
|
|
22
|
+
const errorLine = lines[line - 1];
|
|
23
|
+
if (errorLine === undefined)
|
|
24
|
+
return `坏了喵: ${message} (找不到秘卷第 ${line} 行)`;
|
|
25
|
+
const prefix = errorLine.slice(0, col - 1);
|
|
26
|
+
const prefixWidth = stringWidth(prefix);
|
|
27
|
+
const errorPart = errorLine.slice(col - 1, (endLine === line ? endCol : errorLine.length) - 1);
|
|
28
|
+
const errorPartWidth = stringWidth(errorPart) || 1;
|
|
29
|
+
const indicator = `${' '.repeat(prefixWidth)}${'^'.repeat(errorPartWidth)}`;
|
|
30
|
+
const fileName = path.basename(filePath);
|
|
31
|
+
const formattedMessage = [
|
|
32
|
+
`\n💥 坏了喵!💥`,
|
|
33
|
+
`${message}`,
|
|
34
|
+
``,
|
|
35
|
+
`--> ${fileName}:${line}:${col}`,
|
|
36
|
+
` |`,
|
|
37
|
+
`${String(line).padStart(3, ' ')}| ${errorLine}`,
|
|
38
|
+
` | ${indicator}`,
|
|
39
|
+
``,
|
|
40
|
+
].join('\n');
|
|
41
|
+
return formattedMessage;
|
|
42
|
+
}
|
|
43
|
+
export async function prompt(question) {
|
|
44
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
45
|
+
return new Promise(resolve => {
|
|
46
|
+
rl.question(question, answer => {
|
|
47
|
+
rl.close();
|
|
48
|
+
resolve(answer);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=toolUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolUtils.js","sourceRoot":"","sources":["../../../src/cli/tools/toolUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { Token } from './tokenizer.js';
|
|
2
|
+
export declare const enum NodeKind {
|
|
3
|
+
ErrorNode = 0,
|
|
4
|
+
Program = 1,
|
|
5
|
+
VariableDeclaration = 2,
|
|
6
|
+
AssignmentStatement = 3,
|
|
7
|
+
FunctionDeclaration = 4,
|
|
8
|
+
ReturnStatement = 5,
|
|
9
|
+
AmbushStatement = 6,
|
|
10
|
+
BreakStatement = 7,
|
|
11
|
+
ExpressionStatement = 8,
|
|
12
|
+
NumericLiteral = 9,
|
|
13
|
+
StringLiteral = 10,
|
|
14
|
+
BooleanLiteral = 11,
|
|
15
|
+
NullLiteral = 12,
|
|
16
|
+
Identifier = 13,
|
|
17
|
+
BlockExpression = 14,
|
|
18
|
+
IfExpression = 15,
|
|
19
|
+
LoopExpression = 16,
|
|
20
|
+
ArithmeticExpression = 17,
|
|
21
|
+
CallExpression = 18,
|
|
22
|
+
SequenceExpression = 19,
|
|
23
|
+
LogicalExpression = 20,
|
|
24
|
+
ComparisonExpression = 21,
|
|
25
|
+
MemberAccessExpression = 22,
|
|
26
|
+
UnaryExpression = 23
|
|
27
|
+
}
|
|
28
|
+
export type Node = Statement | Expression | Program | ErrorNode;
|
|
29
|
+
export interface AstNode<T extends NodeKind = NodeKind> {
|
|
30
|
+
kind: T;
|
|
31
|
+
line: number;
|
|
32
|
+
col: number;
|
|
33
|
+
endLine: number;
|
|
34
|
+
endCol: number;
|
|
35
|
+
leadingComments?: Token[];
|
|
36
|
+
trailingComments?: Token[];
|
|
37
|
+
}
|
|
38
|
+
export interface ErrorNode extends AstNode<NodeKind.ErrorNode> {
|
|
39
|
+
message: string;
|
|
40
|
+
}
|
|
41
|
+
export interface Program extends AstNode<NodeKind.Program> {
|
|
42
|
+
body: Statement[];
|
|
43
|
+
}
|
|
44
|
+
export type Statement = VariableDeclaration | AssignmentStatement | FunctionDeclaration | ReturnStatement | AmbushStatement | BreakStatement | ExpressionStatement | ErrorNode;
|
|
45
|
+
export type Expression = NumericLiteral | StringLiteral | BooleanLiteral | NullLiteral | Identifier | BlockExpression | IfExpression | LoopExpression | CallExpression | MemberAccessExpression | UnaryExpression | ArithmeticExpression | ComparisonExpression | SequenceExpression | LogicalExpression | ErrorNode;
|
|
46
|
+
export declare const enum AssignmentOperator {
|
|
47
|
+
REFERENCE = 0,
|
|
48
|
+
COPY = 1,
|
|
49
|
+
MOVE = 2
|
|
50
|
+
}
|
|
51
|
+
export type UnaryOperator = AssignmentOperator.COPY | AssignmentOperator.MOVE;
|
|
52
|
+
export declare const enum LogicalOperator {
|
|
53
|
+
AND = 0,
|
|
54
|
+
OR = 1,
|
|
55
|
+
NAND = 2,
|
|
56
|
+
NOR = 3
|
|
57
|
+
}
|
|
58
|
+
export interface VariableDeclaration extends AstNode<NodeKind.VariableDeclaration> {
|
|
59
|
+
identifier: Identifier;
|
|
60
|
+
initialization: AssignmentStatement | undefined;
|
|
61
|
+
}
|
|
62
|
+
export interface AssignmentStatement extends AstNode<NodeKind.AssignmentStatement> {
|
|
63
|
+
assignee: Expression;
|
|
64
|
+
operator: AssignmentOperator;
|
|
65
|
+
value: Expression;
|
|
66
|
+
}
|
|
67
|
+
export interface FunctionDeclaration extends AstNode<NodeKind.FunctionDeclaration> {
|
|
68
|
+
name: Identifier;
|
|
69
|
+
parameters: BlockExpression;
|
|
70
|
+
body: BlockExpression;
|
|
71
|
+
}
|
|
72
|
+
export interface ReturnStatement extends AstNode<NodeKind.ReturnStatement> {
|
|
73
|
+
argument: Expression | undefined;
|
|
74
|
+
}
|
|
75
|
+
export interface AmbushStatement extends AstNode<NodeKind.AmbushStatement> {
|
|
76
|
+
argument: Expression | undefined;
|
|
77
|
+
}
|
|
78
|
+
export interface BreakStatement extends AstNode<NodeKind.BreakStatement> {
|
|
79
|
+
}
|
|
80
|
+
export interface ExpressionStatement extends AstNode<NodeKind.ExpressionStatement> {
|
|
81
|
+
expression: Expression;
|
|
82
|
+
}
|
|
83
|
+
export interface NumericLiteral extends AstNode<NodeKind.NumericLiteral> {
|
|
84
|
+
value: number;
|
|
85
|
+
}
|
|
86
|
+
export interface StringLiteral extends AstNode<NodeKind.StringLiteral> {
|
|
87
|
+
value: string;
|
|
88
|
+
}
|
|
89
|
+
export interface BooleanLiteral extends AstNode<NodeKind.BooleanLiteral> {
|
|
90
|
+
value: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface NullLiteral extends AstNode<NodeKind.NullLiteral> {
|
|
93
|
+
value: null;
|
|
94
|
+
}
|
|
95
|
+
export interface Identifier extends AstNode<NodeKind.Identifier> {
|
|
96
|
+
symbol: string;
|
|
97
|
+
}
|
|
98
|
+
export interface BlockExpression extends AstNode<NodeKind.BlockExpression> {
|
|
99
|
+
body: Statement[];
|
|
100
|
+
isCollection: boolean;
|
|
101
|
+
}
|
|
102
|
+
export interface IfExpression extends AstNode<NodeKind.IfExpression> {
|
|
103
|
+
condition: Expression;
|
|
104
|
+
consequent: BlockExpression;
|
|
105
|
+
alternate: BlockExpression | IfExpression | undefined;
|
|
106
|
+
}
|
|
107
|
+
export interface LoopExpression extends AstNode<NodeKind.LoopExpression> {
|
|
108
|
+
body: BlockExpression;
|
|
109
|
+
}
|
|
110
|
+
export interface CallExpression extends AstNode<NodeKind.CallExpression> {
|
|
111
|
+
callee: Identifier;
|
|
112
|
+
args: Expression;
|
|
113
|
+
}
|
|
114
|
+
export interface MemberAccessExpression extends AstNode<NodeKind.MemberAccessExpression> {
|
|
115
|
+
object: Expression;
|
|
116
|
+
property: Expression;
|
|
117
|
+
}
|
|
118
|
+
export interface UnaryExpression extends AstNode<NodeKind.UnaryExpression> {
|
|
119
|
+
operator: UnaryOperator;
|
|
120
|
+
argument: Expression;
|
|
121
|
+
}
|
|
122
|
+
export interface ArithmeticExpression extends AstNode<NodeKind.ArithmeticExpression> {
|
|
123
|
+
left: Expression;
|
|
124
|
+
right: Expression;
|
|
125
|
+
operator: string;
|
|
126
|
+
}
|
|
127
|
+
export interface ComparisonExpression extends AstNode<NodeKind.ComparisonExpression> {
|
|
128
|
+
expressions: Expression[];
|
|
129
|
+
operators: Token[];
|
|
130
|
+
}
|
|
131
|
+
export interface SequenceExpression extends AstNode<NodeKind.SequenceExpression> {
|
|
132
|
+
sections: Expression[];
|
|
133
|
+
operators: Token[];
|
|
134
|
+
}
|
|
135
|
+
export interface LogicalExpression extends AstNode<NodeKind.LogicalExpression> {
|
|
136
|
+
left: Expression;
|
|
137
|
+
right: Expression;
|
|
138
|
+
operator: LogicalOperator;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/core/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/core/ast.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/core/ast.ts"],"names":[],"mappings":"AAAA,kBAAkB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MeaoiuRuntimeIO } from './run/io.js';
|
|
2
|
+
import { MeaoiuType, type MeaoiuValue } from './typedef.js';
|
|
3
|
+
export declare const MeaoiuBuiltInNames: readonly ["喵", "祈求", "呼噜", "磨爪", "变摸数", "喵译", "嗅嗅", "才怪", "理直气壮", "差不多", "抢大的", "吃剩的", "摸余", "找尾巴", "喵语连珠", "打盹", "添乱", "猫咪艺术", "哈气"];
|
|
4
|
+
type BuiltInName = (typeof MeaoiuBuiltInNames)[number];
|
|
5
|
+
type BuiltInFunction = (args: MeaoiuValue[]) => MeaoiuValue | Promise<MeaoiuValue>;
|
|
6
|
+
export type MeaoiuBuiltIns = Record<BuiltInName, {
|
|
7
|
+
paramLimit: number;
|
|
8
|
+
paramTypes: MeaoiuType[][];
|
|
9
|
+
function: BuiltInFunction;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function isBuiltInFunctionName(name: string): name is BuiltInName;
|
|
12
|
+
export declare const createBuiltInFunctions: (io: MeaoiuRuntimeIO) => MeaoiuBuiltIns;
|
|
13
|
+
export declare function checkArgsForBuiltIn(builtIn: MeaoiuBuiltIns[BuiltInName], args: MeaoiuValue[]): string | undefined;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=builtIns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtIns.d.ts","sourceRoot":"","sources":["../../src/core/builtIns.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,UAAU,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAEtF,eAAO,MAAM,kBAAkB,uIAoBrB,CAAC;AACX,KAAK,WAAW,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEnF,MAAM,MAAM,cAAc,GAAG,MAAM,CAClC,WAAW,EACX;IACC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;IAC3B,QAAQ,EAAE,eAAe,CAAC;CAC1B,CACD,CAAC;AAGF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,WAAW,CAEvE;AAED,eAAO,MAAM,sBAAsB,GAAI,IAAI,eAAe,KAAG,cAiI3D,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,SAAS,CAkBjH"}
|