From f2e05f548f14fdda9cd26245d0fd0ef4750eb699 Mon Sep 17 00:00:00 2001 From: kazk Date: Fri, 11 Feb 2022 23:47:47 -0800 Subject: [PATCH 01/22] Add evaluation --- index.html | 93 ++++++- package-lock.json | 611 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 4 +- tailwind.config.js | 6 + vite.config.js | 5 +- 5 files changed, 705 insertions(+), 14 deletions(-) create mode 100644 tailwind.config.js diff --git a/index.html b/index.html index 86ca9b9..9fed43d 100644 --- a/index.html +++ b/index.html @@ -10,27 +10,27 @@ - -
+

Lambda Calculus +

Lambda Calculus mode for CodeMirror

-

Lambda Calculus mode for CodeMirror

+

text/x-lambdacalc

+

@codewars/codemirror-lambda-calculus

-
-

@codewars/codemirror-lambda-calculus

+
+
- +
-

MIME type: text/x-lambdacalc

+ +
+ + + + {{ result }} + {{ error }} +
+ +
+
+ Options +
+ + + + + + + + +
+
+
diff --git a/package-lock.json b/package-lock.json index a7ad607..d12b441 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,111 @@ "license": "MIT", "devDependencies": { "postcss-nesting": "^10.1.2", - "vite": "^2.8.1" + "vite": "^2.8.1", + "vite-plugin-windicss": "^1.7.0", + "windicss": "^3.4.3" }, "peerDependencies": { "codemirror": "5.x" } }, + "node_modules/@antfu/utils": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.4.0.tgz", + "integrity": "sha512-gqkpvjkgFUu+s3kP+Ly33OKpo5zvVY3FDFhv5BIb98SncS3KD6DNxPfNDjwHIoyXbz1leWo1j8DtRLZ1D2Jv+Q==", + "dev": true, + "dependencies": { + "@types/throttle-debounce": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/throttle-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", + "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==", + "dev": true + }, + "node_modules/@windicss/config": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@windicss/config/-/config-1.7.0.tgz", + "integrity": "sha512-jP+SYEUMTcvEQexYAeaIGKWq3sE+yv0myyOCph7Glm/YZE2ZCK1GukI1oDG6fcVer121EQzCY4Rx11trb3oSZg==", + "dev": true, + "dependencies": { + "debug": "^4.3.3", + "jiti": "^1.12.9", + "windicss": "^3.4.3" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@windicss/plugin-utils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.7.0.tgz", + "integrity": "sha512-4zxTIhpGaia4FTxL/c20GQU2bK3bqToerdErvDzwLqWQECVGt7vTGFQd3e4XMpfR6Ujgk4/p7fCHv/F15R/pkA==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.4.0", + "@windicss/config": "1.7.0", + "debug": "^4.3.3", + "fast-glob": "^3.2.11", + "magic-string": "^0.25.7", + "micromatch": "^4.0.4", + "windicss": "^3.4.3" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/codemirror": { "version": "5.65.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.1.tgz", @@ -34,6 +133,23 @@ "node": ">=4" } }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/esbuild": { "version": "0.14.21", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz", @@ -372,6 +488,43 @@ "node": ">=12" } }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -392,6 +545,18 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -416,6 +581,88 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "1.12.15", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.12.15.tgz", + "integrity": "sha512-/+K89y6KJA2nISbWrlc/773XdpDgSQq/LdQ+ZZyw2jRxUNyquPtbsDCCCMRzzNORUgroUGc4nAXxJEnQvpViCA==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/kolorist": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.5.1.tgz", + "integrity": "sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "node_modules/nanoid": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", @@ -440,6 +687,18 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/postcss": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", @@ -486,6 +745,26 @@ "node": ">=4" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -503,6 +782,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "2.67.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.2.tgz", @@ -518,6 +807,29 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -527,6 +839,12 @@ "node": ">=0.10.0" } }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -539,6 +857,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -581,9 +911,115 @@ "optional": true } } + }, + "node_modules/vite-plugin-windicss": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.7.0.tgz", + "integrity": "sha512-1ps7hk6Pr9TqsW9Y+QXmJ9PMowVLjM0h32c+jh9vdQr5Jzyim3hHivR0rXSkDV9znIB9RkjRQD1znRbAMX0OcQ==", + "dev": true, + "dependencies": { + "@windicss/plugin-utils": "1.7.0", + "debug": "^4.3.3", + "kolorist": "^1.5.1", + "windicss": "^3.4.3" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.0.1" + } + }, + "node_modules/windicss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/windicss/-/windicss-3.4.3.tgz", + "integrity": "sha512-UnugThsvEgy8RsPm4/B5DYMCAqvZzD6yWU7Anh+f07t5RSJ8zvmAylGLbXrHPJEmCKzo2Mf+fOUvISH7IJqM3A==", + "dev": true, + "bin": { + "windicss": "cli/index.js" + }, + "engines": { + "node": ">= 12" + } } }, "dependencies": { + "@antfu/utils": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.4.0.tgz", + "integrity": "sha512-gqkpvjkgFUu+s3kP+Ly33OKpo5zvVY3FDFhv5BIb98SncS3KD6DNxPfNDjwHIoyXbz1leWo1j8DtRLZ1D2Jv+Q==", + "dev": true, + "requires": { + "@types/throttle-debounce": "^2.1.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/throttle-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", + "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==", + "dev": true + }, + "@windicss/config": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@windicss/config/-/config-1.7.0.tgz", + "integrity": "sha512-jP+SYEUMTcvEQexYAeaIGKWq3sE+yv0myyOCph7Glm/YZE2ZCK1GukI1oDG6fcVer121EQzCY4Rx11trb3oSZg==", + "dev": true, + "requires": { + "debug": "^4.3.3", + "jiti": "^1.12.9", + "windicss": "^3.4.3" + } + }, + "@windicss/plugin-utils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@windicss/plugin-utils/-/plugin-utils-1.7.0.tgz", + "integrity": "sha512-4zxTIhpGaia4FTxL/c20GQU2bK3bqToerdErvDzwLqWQECVGt7vTGFQd3e4XMpfR6Ujgk4/p7fCHv/F15R/pkA==", + "dev": true, + "requires": { + "@antfu/utils": "^0.4.0", + "@windicss/config": "1.7.0", + "debug": "^4.3.3", + "fast-glob": "^3.2.11", + "magic-string": "^0.25.7", + "micromatch": "^4.0.4", + "windicss": "^3.4.3" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, "codemirror": { "version": "5.65.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.1.tgz", @@ -596,6 +1032,15 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "esbuild": { "version": "0.14.21", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.21.tgz", @@ -756,6 +1201,37 @@ "dev": true, "optional": true }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -769,6 +1245,15 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -787,6 +1272,70 @@ "has": "^1.0.3" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jiti": { + "version": "1.12.15", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.12.15.tgz", + "integrity": "sha512-/+K89y6KJA2nISbWrlc/773XdpDgSQq/LdQ+ZZyw2jRxUNyquPtbsDCCCMRzzNORUgroUGc4nAXxJEnQvpViCA==", + "dev": true + }, + "kolorist": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.5.1.tgz", + "integrity": "sha512-lxpCM3HTvquGxKGzHeknB/sUjuVoUElLlfYnXZT73K8geR9jQbroGlSCFBax9/0mpGoD3kzcMLnOlGQPJJNyqQ==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "nanoid": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", @@ -805,6 +1354,12 @@ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, "postcss": { "version": "8.4.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", @@ -835,6 +1390,12 @@ "util-deprecate": "^1.0.2" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -846,6 +1407,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rollup": { "version": "2.67.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.67.2.tgz", @@ -855,18 +1422,42 @@ "fsevents": "~2.3.2" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -885,6 +1476,24 @@ "resolve": "^1.22.0", "rollup": "^2.59.0" } + }, + "vite-plugin-windicss": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vite-plugin-windicss/-/vite-plugin-windicss-1.7.0.tgz", + "integrity": "sha512-1ps7hk6Pr9TqsW9Y+QXmJ9PMowVLjM0h32c+jh9vdQr5Jzyim3hHivR0rXSkDV9znIB9RkjRQD1znRbAMX0OcQ==", + "dev": true, + "requires": { + "@windicss/plugin-utils": "1.7.0", + "debug": "^4.3.3", + "kolorist": "^1.5.1", + "windicss": "^3.4.3" + } + }, + "windicss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/windicss/-/windicss-3.4.3.tgz", + "integrity": "sha512-UnugThsvEgy8RsPm4/B5DYMCAqvZzD6yWU7Anh+f07t5RSJ8zvmAylGLbXrHPJEmCKzo2Mf+fOUvISH7IJqM3A==", + "dev": true } } } diff --git a/package.json b/package.json index af86a98..6d1d676 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,9 @@ "homepage": "https://github.com/codewars/codemirror-lambda-calculus#readme", "devDependencies": { "postcss-nesting": "^10.1.2", - "vite": "^2.8.1" + "vite": "^2.8.1", + "vite-plugin-windicss": "^1.7.0", + "windicss": "^3.4.3" }, "peerDependencies": { "codemirror": "5.x" diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..99e99f3 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,6 @@ +import { defineConfig } from "windicss/helpers"; +import formsPlugin from "windicss/plugin/forms"; + +export default defineConfig({ + preflight: false, +}); diff --git a/vite.config.js b/vite.config.js index ca275da..db45976 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,7 +1,10 @@ +import WindiCSS from "vite-plugin-windicss"; + import { defineConfig } from "vite"; import postcss from "./postcss.config.js"; export default defineConfig(({ mode }) => ({ - base: mode === "production" ? "/codemirror-lambda-calculus" : "", + base: mode === "production" ? "/codemirror-lambda-calculus/" : "", + plugins: [WindiCSS()], css: { postcss }, })); From f3a4eb7554105e1a5ce95aff9405b540baee6cb0 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Sat, 19 Feb 2022 12:47:55 +0100 Subject: [PATCH 02/22] Make colouring consistent --- lambdacalc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdacalc.js b/lambdacalc.js index 6a349e3..196c58a 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -6,7 +6,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { const BRACKETS = "bracket"; const LAMBDA = "keyword"; const DOT = LAMBDA; - const PREDEF = "variable"; + const PREDEF = "text"; const BOUND = "text"; const ARGS = "def"; const HOLE = "atom"; From 604cf3eeb58f604667e35857c6d6f2780fd19c57 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Sat, 19 Feb 2022 12:48:01 +0100 Subject: [PATCH 03/22] Add debug mode --- lambdacalc.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lambdacalc.js b/lambdacalc.js index 196c58a..d9ceda4 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -22,6 +22,11 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { const lamArg = /[a-zA-Z_][a-zA-Z0-9_\-']*|\./ const numconst = /\d+/ + function expectDefOrTerm(stream, state) { + return expectDef(stream, state) + || (state.debug ? null : expectTerm(stream, state)); + } + function expectDef(stream, state) { const name = (stream.match(defName)||[])[0]; state.f = expectAssign; @@ -61,6 +66,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { state.depth.pop(); state.bound.pop(); } + state.f = expectTerm; return BRACKETS; } @@ -75,7 +81,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { if (!res) return null; if (state.bound.some(v=>v.includes(res))) return BOUND; if (state.defined.includes(res)) return PREDEF; - return UNDEF; + return state.debug ? UNDEF : "text"; } function number(stream, state) { @@ -102,16 +108,18 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { return { startState: function () { return { - f: expectDef, + f: expectDefOrTerm, depth: [], defined: [], - bound: [[]] + bound: [[]], + debug: false }; }, copyState: function (s) { return { f: s.f, depth: [...s.depth], defined: [...s.defined], - bound: s.bound.map(v=>[...v]) + bound: s.bound.map(v=>[...v]), + debug: s.debug }; }, token: function(stream, state) { @@ -120,12 +128,14 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { return; } if (stream.peek() === '#') { + if (stream.match(/^#\s*debug\s*$/)) + state.debug = !state.debug; stream.skipToEnd(); return "comment" } if (stream.sol() && state.depth.length === 0) { state.bound = [[]]; - state.f = expectDef; + state.f = expectDefOrTerm; } return state.f(stream, state) || onFail(stream, state); }, From 9dec81aaf786a0df3905a2661d0a73a3933da932 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Sat, 19 Feb 2022 14:16:36 +0100 Subject: [PATCH 04/22] Make debug pragma stricter --- lambdacalc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdacalc.js b/lambdacalc.js index d9ceda4..5bcbaf6 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -128,7 +128,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { return; } if (stream.peek() === '#') { - if (stream.match(/^#\s*debug\s*$/)) + if (stream.match(/^#debug\s*$/)) state.debug = !state.debug; stream.skipToEnd(); return "comment" From 21624f2a48e4ec0372ae839609de6f9d4512a3ca Mon Sep 17 00:00:00 2001 From: Kacarott Date: Sat, 19 Feb 2022 14:24:37 +0100 Subject: [PATCH 05/22] Stricter whitespace --- lambdacalc.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lambdacalc.js b/lambdacalc.js index 5bcbaf6..4cfeba3 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -123,8 +123,9 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { }; }, token: function(stream, state) { - if (/\s/.test(stream.peek())) { - stream.eatSpace(); + if (stream.eat(/\t/)) return FAIL; + if (/[ \n]/.test(stream.peek())) { + stream.eatWhile(/[ \n]/); return; } if (stream.peek() === '#') { From ebcbc2d1c3e28a1fc3b707813e0e1b45a9ad2955 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Sat, 19 Feb 2022 14:36:47 +0100 Subject: [PATCH 06/22] Update example --- index.html | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 9fed43d..a4e1079 100644 --- a/index.html +++ b/index.html @@ -31,7 +31,7 @@

From b89d14fc5a03b9b76aa5bee4f5150ff5abc32501 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Sat, 19 Feb 2022 16:55:16 +0100 Subject: [PATCH 09/22] Fix typo --- index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 18d26c1..c54128c 100644 --- a/index.html +++ b/index.html @@ -50,7 +50,7 @@

(\ f x . f (x x)) # Unbound -some-func = \ local . true non-existant local +some-func = \ local . true non-existent local # Out of scope args other-func = \ x . const (\ scoped-arg . x ()) scoped-arg x @@ -62,7 +62,7 @@

(\ f x . f (x x)) # Unbound - Debug -some-func = \ local . true non-existant local +some-func = \ local . true non-existent local # Out of scope args - Debug other-func = \ x . const (\ scoped-arg . x ()) scoped-arg x From 1ccad772f485ceb4637b296cddd5cff86f7be0c7 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Wed, 23 Feb 2022 01:01:16 +0100 Subject: [PATCH 10/22] 0.2.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d12b441..e31df3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.1.0", + "version": "0.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.1.0", + "version": "0.2.0", "license": "MIT", "devDependencies": { "postcss-nesting": "^10.1.2", diff --git a/package.json b/package.json index 6d1d676..d60b3d9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.1.0", + "version": "0.2.0", "type": "module", "description": "Lambda Calculus mode for CodeMirror", "main": "lambdacalc.js", From 574af611c9b4098384c17b69017b2392f26e8dbf Mon Sep 17 00:00:00 2001 From: Kacarott Date: Fri, 25 Feb 2022 17:30:20 +0100 Subject: [PATCH 11/22] Fix and improve --- lambdacalc.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lambdacalc.js b/lambdacalc.js index 09b7f05..8f5bfce 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -14,6 +14,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { const EMPTY = "text"; const UNDEF = "error"; const REDEF = "variable-3"; + const SUPPRESS = "text"; const FAIL = "error"; const defName = /[a-zA-Z][a-zA-Z0-9_\-']*/ @@ -23,14 +24,14 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { const numconst = /\d+/ function expectDefOrTerm(stream, state) { - return expectDef(stream, state) - || (state.debug ? null : expectTerm(stream, state)); + if (stream.match(/.*=/, false)) return expectDef(stream, state); + else return expectTerm(stream, state); } function expectDef(stream, state) { const name = (stream.match(defName)||[])[0]; state.f = expectAssign; - if (!name || !(/[=\s]/.test(stream.peek()) || stream.eol())) return null; + if (!name || !(stream.match(/\s*=/, false))) return null; const res = []; if (state.defined.includes(name)) res.push(REDEF); state.defined.push(name); @@ -81,7 +82,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { if (!res) return null; if (state.bound.some(v=>v.includes(res))) return BOUND; if (state.defined.includes(res)) return PREDEF; - return state.debug ? UNDEF : "text"; + return UNDEF; } function number(stream, state) { @@ -103,12 +104,12 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { function onFail(stream, state) { stream.match(/[^\s]*/); - return FAIL + return FAIL ; } return { startState: function () { return { - f: expectDefOrTerm, + f: expectDef, depth: [], defined: [], bound: [[]], @@ -136,13 +137,15 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { } if (stream.sol() && state.depth.length === 0) { state.bound = [[]]; - state.f = expectDefOrTerm; + state.f = expectDef; } - return state.f(stream, state) || onFail(stream, state); + const res = state.f(stream, state) + || (state.debug ? null : expectDefOrTerm(stream, state)) + || onFail(stream, state); + return !state.debug && res == FAIL ? SUPPRESS : res ; }, indent: function(state, textAfter) { - console.log(state.depth); if (!state.depth.length) return 0; return state.depth[state.depth.length-1] + 2; }, From 320dae9220c336fc1949333a1db6be1580ac0686 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Fri, 25 Feb 2022 17:30:36 +0100 Subject: [PATCH 12/22] Update showcase code --- index.html | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index c54128c..3b8e469 100644 --- a/index.html +++ b/index.html @@ -40,15 +40,18 @@

# Multiple definition true = not false -# Invalid names -%value = () - # Invalid whitespace (tabs) whitespace = () -# Bare term +# Bare lambda (\ f x . f (x x)) +# Bare term +const f x + +# Symbols +< a b c > => < a a a > + # Unbound some-func = \ local . true non-existent local @@ -58,9 +61,18 @@

# Debug mode on #debug -# Bare term - Debug +# Invalid names - Debug +%value = () + +# Bare lambda - Debug (\ f x . f (x x)) +# Bare term - Debug +const f x + +# Symbols - Debug +< a b c > => < a a a > + # Unbound - Debug some-func = \ local . true non-existent local From bd1b86ff4902fbabc7a6c4653159ba556dd9b91b Mon Sep 17 00:00:00 2001 From: Kacarott Date: Fri, 25 Feb 2022 17:41:31 +0100 Subject: [PATCH 13/22] 0.3.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e31df3d..90887f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.2.0", + "version": "0.3.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.2.0", + "version": "0.3.0", "license": "MIT", "devDependencies": { "postcss-nesting": "^10.1.2", diff --git a/package.json b/package.json index d60b3d9..771acc1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.2.0", + "version": "0.3.0", "type": "module", "description": "Lambda Calculus mode for CodeMirror", "main": "lambdacalc.js", From 7f5d987ed4a41b3383e18220535079d35e85e807 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Fri, 25 Feb 2022 18:53:58 +0100 Subject: [PATCH 14/22] Fix #4 --- lambdacalc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdacalc.js b/lambdacalc.js index 8f5bfce..1b3352b 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -103,7 +103,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { } function onFail(stream, state) { - stream.match(/[^\s]*/); + stream.match(/[^\s#]*/); return FAIL ; } From 824ed100e6bc6864d60c8b909f867e654f179b79 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Fri, 25 Feb 2022 18:56:11 +0100 Subject: [PATCH 15/22] 0.3.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 90887f9..8609401 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.0", + "version": "0.3.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.0", + "version": "0.3.1", "license": "MIT", "devDependencies": { "postcss-nesting": "^10.1.2", diff --git a/package.json b/package.json index 771acc1..1af2a5e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "description": "Lambda Calculus mode for CodeMirror", "main": "lambdacalc.js", From e2c07bc0400bf11f495818afe93206334fa88c14 Mon Sep 17 00:00:00 2001 From: Kacarott Date: Wed, 4 May 2022 10:25:18 +0200 Subject: [PATCH 16/22] Fix #6 --- lambdacalc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lambdacalc.js b/lambdacalc.js index 1b3352b..ac6ab70 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -64,6 +64,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { state.bound.push([]); } else { + if (!(state.depth.length && state.bound.length)) return FAIL; state.depth.pop(); state.bound.pop(); } From 4ae33e236a9d1a38ba97330c15003495de48721f Mon Sep 17 00:00:00 2001 From: Kacarott Date: Wed, 4 May 2022 10:35:07 +0200 Subject: [PATCH 17/22] 0.3.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8609401..c7281c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.1", + "version": "0.3.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.1", + "version": "0.3.2", "license": "MIT", "devDependencies": { "postcss-nesting": "^10.1.2", diff --git a/package.json b/package.json index 1af2a5e..122cfbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.1", + "version": "0.3.2", "type": "module", "description": "Lambda Calculus mode for CodeMirror", "main": "lambdacalc.js", From e264c04f542a22ae89823409b2439b5e6a540ff7 Mon Sep 17 00:00:00 2001 From: JohanWiltink Date: Tue, 5 Jul 2022 16:21:37 +0200 Subject: [PATCH 18/22] Allow negative numbers in source --- lambdacalc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lambdacalc.js b/lambdacalc.js index ac6ab70..c7a39ac 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -21,7 +21,7 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { const assign = /=/ const brack = /\(|\)/ const lamArg = /[a-zA-Z_][a-zA-Z0-9_\-']*|\./ - const numconst = /\d+/ + const numconst = /-?\d+/ function expectDefOrTerm(stream, state) { if (stream.match(/.*=/, false)) return expectDef(stream, state); From e67e16225dd4575796dbc7d9f3652a233993c71d Mon Sep 17 00:00:00 2001 From: Kacarott Date: Tue, 5 Jul 2022 22:49:29 +0200 Subject: [PATCH 19/22] 0.3.3 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7281c0..babdfe8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.2", + "version": "0.3.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.2", + "version": "0.3.3", "license": "MIT", "devDependencies": { "postcss-nesting": "^10.1.2", diff --git a/package.json b/package.json index 122cfbd..d02a0c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.2", + "version": "0.3.3", "type": "module", "description": "Lambda Calculus mode for CodeMirror", "main": "lambdacalc.js", From 1d33d368f05dfc65deb2c87c4565d51c2cc8d103 Mon Sep 17 00:00:00 2001 From: JohanWiltink Date: Sun, 4 Feb 2024 03:56:00 +0100 Subject: [PATCH 20/22] Update index.html rename `eq` to `eq?`, to test trailing `?` --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 3b8e469..40b85af 100644 --- a/index.html +++ b/index.html @@ -116,7 +116,7 @@

chunk = \ a b xs . row-s a (colS b xs) append = \ as bs . null as bs (cons (head as) (append (tail as) bs)) concat = foldr append nil -eq = \ a b . is-z a (is-z b) (is-z b false (eq (pred a) (pred b))) +eq? = \ a b . is-z a (is-z b) (is-z b false (eq? (pred a) (pred b))) all = foldr (\ a b . a b false) true allf = \ f xs . all (map f xs) From 3ade405707a572a200678542ae56bfe3d46d1278 Mon Sep 17 00:00:00 2001 From: JohanWiltink Date: Sun, 4 Feb 2024 04:00:38 +0100 Subject: [PATCH 21/22] Update lambdacalc.js add optional `?` at end of identifier names --- lambdacalc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lambdacalc.js b/lambdacalc.js index c7a39ac..47c00fe 100644 --- a/lambdacalc.js +++ b/lambdacalc.js @@ -17,10 +17,10 @@ CodeMirror.defineMode("lambdacalc", function(_config, modeConfig) { const SUPPRESS = "text"; const FAIL = "error"; - const defName = /[a-zA-Z][a-zA-Z0-9_\-']*/ + const defName = /[a-zA-Z][-'\w]*\??/ const assign = /=/ const brack = /\(|\)/ - const lamArg = /[a-zA-Z_][a-zA-Z0-9_\-']*|\./ + const lamArg = /[_a-zA-Z][-'\w]*\??|\./ const numconst = /-?\d+/ function expectDefOrTerm(stream, state) { From f775521e8987335a03b5f3e75ee4424f44b129bb Mon Sep 17 00:00:00 2001 From: Keldan Chapman Date: Thu, 15 Feb 2024 21:52:04 +0100 Subject: [PATCH 22/22] Update version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index babdfe8..5f0a862 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.3", + "version": "0.3.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.3", + "version": "0.3.4", "license": "MIT", "devDependencies": { "postcss-nesting": "^10.1.2", diff --git a/package.json b/package.json index d02a0c8..b6463e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@codewars/codemirror-lambda-calculus", - "version": "0.3.3", + "version": "0.3.4", "type": "module", "description": "Lambda Calculus mode for CodeMirror", "main": "lambdacalc.js",