From 4757ed9453c0cfd8dd229e34ee3a64f74dfe0f3a Mon Sep 17 00:00:00 2001
From: Dan Brown <ssddanbrown@googlemail.com>
Date: Thu, 4 Aug 2022 13:33:51 +0100
Subject: [PATCH] Converted codemirror languges to new packages where available

Does increase bundle size massively though, Will need to think about
solutions for this.
---
 package-lock.json              | 217 +++++++++++++++++++++++++++++++++
 package.json                   |   7 ++
 resources/js/code/languages.js |  56 +++++----
 3 files changed, 253 insertions(+), 27 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 0eca777cb..a29be3324 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,11 +6,18 @@
     "": {
       "dependencies": {
         "@codemirror/commands": "^6.0.1",
+        "@codemirror/lang-cpp": "^6.0.1",
+        "@codemirror/lang-css": "^6.0.0",
         "@codemirror/lang-html": "^6.1.0",
+        "@codemirror/lang-java": "^6.0.0",
         "@codemirror/lang-javascript": "^6.0.2",
         "@codemirror/lang-json": "^6.0.0",
         "@codemirror/lang-markdown": "^6.0.1",
         "@codemirror/lang-php": "^6.0.0",
+        "@codemirror/lang-python": "^6.0.1",
+        "@codemirror/lang-rust": "^6.0.0",
+        "@codemirror/lang-sql": "^6.0.0",
+        "@codemirror/lang-xml": "^6.0.0",
         "@codemirror/language": "^6.2.1",
         "@codemirror/legacy-modes": "^6.1.0",
         "@codemirror/state": "^6.1.0",
@@ -60,6 +67,15 @@
         "@lezer/common": "^1.0.0"
       }
     },
+    "node_modules/@codemirror/lang-cpp": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-cpp/-/lang-cpp-6.0.1.tgz",
+      "integrity": "sha512-46p3ohfhjzkLWJ3VwvzX0aqlXh8UkEqX1xo2Eds9l6Ql3uDoxI2IZEjR9cgJaGOZTXCkDzQuQH7sfYAxMvzLjA==",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/cpp": "^1.0.0"
+      }
+    },
     "node_modules/@codemirror/lang-css": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.0.0.tgz",
@@ -85,6 +101,15 @@
         "@lezer/html": "^1.0.0"
       }
     },
+    "node_modules/@codemirror/lang-java": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-java/-/lang-java-6.0.0.tgz",
+      "integrity": "sha512-aeWq+ikUS6Eubk6RBbiMgxuBIT4Ih8Asb1qc2pSiMcstrwr4ODbazPXsBHbLBYg3aObvFyOm2bNQncbQJjZ3sQ==",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/java": "^1.0.0"
+      }
+    },
     "node_modules/@codemirror/lang-javascript": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.0.2.tgz",
@@ -133,6 +158,48 @@
         "@lezer/php": "^1.0.0"
       }
     },
+    "node_modules/@codemirror/lang-python": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.0.1.tgz",
+      "integrity": "sha512-w2jTSY+LgXnK7iIBLgMxk6xtJhZHkcxcGGveuq9zYmncURmOTFXKnDvBaBClNIHKgjkHXZqGK8ZduCMK23hZPA==",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/python": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/lang-rust": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-rust/-/lang-rust-6.0.0.tgz",
+      "integrity": "sha512-VQql3Qk1BwoXb3SUkeWll/EEwhsgQWc1bpia7CFqqp2PhQBb5A6r4Vj2JCkU/nE6A7TDPSGHTOoqJSG5s/VXtQ==",
+      "dependencies": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/rust": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/lang-sql": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-sql/-/lang-sql-6.0.0.tgz",
+      "integrity": "sha512-mq4NwTDbbo7QZktfgPsS+ms0FmAceH4WM2jLbgf+N28FoKUy0JzGe3XJymgnTewXnNUwujKBxArQzibxSDdVyQ==",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@codemirror/lang-xml": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.0.0.tgz",
+      "integrity": "sha512-M/HLWxIiP956xGjtrxkeHkCmDGVQGKu782x8pOH5CLJIMkWtiB1DWfDoDHqpFjdEE9dkfcqPWvYfVi6GbhuXEg==",
+      "dependencies": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@lezer/common": "^1.0.0",
+        "@lezer/xml": "^1.0.0"
+      }
+    },
     "node_modules/@codemirror/language": {
       "version": "6.2.1",
       "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.2.1.tgz",
@@ -194,6 +261,15 @@
       "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.0.tgz",
       "integrity": "sha512-ohydQe+Hb+w4oMDvXzs8uuJd2NoA3D8YDcLiuDsLqH+yflDTPEpgCsWI3/6rH5C3BAedtH1/R51dxENldQceEA=="
     },
+    "node_modules/@lezer/cpp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.0.0.tgz",
+      "integrity": "sha512-Klk3/AIEKoptmm6cNm7xTulNXjdTKkD+hVOEcz/NeRg8tIestP5hsGHJeFDR/XtyDTxsjoPjKZRIGohht7zbKw==",
+      "dependencies": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
     "node_modules/@lezer/css": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.0.0.tgz",
@@ -221,6 +297,15 @@
         "@lezer/lr": "^1.0.0"
       }
     },
+    "node_modules/@lezer/java": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/java/-/java-1.0.0.tgz",
+      "integrity": "sha512-z2EA0JHq2WoiKfQy5uOOd4t17PJtq8guh58gPkSzOnNcQ7DNbkrU+Axak+jL8+Noinwyz2tRNOseQFj+Tg+P0A==",
+      "dependencies": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
     "node_modules/@lezer/javascript": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.0.2.tgz",
@@ -265,6 +350,33 @@
         "@lezer/lr": "^1.0.0"
       }
     },
+    "node_modules/@lezer/python": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.0.tgz",
+      "integrity": "sha512-FVPp2usfj3zZuc+2RidXAY94WAcsHQ3dbKDbXuZgoAwUungAcXwd3EWXiWQvwNqbae+ek51bWi8dwbiQqweWCg==",
+      "dependencies": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/rust": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.0.tgz",
+      "integrity": "sha512-IpGAxIjNxYmX9ra6GfQTSPegdCAWNeq23WNmrsMMQI7YNSvKtYxO4TX5rgZUmbhEucWn0KTBMeDEPXg99YKtTA==",
+      "dependencies": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "node_modules/@lezer/xml": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.0.tgz",
+      "integrity": "sha512-73iI9UK8iqSvWtLlOEl/g+50ivwQn8Ge6foHVN66AXUS1RccFnAoc7BYU8b3c8/rP6dfCOGqAGaWLxBzhj60MA==",
+      "dependencies": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
     "node_modules/ansi-regex": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
@@ -2186,6 +2298,15 @@
         "@lezer/common": "^1.0.0"
       }
     },
+    "@codemirror/lang-cpp": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-cpp/-/lang-cpp-6.0.1.tgz",
+      "integrity": "sha512-46p3ohfhjzkLWJ3VwvzX0aqlXh8UkEqX1xo2Eds9l6Ql3uDoxI2IZEjR9cgJaGOZTXCkDzQuQH7sfYAxMvzLjA==",
+      "requires": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/cpp": "^1.0.0"
+      }
+    },
     "@codemirror/lang-css": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.0.0.tgz",
@@ -2211,6 +2332,15 @@
         "@lezer/html": "^1.0.0"
       }
     },
+    "@codemirror/lang-java": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-java/-/lang-java-6.0.0.tgz",
+      "integrity": "sha512-aeWq+ikUS6Eubk6RBbiMgxuBIT4Ih8Asb1qc2pSiMcstrwr4ODbazPXsBHbLBYg3aObvFyOm2bNQncbQJjZ3sQ==",
+      "requires": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/java": "^1.0.0"
+      }
+    },
     "@codemirror/lang-javascript": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.0.2.tgz",
@@ -2259,6 +2389,48 @@
         "@lezer/php": "^1.0.0"
       }
     },
+    "@codemirror/lang-python": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.0.1.tgz",
+      "integrity": "sha512-w2jTSY+LgXnK7iIBLgMxk6xtJhZHkcxcGGveuq9zYmncURmOTFXKnDvBaBClNIHKgjkHXZqGK8ZduCMK23hZPA==",
+      "requires": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/python": "^1.0.0"
+      }
+    },
+    "@codemirror/lang-rust": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-rust/-/lang-rust-6.0.0.tgz",
+      "integrity": "sha512-VQql3Qk1BwoXb3SUkeWll/EEwhsgQWc1bpia7CFqqp2PhQBb5A6r4Vj2JCkU/nE6A7TDPSGHTOoqJSG5s/VXtQ==",
+      "requires": {
+        "@codemirror/language": "^6.0.0",
+        "@lezer/rust": "^1.0.0"
+      }
+    },
+    "@codemirror/lang-sql": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-sql/-/lang-sql-6.0.0.tgz",
+      "integrity": "sha512-mq4NwTDbbo7QZktfgPsS+ms0FmAceH4WM2jLbgf+N28FoKUy0JzGe3XJymgnTewXnNUwujKBxArQzibxSDdVyQ==",
+      "requires": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "@codemirror/lang-xml": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.0.0.tgz",
+      "integrity": "sha512-M/HLWxIiP956xGjtrxkeHkCmDGVQGKu782x8pOH5CLJIMkWtiB1DWfDoDHqpFjdEE9dkfcqPWvYfVi6GbhuXEg==",
+      "requires": {
+        "@codemirror/autocomplete": "^6.0.0",
+        "@codemirror/language": "^6.0.0",
+        "@codemirror/state": "^6.0.0",
+        "@lezer/common": "^1.0.0",
+        "@lezer/xml": "^1.0.0"
+      }
+    },
     "@codemirror/language": {
       "version": "6.2.1",
       "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.2.1.tgz",
@@ -2320,6 +2492,15 @@
       "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.0.tgz",
       "integrity": "sha512-ohydQe+Hb+w4oMDvXzs8uuJd2NoA3D8YDcLiuDsLqH+yflDTPEpgCsWI3/6rH5C3BAedtH1/R51dxENldQceEA=="
     },
+    "@lezer/cpp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/cpp/-/cpp-1.0.0.tgz",
+      "integrity": "sha512-Klk3/AIEKoptmm6cNm7xTulNXjdTKkD+hVOEcz/NeRg8tIestP5hsGHJeFDR/XtyDTxsjoPjKZRIGohht7zbKw==",
+      "requires": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
     "@lezer/css": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.0.0.tgz",
@@ -2347,6 +2528,15 @@
         "@lezer/lr": "^1.0.0"
       }
     },
+    "@lezer/java": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/java/-/java-1.0.0.tgz",
+      "integrity": "sha512-z2EA0JHq2WoiKfQy5uOOd4t17PJtq8guh58gPkSzOnNcQ7DNbkrU+Axak+jL8+Noinwyz2tRNOseQFj+Tg+P0A==",
+      "requires": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
     "@lezer/javascript": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.0.2.tgz",
@@ -2391,6 +2581,33 @@
         "@lezer/lr": "^1.0.0"
       }
     },
+    "@lezer/python": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.0.tgz",
+      "integrity": "sha512-FVPp2usfj3zZuc+2RidXAY94WAcsHQ3dbKDbXuZgoAwUungAcXwd3EWXiWQvwNqbae+ek51bWi8dwbiQqweWCg==",
+      "requires": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "@lezer/rust": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/rust/-/rust-1.0.0.tgz",
+      "integrity": "sha512-IpGAxIjNxYmX9ra6GfQTSPegdCAWNeq23WNmrsMMQI7YNSvKtYxO4TX5rgZUmbhEucWn0KTBMeDEPXg99YKtTA==",
+      "requires": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
+    "@lezer/xml": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.0.tgz",
+      "integrity": "sha512-73iI9UK8iqSvWtLlOEl/g+50ivwQn8Ge6foHVN66AXUS1RccFnAoc7BYU8b3c8/rP6dfCOGqAGaWLxBzhj60MA==",
+      "requires": {
+        "@lezer/highlight": "^1.0.0",
+        "@lezer/lr": "^1.0.0"
+      }
+    },
     "ansi-regex": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
diff --git a/package.json b/package.json
index 4d2b70247..11e69962e 100644
--- a/package.json
+++ b/package.json
@@ -24,11 +24,18 @@
   },
   "dependencies": {
     "@codemirror/commands": "^6.0.1",
+    "@codemirror/lang-cpp": "^6.0.1",
+    "@codemirror/lang-css": "^6.0.0",
     "@codemirror/lang-html": "^6.1.0",
+    "@codemirror/lang-java": "^6.0.0",
     "@codemirror/lang-javascript": "^6.0.2",
     "@codemirror/lang-json": "^6.0.0",
     "@codemirror/lang-markdown": "^6.0.1",
     "@codemirror/lang-php": "^6.0.0",
+    "@codemirror/lang-python": "^6.0.1",
+    "@codemirror/lang-rust": "^6.0.0",
+    "@codemirror/lang-sql": "^6.0.0",
+    "@codemirror/lang-xml": "^6.0.0",
     "@codemirror/language": "^6.2.1",
     "@codemirror/legacy-modes": "^6.1.0",
     "@codemirror/state": "^6.1.0",
diff --git a/resources/js/code/languages.js b/resources/js/code/languages.js
index 4b04bdb14..b43b1c397 100644
--- a/resources/js/code/languages.js
+++ b/resources/js/code/languages.js
@@ -1,12 +1,14 @@
 import {StreamLanguage} from "@codemirror/language"
 
-import {css} from '@codemirror/legacy-modes/mode/css';
-import {c, java, cpp, csharp, kotlin, scala} from '@codemirror/legacy-modes/mode/clike';
+import {css} from '@codemirror/lang-css';
+import {c, csharp, kotlin, scala} from '@codemirror/legacy-modes/mode/clike';
+import {cpp} from '@codemirror/lang-cpp';
 import {diff} from '@codemirror/legacy-modes/mode/diff';
 import {fortran} from '@codemirror/legacy-modes/mode/fortran';
 import {go} from '@codemirror/legacy-modes/mode/go';
 import {haskell} from '@codemirror/legacy-modes/mode/haskell';
 import {html} from '@codemirror/lang-html';
+import {java} from '@codemirror/lang-java';
 import {javascript} from '@codemirror/lang-javascript';
 import {json} from '@codemirror/lang-json';
 import {julia} from '@codemirror/legacy-modes/mode/julia';
@@ -19,16 +21,16 @@ import {pascal} from '@codemirror/legacy-modes/mode/pascal';
 import {php} from '@codemirror/lang-php';
 import {powerShell} from '@codemirror/legacy-modes/mode/powershell';
 import {properties} from '@codemirror/legacy-modes/mode/properties';
-import {python} from '@codemirror/legacy-modes/mode/python';
+import {python} from '@codemirror/lang-python';
 import {ruby} from '@codemirror/legacy-modes/mode/ruby';
-import {rust} from '@codemirror/legacy-modes/mode/rust';
+import {rust} from '@codemirror/lang-rust';
 import {shell} from '@codemirror/legacy-modes/mode/shell';
-import {sql} from '@codemirror/legacy-modes/mode/sql';
+import {sql} from '@codemirror/lang-sql';
 import {stex} from '@codemirror/legacy-modes/mode/stex';
 import {toml} from '@codemirror/legacy-modes/mode/toml';
 import {vb} from '@codemirror/legacy-modes/mode/vb';
 import {vbScript} from '@codemirror/legacy-modes/mode/vbscript';
-import {xml} from '@codemirror/legacy-modes/mode/xml';
+import {xml} from '@codemirror/lang-xml';
 import {yaml} from '@codemirror/legacy-modes/mode/yaml';
 
 
@@ -37,12 +39,9 @@ import {yaml} from '@codemirror/legacy-modes/mode/yaml';
 // The function option is used in the event the exact mode could be dynamic depending on the code.
 const modeMap = {
     bash: () => StreamLanguage.define(shell),
-    css: () => StreamLanguage.define(css),
     c: () => StreamLanguage.define(c),
-    java: () => StreamLanguage.define(java),
-    scala: () => StreamLanguage.define(scala),
-    kotlin: () => StreamLanguage.define(kotlin),
-    'c++': () => StreamLanguage.define(cpp),
+    css: () => css(),
+    'c++': () => cpp(),
     'c#': () => StreamLanguage.define(csharp),
     csharp: () => StreamLanguage.define(csharp),
     diff: () => StreamLanguage.define(diff),
@@ -55,47 +54,50 @@ const modeMap = {
     hs: () => StreamLanguage.define(haskell),
     html: () => html(),
     ini: () => StreamLanguage.define(properties),
+    java: () => java(),
     javascript: () => javascript(),
     json: () => json(),
     js: () => javascript(),
     jl: () => StreamLanguage.define(julia),
     julia: () => StreamLanguage.define(julia),
+    kotlin: () => StreamLanguage.define(kotlin),
     latex: () => StreamLanguage.define(stex),
     lua: () => StreamLanguage.define(lua),
-    md: () => StreamLanguage.define(markdown),
-    mdown: () => StreamLanguage.define(markdown),
-    markdown: () => StreamLanguage.define(markdown),
+    markdown: () => markdown(),
+    md: () => markdown(),
+    mdown: () => markdown(),
     ml: () => StreamLanguage.define(sml),
     nginx: () => StreamLanguage.define(nginx),
-    perl: () => StreamLanguage.define(perl),
-    pl: () => StreamLanguage.define(perl),
-    powershell: () => StreamLanguage.define(powerShell),
-    properties: () => StreamLanguage.define(properties),
-    ocaml: () => StreamLanguage.define(oCaml),
-    pascal: () => StreamLanguage.define(pascal),
     pas: () => StreamLanguage.define(pascal),
+    pascal: () => StreamLanguage.define(pascal),
+    perl: () => StreamLanguage.define(perl),
     php: (code) => {
         const hasTags = code.includes('<?php');
         return php({plain: !hasTags});
     },
-    py: () => StreamLanguage.define(python),
-    python: () => StreamLanguage.define(python),
-    ruby: () => StreamLanguage.define(ruby),
-    rust: () => StreamLanguage.define(rust),
+    pl: () => StreamLanguage.define(perl),
+    powershell: () => StreamLanguage.define(powerShell),
+    properties: () => StreamLanguage.define(properties),
+    ocaml: () => StreamLanguage.define(oCaml),
+    py: () => python(),
+    python: () => python(),
     rb: () => StreamLanguage.define(ruby),
-    rs: () => StreamLanguage.define(rust),
+    rs: () => rust(),
+    ruby: () => StreamLanguage.define(ruby),
+    rust: () => rust(),
+    scala: () => StreamLanguage.define(scala),
     shell: () => StreamLanguage.define(shell),
     sh: () => StreamLanguage.define(shell),
     stext: () => StreamLanguage.define(stex),
     toml: () => StreamLanguage.define(toml),
     ts: () => javascript({typescript: true}),
     typescript: () => javascript({typescript: true}),
-    sql: () => StreamLanguage.define(sql),
+    sql: () => sql(),
     vbs: () => StreamLanguage.define(vbScript),
     vbscript: () => StreamLanguage.define(vbScript),
     'vb.net': () => StreamLanguage.define(vb),
     vbnet: () => StreamLanguage.define(vb),
-    xml: () => StreamLanguage.define(xml),
+    xml: () => xml(),
     yaml: () => StreamLanguage.define(yaml),
     yml: () => StreamLanguage.define(yaml),
 };