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.
Files changed (132) hide show
  1. package/LANGUAGE_GUIDE.md +511 -0
  2. package/LICENSE +21 -0
  3. package/README.md +336 -0
  4. package/dist/api/execution.d.ts +9 -0
  5. package/dist/api/execution.d.ts.map +1 -0
  6. package/dist/api/execution.js +17 -0
  7. package/dist/api/execution.js.map +1 -0
  8. package/dist/api/serviceState.d.ts +24 -0
  9. package/dist/api/serviceState.d.ts.map +1 -0
  10. package/dist/api/serviceState.js +53 -0
  11. package/dist/api/serviceState.js.map +1 -0
  12. package/dist/api/services/completions.d.ts +15 -0
  13. package/dist/api/services/completions.d.ts.map +1 -0
  14. package/dist/api/services/completions.js +48 -0
  15. package/dist/api/services/completions.js.map +1 -0
  16. package/dist/api/services/diagnostics.d.ts +9 -0
  17. package/dist/api/services/diagnostics.d.ts.map +1 -0
  18. package/dist/api/services/diagnostics.js +5 -0
  19. package/dist/api/services/diagnostics.js.map +1 -0
  20. package/dist/api/services/formatting.d.ts +2 -0
  21. package/dist/api/services/formatting.d.ts.map +1 -0
  22. package/dist/api/services/formatting.js +223 -0
  23. package/dist/api/services/formatting.js.map +1 -0
  24. package/dist/api/services/highlight.d.ts +14 -0
  25. package/dist/api/services/highlight.d.ts.map +1 -0
  26. package/dist/api/services/highlight.js +58 -0
  27. package/dist/api/services/highlight.js.map +1 -0
  28. package/dist/api/services/inlayHints.d.ts +22 -0
  29. package/dist/api/services/inlayHints.d.ts.map +1 -0
  30. package/dist/api/services/inlayHints.js +100 -0
  31. package/dist/api/services/inlayHints.js.map +1 -0
  32. package/dist/api/services/search.d.ts +17 -0
  33. package/dist/api/services/search.d.ts.map +1 -0
  34. package/dist/api/services/search.js +35 -0
  35. package/dist/api/services/search.js.map +1 -0
  36. package/dist/api/utils/astUtils.d.ts +11 -0
  37. package/dist/api/utils/astUtils.d.ts.map +1 -0
  38. package/dist/api/utils/astUtils.js +106 -0
  39. package/dist/api/utils/astUtils.js.map +1 -0
  40. package/dist/api/utils/lspUtils.d.ts +16 -0
  41. package/dist/api/utils/lspUtils.d.ts.map +1 -0
  42. package/dist/api/utils/lspUtils.js +5 -0
  43. package/dist/api/utils/lspUtils.js.map +1 -0
  44. package/dist/api/utils/symbolAnalyzer.d.ts +37 -0
  45. package/dist/api/utils/symbolAnalyzer.d.ts.map +1 -0
  46. package/dist/api/utils/symbolAnalyzer.js +440 -0
  47. package/dist/api/utils/symbolAnalyzer.js.map +1 -0
  48. package/dist/api/utils/symbolTable.d.ts +28 -0
  49. package/dist/api/utils/symbolTable.d.ts.map +1 -0
  50. package/dist/api/utils/symbolTable.js +3 -0
  51. package/dist/api/utils/symbolTable.js.map +1 -0
  52. package/dist/cli/main.d.ts +3 -0
  53. package/dist/cli/main.d.ts.map +1 -0
  54. package/dist/cli/main.js +92 -0
  55. package/dist/cli/main.js.map +1 -0
  56. package/dist/cli/tools/completer.d.ts +2 -0
  57. package/dist/cli/tools/completer.d.ts.map +1 -0
  58. package/dist/cli/tools/completer.js +24 -0
  59. package/dist/cli/tools/completer.js.map +1 -0
  60. package/dist/cli/tools/diagnoser.d.ts +2 -0
  61. package/dist/cli/tools/diagnoser.d.ts.map +1 -0
  62. package/dist/cli/tools/diagnoser.js +29 -0
  63. package/dist/cli/tools/diagnoser.js.map +1 -0
  64. package/dist/cli/tools/formatter.d.ts +2 -0
  65. package/dist/cli/tools/formatter.d.ts.map +1 -0
  66. package/dist/cli/tools/formatter.js +27 -0
  67. package/dist/cli/tools/formatter.js.map +1 -0
  68. package/dist/cli/tools/searcher.d.ts +4 -0
  69. package/dist/cli/tools/searcher.d.ts.map +1 -0
  70. package/dist/cli/tools/searcher.js +30 -0
  71. package/dist/cli/tools/searcher.js.map +1 -0
  72. package/dist/cli/tools/starter.d.ts +3 -0
  73. package/dist/cli/tools/starter.d.ts.map +1 -0
  74. package/dist/cli/tools/starter.js +23 -0
  75. package/dist/cli/tools/starter.js.map +1 -0
  76. package/dist/cli/tools/toolUtils.d.ts +8 -0
  77. package/dist/cli/tools/toolUtils.d.ts.map +1 -0
  78. package/dist/cli/tools/toolUtils.js +52 -0
  79. package/dist/cli/tools/toolUtils.js.map +1 -0
  80. package/dist/core/ast.d.ts +140 -0
  81. package/dist/core/ast.d.ts.map +1 -0
  82. package/dist/core/ast.js +3 -0
  83. package/dist/core/ast.js.map +1 -0
  84. package/dist/core/builtIns.d.ts +15 -0
  85. package/dist/core/builtIns.d.ts.map +1 -0
  86. package/dist/core/builtIns.js +175 -0
  87. package/dist/core/builtIns.js.map +1 -0
  88. package/dist/core/error.d.ts +41 -0
  89. package/dist/core/error.d.ts.map +1 -0
  90. package/dist/core/error.js +63 -0
  91. package/dist/core/error.js.map +1 -0
  92. package/dist/core/parser.d.ts +89 -0
  93. package/dist/core/parser.d.ts.map +1 -0
  94. package/dist/core/parser.js +578 -0
  95. package/dist/core/parser.js.map +1 -0
  96. package/dist/core/preprocessor.d.ts +2 -0
  97. package/dist/core/preprocessor.d.ts.map +1 -0
  98. package/dist/core/preprocessor.js +187 -0
  99. package/dist/core/preprocessor.js.map +1 -0
  100. package/dist/core/run/environment.d.ts +43 -0
  101. package/dist/core/run/environment.d.ts.map +1 -0
  102. package/dist/core/run/environment.js +192 -0
  103. package/dist/core/run/environment.js.map +1 -0
  104. package/dist/core/run/interpreter.d.ts +13 -0
  105. package/dist/core/run/interpreter.d.ts.map +1 -0
  106. package/dist/core/run/interpreter.js +415 -0
  107. package/dist/core/run/interpreter.js.map +1 -0
  108. package/dist/core/run/io.d.ts +18 -0
  109. package/dist/core/run/io.d.ts.map +1 -0
  110. package/dist/core/run/io.js +34 -0
  111. package/dist/core/run/io.js.map +1 -0
  112. package/dist/core/run/logger.d.ts +12 -0
  113. package/dist/core/run/logger.d.ts.map +1 -0
  114. package/dist/core/run/logger.js +17 -0
  115. package/dist/core/run/logger.js.map +1 -0
  116. package/dist/core/run/value.d.ts +41 -0
  117. package/dist/core/run/value.d.ts.map +1 -0
  118. package/dist/core/run/value.js +37 -0
  119. package/dist/core/run/value.js.map +1 -0
  120. package/dist/core/tokenizer.d.ts +82 -0
  121. package/dist/core/tokenizer.d.ts.map +1 -0
  122. package/dist/core/tokenizer.js +277 -0
  123. package/dist/core/tokenizer.js.map +1 -0
  124. package/dist/core/typedef.d.ts +32 -0
  125. package/dist/core/typedef.d.ts.map +1 -0
  126. package/dist/core/typedef.js +67 -0
  127. package/dist/core/typedef.js.map +1 -0
  128. package/dist/index.d.ts +12 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +13 -0
  131. package/dist/index.js.map +1 -0
  132. package/package.json +60 -0
@@ -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,2 @@
1
+ export declare function complete(sourceCode: string, posRaw: string): void;
2
+ //# sourceMappingURL=completer.d.ts.map
@@ -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,2 @@
1
+ export declare function diagnose(sourceCode: string, filePath: string): void;
2
+ //# sourceMappingURL=diagnoser.d.ts.map
@@ -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,2 @@
1
+ export declare function format(sourceCode: string, filePath: string): Promise<void>;
2
+ //# sourceMappingURL=formatter.d.ts.map
@@ -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,3 @@
1
+ import { type IOConfig } from '../../index.js';
2
+ export declare function run(sourceCode: string, ioConfig: IOConfig, filePath: string, debug: boolean): Promise<void>;
3
+ //# sourceMappingURL=starter.d.ts.map
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ // src/core/ast.ts
2
+ export {};
3
+ //# sourceMappingURL=ast.js.map
@@ -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"}