mimo-lang 1.1.0 → 2.0.6
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/.gitattributes +24 -0
- package/LICENSE +21 -0
- package/README.md +91 -6
- package/adapters/browserAdapter.js +86 -0
- package/adapters/nodeAdapter.js +101 -0
- package/bin/cli.js +80 -0
- package/bin/commands/convert.js +27 -0
- package/bin/commands/doctor.js +139 -0
- package/bin/commands/eval.js +39 -0
- package/bin/commands/fmt.js +109 -0
- package/bin/commands/help.js +72 -0
- package/bin/commands/lint.js +117 -0
- package/bin/commands/repl.js +24 -0
- package/bin/commands/run.js +64 -0
- package/bin/commands/test.js +126 -0
- package/bin/utils/colors.js +38 -0
- package/bin/utils/formatError.js +47 -0
- package/bin/utils/fs.js +57 -0
- package/bin/utils/version.js +8 -0
- package/build.js +18 -0
- package/bun.lock +74 -0
- package/index.js +49 -39
- package/index.web.js +364 -0
- package/interpreter/BuiltinFunction.js +32 -0
- package/interpreter/ErrorHandler.js +120 -0
- package/interpreter/ExpressionEvaluator.js +106 -0
- package/interpreter/Interpreter.js +172 -0
- package/interpreter/MimoError.js +112 -0
- package/interpreter/ModuleLoader.js +236 -0
- package/interpreter/StatementExecutor.js +107 -0
- package/interpreter/Utils.js +82 -0
- package/interpreter/Values.js +87 -0
- package/interpreter/coreBuiltins.js +490 -0
- package/interpreter/environment.js +99 -0
- package/interpreter/evaluators/binaryExpressionEvaluator.js +111 -0
- package/interpreter/evaluators/collectionEvaluator.js +151 -0
- package/interpreter/evaluators/functionCallEvaluator.js +76 -0
- package/interpreter/evaluators/literalEvaluator.js +27 -0
- package/interpreter/evaluators/moduleAccessEvaluator.js +25 -0
- package/interpreter/evaluators/templateLiteralEvaluator.js +20 -0
- package/interpreter/executors/BaseExecutor.js +37 -0
- package/interpreter/executors/ControlFlowExecutor.js +206 -0
- package/interpreter/executors/FunctionExecutor.js +126 -0
- package/interpreter/executors/PatternMatchExecutor.js +93 -0
- package/interpreter/executors/VariableExecutor.js +144 -0
- package/interpreter/index.js +8 -0
- package/interpreter/stdlib/array/accessFunctions.js +61 -0
- package/interpreter/stdlib/array/arrayUtils.js +36 -0
- package/interpreter/stdlib/array/higherOrderFunctions.js +285 -0
- package/interpreter/stdlib/array/searchFunctions.js +77 -0
- package/interpreter/stdlib/array/setFunctions.js +49 -0
- package/interpreter/stdlib/array/transformationFunctions.js +68 -0
- package/interpreter/stdlib/array.js +85 -0
- package/interpreter/stdlib/assert.js +143 -0
- package/interpreter/stdlib/datetime.js +170 -0
- package/interpreter/stdlib/env.js +54 -0
- package/interpreter/stdlib/fs.js +161 -0
- package/interpreter/stdlib/http.js +92 -0
- package/interpreter/stdlib/json.js +70 -0
- package/interpreter/stdlib/math.js +309 -0
- package/interpreter/stdlib/object.js +142 -0
- package/interpreter/stdlib/path.js +69 -0
- package/interpreter/stdlib/regex.js +134 -0
- package/interpreter/stdlib/string.js +260 -0
- package/interpreter/suggestions.js +46 -0
- package/lexer/Lexer.js +245 -0
- package/lexer/TokenTypes.js +131 -0
- package/lexer/createToken.js +11 -0
- package/lexer/tokenizers/commentTokenizer.js +45 -0
- package/lexer/tokenizers/literalTokenizer.js +163 -0
- package/lexer/tokenizers/symbolTokenizer.js +69 -0
- package/lexer/tokenizers/whitespaceTokenizer.js +36 -0
- package/package.json +29 -11
- package/parser/ASTNodes.js +448 -0
- package/parser/Parser.js +188 -0
- package/parser/expressions/atomicExpressions.js +165 -0
- package/parser/expressions/conditionalExpressions.js +0 -0
- package/parser/expressions/operatorExpressions.js +79 -0
- package/parser/expressions/primaryExpressions.js +77 -0
- package/parser/parseStatement.js +184 -0
- package/parser/parserExpressions.js +115 -0
- package/parser/parserUtils.js +19 -0
- package/parser/statements/controlFlowParsers.js +106 -0
- package/parser/statements/functionParsers.js +314 -0
- package/parser/statements/moduleParsers.js +57 -0
- package/parser/statements/patternMatchParsers.js +124 -0
- package/parser/statements/variableParsers.js +155 -0
- package/repl.js +325 -0
- package/test.js +47 -1
- package/tools/PrettyPrinter.js +3 -0
- package/tools/convert/Args.js +46 -0
- package/tools/convert/Registry.js +91 -0
- package/tools/convert/Transpiler.js +78 -0
- package/tools/convert/plugins/README.md +66 -0
- package/tools/convert/plugins/alya/index.js +10 -0
- package/tools/convert/plugins/alya/to_alya.js +289 -0
- package/tools/convert/plugins/alya/visitors/expressions.js +257 -0
- package/tools/convert/plugins/alya/visitors/statements.js +403 -0
- package/tools/convert/plugins/base_converter.js +228 -0
- package/tools/convert/plugins/javascript/index.js +10 -0
- package/tools/convert/plugins/javascript/mimo_runtime.js +265 -0
- package/tools/convert/plugins/javascript/to_js.js +155 -0
- package/tools/convert/plugins/javascript/visitors/expressions.js +197 -0
- package/tools/convert/plugins/javascript/visitors/patterns.js +102 -0
- package/tools/convert/plugins/javascript/visitors/statements.js +236 -0
- package/tools/convert/plugins/python/index.js +10 -0
- package/tools/convert/plugins/python/mimo_runtime.py +811 -0
- package/tools/convert/plugins/python/to_py.js +329 -0
- package/tools/convert/plugins/python/visitors/expressions.js +272 -0
- package/tools/convert/plugins/python/visitors/patterns.js +100 -0
- package/tools/convert/plugins/python/visitors/statements.js +257 -0
- package/tools/convert.js +102 -0
- package/tools/format/CommentAttacher.js +190 -0
- package/tools/format/CommentLexer.js +152 -0
- package/tools/format/Printer.js +849 -0
- package/tools/format/config.js +107 -0
- package/tools/formatter.js +169 -0
- package/tools/lint/Linter.js +391 -0
- package/tools/lint/config.js +114 -0
- package/tools/lint/rules/consistent-return.js +62 -0
- package/tools/lint/rules/max-depth.js +56 -0
- package/tools/lint/rules/no-empty-function.js +45 -0
- package/tools/lint/rules/no-magic-numbers.js +46 -0
- package/tools/lint/rules/no-shadow.js +113 -0
- package/tools/lint/rules/no-unused-vars.js +26 -0
- package/tools/lint/rules/prefer-const.js +19 -0
- package/tools/linter.js +261 -0
- package/tools/replFormatter.js +93 -0
- package/tools/stamp-version.js +32 -0
- package/web/index.js +9 -0
- package/bun.lockb +0 -0
- package/cli.js +0 -84
- package/compiler/execute/interpreter.js +0 -68
- package/compiler/execute/interpreters/binary.js +0 -12
- package/compiler/execute/interpreters/call.js +0 -10
- package/compiler/execute/interpreters/if.js +0 -10
- package/compiler/execute/interpreters/try-catch.js +0 -10
- package/compiler/execute/interpreters/while.js +0 -8
- package/compiler/execute/utils/createfunction.js +0 -11
- package/compiler/execute/utils/evaluate.js +0 -20
- package/compiler/execute/utils/operate.js +0 -23
- package/compiler/lexer/processToken.js +0 -40
- package/compiler/lexer/tokenTypes.js +0 -4
- package/compiler/lexer/tokenizer.js +0 -63
- package/compiler/parser/expression/comparison.js +0 -18
- package/compiler/parser/expression/identifier.js +0 -29
- package/compiler/parser/expression/number.js +0 -10
- package/compiler/parser/expression/operator.js +0 -21
- package/compiler/parser/expression/punctuation.js +0 -31
- package/compiler/parser/expression/string.js +0 -6
- package/compiler/parser/parseExpression.js +0 -27
- package/compiler/parser/parseStatement.js +0 -35
- package/compiler/parser/parser.js +0 -16
- package/compiler/parser/statement/call.js +0 -26
- package/compiler/parser/statement/function.js +0 -29
- package/compiler/parser/statement/if.js +0 -34
- package/compiler/parser/statement/return.js +0 -10
- package/compiler/parser/statement/set.js +0 -11
- package/compiler/parser/statement/show.js +0 -10
- package/compiler/parser/statement/try-catch.js +0 -25
- package/compiler/parser/statement/while.js +0 -22
- package/converter/go/convert.js +0 -110
- package/converter/js/convert.js +0 -107
- package/i.js +0 -30
- package/jsconfig.json +0 -27
- package/webpack.config.js +0 -9
package/converter/js/convert.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import pkg from 'js-beautify';
|
|
2
|
-
const { js_beautify } = pkg;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
let declaredVariables = new Set();
|
|
6
|
-
|
|
7
|
-
export function generateCodeFromAst(node) {
|
|
8
|
-
switch (node.type) {
|
|
9
|
-
case "function":
|
|
10
|
-
return generateFunction(node);
|
|
11
|
-
case "assignment":
|
|
12
|
-
return generateAssignment(node);
|
|
13
|
-
case "while":
|
|
14
|
-
return generateWhile(node);
|
|
15
|
-
case "if":
|
|
16
|
-
return generateIf(node);
|
|
17
|
-
case "return":
|
|
18
|
-
return generateReturn(node);
|
|
19
|
-
case "call":
|
|
20
|
-
return generateCall(node);
|
|
21
|
-
case "print":
|
|
22
|
-
return generatePrint(node);
|
|
23
|
-
case "literal":
|
|
24
|
-
return node.value;
|
|
25
|
-
case "variable":
|
|
26
|
-
return node.name;
|
|
27
|
-
case "binary":
|
|
28
|
-
return generateBinary(node);
|
|
29
|
-
case "indexAccess":
|
|
30
|
-
return generateIndexAccess(node);
|
|
31
|
-
case "list":
|
|
32
|
-
return generateList(node);
|
|
33
|
-
default:
|
|
34
|
-
console.log(node);
|
|
35
|
-
throw new Error(`Unknown node type: ${node.type}`);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function generateCodeJsFromAstArray(ast) {
|
|
40
|
-
const generatedCode = ast.map(generateCodeFromAst).join("\n");
|
|
41
|
-
return js_beautify(generatedCode);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function generateFunction(node) {
|
|
45
|
-
const params = node.params.join(", ");
|
|
46
|
-
const body = node.body.map(generateCodeFromAst).join("\n");
|
|
47
|
-
return `function ${node.name}(${params}) {\n${body}\n}`;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function generateAssignment(node) {
|
|
51
|
-
let prefix = "";
|
|
52
|
-
if (!declaredVariables.has(node.target)) {
|
|
53
|
-
prefix = "let ";
|
|
54
|
-
declaredVariables.add(node.target);
|
|
55
|
-
}
|
|
56
|
-
return `${prefix}${node.target} = ${generateCodeFromAst(node.value)};`;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function generateWhile(node) {
|
|
60
|
-
const condition = generateCodeFromAst(node.condition);
|
|
61
|
-
const body = node.body.map(generateCodeFromAst).join("\n");
|
|
62
|
-
return `while (${condition}) {\n${body}\n}`;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function generateIf(node) {
|
|
66
|
-
const condition = generateCodeFromAst(node.condition);
|
|
67
|
-
const consequent = node.consequent.map(generateCodeFromAst).join("\n");
|
|
68
|
-
return `if (${condition}) {\n${consequent}\n}`;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function generateReturn(node) {
|
|
72
|
-
return `return ${generateCodeFromAst(node.expression)};`;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function generateCall(node) {
|
|
76
|
-
const args = node.args.map(generateCodeFromAst).join(", ");
|
|
77
|
-
let callCode = `${node.name}(${args})`;
|
|
78
|
-
if (node.target) {
|
|
79
|
-
let prefix = "";
|
|
80
|
-
if (!declaredVariables.has(node.target)) {
|
|
81
|
-
prefix = "let ";
|
|
82
|
-
declaredVariables.add(node.target);
|
|
83
|
-
}
|
|
84
|
-
callCode = `${prefix}${node.target} = ${callCode};`;
|
|
85
|
-
}
|
|
86
|
-
return callCode;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function generatePrint(node) {
|
|
90
|
-
return `console.log(${generateCodeFromAst(node.value)});`;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function generateBinary(node) {
|
|
94
|
-
const left = generateCodeFromAst(node.left);
|
|
95
|
-
const right = generateCodeFromAst(node.right);
|
|
96
|
-
return `${left} ${node.operator} ${right}`;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function generateIndexAccess(node) {
|
|
100
|
-
const index = generateCodeFromAst(node.index);
|
|
101
|
-
return `${node.name}[${index}]`;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function generateList(node) {
|
|
105
|
-
const elements = node.elements.map(generateCodeFromAst).join(", ");
|
|
106
|
-
return `[${elements}]`;
|
|
107
|
-
}
|
package/i.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
|
|
4
|
-
function addJsExtensionToImports(filePath) {
|
|
5
|
-
const code = fs.readFileSync(filePath, 'utf8');
|
|
6
|
-
const newCode = code.replace(/from\s+(['"])(.*?)(?<!\.js)\1/g, 'from $1$2.js$1');
|
|
7
|
-
|
|
8
|
-
if (code !== newCode) {
|
|
9
|
-
fs.writeFileSync(filePath, newCode, 'utf8');
|
|
10
|
-
console.log(`Updated imports in ${filePath}`);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function traverseDirectory(dirPath) {
|
|
15
|
-
const files = fs.readdirSync(dirPath);
|
|
16
|
-
|
|
17
|
-
for (const file of files) {
|
|
18
|
-
const filePath = path.join(dirPath, file);
|
|
19
|
-
const stats = fs.statSync(filePath);
|
|
20
|
-
|
|
21
|
-
if (stats.isDirectory()) {
|
|
22
|
-
traverseDirectory(filePath);
|
|
23
|
-
} else if (path.extname(filePath) === '.js') {
|
|
24
|
-
addJsExtensionToImports(filePath);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const rootDir = './'; // replace with your directory path
|
|
30
|
-
traverseDirectory(rootDir);
|
package/jsconfig.json
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
// Enable latest features
|
|
4
|
-
"lib": ["ESNext"],
|
|
5
|
-
"target": "ESNext",
|
|
6
|
-
"module": "ESNext",
|
|
7
|
-
"moduleDetection": "force",
|
|
8
|
-
"jsx": "react-jsx",
|
|
9
|
-
"allowJs": true,
|
|
10
|
-
|
|
11
|
-
// Bundler mode
|
|
12
|
-
"moduleResolution": "bundler",
|
|
13
|
-
"allowImportingTsExtensions": true,
|
|
14
|
-
"verbatimModuleSyntax": true,
|
|
15
|
-
"noEmit": true,
|
|
16
|
-
|
|
17
|
-
// Best practices
|
|
18
|
-
"strict": true,
|
|
19
|
-
"skipLibCheck": true,
|
|
20
|
-
"noFallthroughCasesInSwitch": true,
|
|
21
|
-
|
|
22
|
-
// Some stricter flags (disabled by default)
|
|
23
|
-
"noUnusedLocals": false,
|
|
24
|
-
"noUnusedParameters": false,
|
|
25
|
-
"noPropertyAccessFromIndexSignature": false
|
|
26
|
-
}
|
|
27
|
-
}
|
package/webpack.config.js
DELETED