rip-lang 3.6.2 → 3.7.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/CHANGELOG.md +27 -1
- package/README.md +42 -17
- package/docs/NOTES.md +93 -0
- package/docs/RIP-GUIDE.md +39 -1
- package/docs/RIP-INTERNALS.md +9 -9
- package/docs/RIP-LANG.md +213 -2
- package/docs/dist/rip.browser.js +435 -306
- package/docs/dist/rip.browser.min.js +206 -206
- package/docs/dist/rip.browser.min.js.br +0 -0
- package/docs/index.html +19 -6
- package/package.json +3 -3
- package/src/compiler.js +201 -126
- package/src/components.js +10 -10
- package/src/grammar/grammar.rip +8 -2
- package/src/lexer.js +77 -5
- package/src/parser.js +123 -120
|
Binary file
|
package/docs/index.html
CHANGED
|
@@ -565,6 +565,7 @@
|
|
|
565
565
|
<button id="show-tokens" title="Toggle token stream display">Tokens</button>
|
|
566
566
|
<button id="show-sexp" title="Toggle S-expression display">S-Expressions</button>
|
|
567
567
|
<button id="show-preamble" title="Toggle preamble code display">Preamble</button>
|
|
568
|
+
<button id="show-types" title="Toggle .d.ts type declarations">Types</button>
|
|
568
569
|
<button id="show-js" title="Toggle JavaScript output">JS</button>
|
|
569
570
|
</div>
|
|
570
571
|
</div>
|
|
@@ -934,6 +935,7 @@ console.log "Domain:", domain`;
|
|
|
934
935
|
const showTokensBtn = document.getElementById('show-tokens');
|
|
935
936
|
const showSexpBtn = document.getElementById('show-sexp');
|
|
936
937
|
const showPreambleBtn = document.getElementById('show-preamble');
|
|
938
|
+
const showTypesBtn = document.getElementById('show-types');
|
|
937
939
|
const showJSBtn = document.getElementById('show-js');
|
|
938
940
|
const replOutput = document.getElementById('repl-output');
|
|
939
941
|
const promptSpan = document.getElementById('prompt');
|
|
@@ -982,6 +984,7 @@ console.log "Domain:", domain`;
|
|
|
982
984
|
let showTokens = localStorage.getItem('rip-repl-tokens') === 'true';
|
|
983
985
|
let showSexp = localStorage.getItem('rip-repl-sexp') === 'true';
|
|
984
986
|
let showPreamble = localStorage.getItem('rip-preamble') === 'true';
|
|
987
|
+
let showTypes = localStorage.getItem('rip-types') === 'true';
|
|
985
988
|
let showJS = localStorage.getItem('rip-repl-js') !== 'false'; // default true
|
|
986
989
|
|
|
987
990
|
// Format tokens for display — clean, minimal output
|
|
@@ -1012,7 +1015,10 @@ console.log "Domain:", domain`;
|
|
|
1012
1015
|
function compileCode() {
|
|
1013
1016
|
try {
|
|
1014
1017
|
const source = monacoEditor.getValue();
|
|
1015
|
-
const
|
|
1018
|
+
const opts = {};
|
|
1019
|
+
if (!showPreamble) opts.skipPreamble = true;
|
|
1020
|
+
if (showTypes) opts.types = 'emit';
|
|
1021
|
+
const result = compile(source, opts);
|
|
1016
1022
|
|
|
1017
1023
|
let parts = [];
|
|
1018
1024
|
|
|
@@ -1024,6 +1030,10 @@ console.log "Domain:", domain`;
|
|
|
1024
1030
|
parts.push(window.toSexpr ? window.toSexpr(result.sexpr, 0, true) : JSON.stringify(result.sexpr, null, 1));
|
|
1025
1031
|
}
|
|
1026
1032
|
|
|
1033
|
+
if (showTypes && result.dts) {
|
|
1034
|
+
parts.push('// .d.ts\n' + result.dts.trim());
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1027
1037
|
if (showJS) {
|
|
1028
1038
|
parts.push(result.code);
|
|
1029
1039
|
}
|
|
@@ -1032,7 +1042,8 @@ console.log "Domain:", domain`;
|
|
|
1032
1042
|
|
|
1033
1043
|
// Update output editor language and content
|
|
1034
1044
|
const model = outputEditor.getModel();
|
|
1035
|
-
|
|
1045
|
+
let lang = (showTokens || showSexp) ? 'plaintext' : (showTypes && !showJS) ? 'typescript' : 'javascript';
|
|
1046
|
+
monaco.editor.setModelLanguage(model, lang);
|
|
1036
1047
|
outputEditor.setValue(outputText);
|
|
1037
1048
|
} catch (error) {
|
|
1038
1049
|
const model = outputEditor.getModel();
|
|
@@ -1085,6 +1096,7 @@ console.log "Domain:", domain`;
|
|
|
1085
1096
|
showTokensBtn.classList.toggle('active', showTokens);
|
|
1086
1097
|
showSexpBtn.classList.toggle('active', showSexp);
|
|
1087
1098
|
showPreambleBtn.classList.toggle('active', showPreamble);
|
|
1099
|
+
showTypesBtn.classList.toggle('active', showTypes);
|
|
1088
1100
|
showJSBtn.classList.toggle('active', showJS);
|
|
1089
1101
|
|
|
1090
1102
|
// Initialize from URL hash on page load (default to compiler)
|
|
@@ -1536,10 +1548,11 @@ console.log "Domain:", domain`;
|
|
|
1536
1548
|
monacoEditor.onDidChangeModelContent(compileCode);
|
|
1537
1549
|
|
|
1538
1550
|
const toggles = [
|
|
1539
|
-
{ btn: showTokensBtn,
|
|
1540
|
-
{ btn: showSexpBtn,
|
|
1541
|
-
{ btn: showPreambleBtn, key: 'rip-preamble',
|
|
1542
|
-
{ btn:
|
|
1551
|
+
{ btn: showTokensBtn, key: 'rip-repl-tokens', get: () => showTokens, set: v => showTokens = v },
|
|
1552
|
+
{ btn: showSexpBtn, key: 'rip-repl-sexp', get: () => showSexp, set: v => showSexp = v },
|
|
1553
|
+
{ btn: showPreambleBtn, key: 'rip-preamble', get: () => showPreamble, set: v => showPreamble = v },
|
|
1554
|
+
{ btn: showTypesBtn, key: 'rip-types', get: () => showTypes, set: v => showTypes = v },
|
|
1555
|
+
{ btn: showJSBtn, key: 'rip-repl-js', get: () => showJS, set: v => showJS = v },
|
|
1543
1556
|
];
|
|
1544
1557
|
|
|
1545
1558
|
for (const { btn, key, get, set } of toggles) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rip-lang",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.0",
|
|
4
4
|
"description": "A modern language that compiles to JavaScript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/compiler.js",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"author": "Steve Shreeve <steve.shreeve@gmail.com>",
|
|
68
68
|
"license": "MIT",
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@rip-lang/api": "
|
|
71
|
-
"@rip-lang/ui": "
|
|
70
|
+
"@rip-lang/api": "1.1.5",
|
|
71
|
+
"@rip-lang/ui": "0.2.0"
|
|
72
72
|
}
|
|
73
73
|
}
|