sourcebot/packages/web/src/lib/codemirrorLanguage.ts

231 lines
11 KiB
TypeScript
Raw Normal View History

import { StreamLanguage, LanguageSupport } from "@codemirror/language";
// CodeMirror 6 languages
import { brainfuck } from "codemirror-lang-brainfuck"; // 3rd party
import { css } from "@codemirror/lang-css";
import { cpp } from "@codemirror/lang-cpp";
import { dot } from "@viz-js/lang-dot"; // 3rd party
import { csharp } from "@replit/codemirror-lang-csharp"; // 3rd party
import { elixir } from "codemirror-lang-elixir"; // 3rd party
import { go } from "@codemirror/lang-go";
import { graphqlLanguageSupport } from "cm6-graphql"; // 3rd party
import { handlebarsLanguage } from "@xiechao/codemirror-lang-handlebars"
import { hcl } from "codemirror-lang-hcl"; // 3rd party
import { html } from "@codemirror/lang-html";
import { j } from "codemirror-lang-j"; // 3rd party
import { java } from "@codemirror/lang-java";
import { javascript } from "@codemirror/lang-javascript";
import { jq } from "codemirror-lang-jq"; // 3rd party
import { json } from "@codemirror/lang-json";
import { jsonc } from "@shopify/lang-jsonc"; // 3rd party
import { less } from "@codemirror/lang-less";
import { liquid } from "@codemirror/lang-liquid";
import { makefile } from "codemirror-lang-makefile"; // 3rd party
import { markdown } from "@codemirror/lang-markdown";
import { mermaid } from "codemirror-lang-mermaid"; // 3rd party
import { nix } from "@replit/codemirror-lang-nix" // 3rd party
// import { perl } from "codemirror-lang-perl"; // 3rd party (not working?)
import { php } from "@codemirror/lang-php";
import { prolog } from "codemirror-lang-prolog"; // 3rd party (comments are broken)
import { python } from "@codemirror/lang-python";
// import { r } from "codemirror-lang-r" // 3rd party (not working?)
import { rust } from "@codemirror/lang-rust";
import { sass } from "@codemirror/lang-sass";
import { solidity } from "@replit/codemirror-lang-solidity"; // 3rd party
import { sparql } from "codemirror-lang-sparql"; // 3rd party
import { spreadsheet } from "codemirror-lang-spreadsheet"; // 3rd party
import { sql } from "@codemirror/lang-sql";
import { svelte } from "@replit/codemirror-lang-svelte"; // 3rd party
import { twig } from "@ssddanbrown/codemirror-lang-twig"; // 3rd party
import { vue } from "@codemirror/lang-vue";
import { wast } from "@codemirror/lang-wast";
import { wgsl } from "@iizukak/codemirror-lang-wgsl"; // 3rd party
import { xml } from "@codemirror/lang-xml"
import { yaml } from "@codemirror/lang-yaml";
import { zig } from "codemirror-lang-zig"; // 3rd party
// Legacy CodeMirror 5 modes
// https://codemirror.net/5/mode/
import { apl } from "@codemirror/legacy-modes/mode/apl";
// import { asn1 } from "@codemirror/legacy-modes/mode/asn1"; // this seems to be broken
import { ceylon } from "@codemirror/legacy-modes/mode/clike";
import { clojure } from "@codemirror/legacy-modes/mode/clojure";
import { cmake } from "@codemirror/legacy-modes/mode/cmake";
import { cobol } from "@codemirror/legacy-modes/mode/cobol";
import { coffeeScript } from "@codemirror/legacy-modes/mode/coffeescript";
import { commonLisp } from "@codemirror/legacy-modes/mode/commonlisp";
import { crystal } from "@codemirror/legacy-modes/mode/crystal";
import { cypher } from "@codemirror/legacy-modes/mode/cypher";
import { d } from "@codemirror/legacy-modes/mode/d";
import { dart } from "@codemirror/legacy-modes/mode/clike";
// import { django } from "@codemirror/legacy-modes/mode/django"; // not present anymore
import { dockerFile } from "@codemirror/legacy-modes/mode/dockerfile";
import { diff } from "@codemirror/legacy-modes/mode/diff";
import { elm } from "@codemirror/legacy-modes/mode/elm";
import { erlang } from "@codemirror/legacy-modes/mode/erlang";
import { fortran } from "@codemirror/legacy-modes/mode/fortran";
import { gherkin } from "@codemirror/legacy-modes/mode/gherkin";
import { groovy } from "@codemirror/legacy-modes/mode/groovy";
import { haskell } from "@codemirror/legacy-modes/mode/haskell";
import { idl } from "@codemirror/legacy-modes/mode/idl";
import { jinja2 } from "@codemirror/legacy-modes/mode/jinja2";
import { julia } from "@codemirror/legacy-modes/mode/julia";
import { kotlin } from "@codemirror/legacy-modes/mode/clike";
import { liveScript } from "@codemirror/legacy-modes/mode/livescript";
import { lua } from "@codemirror/legacy-modes/mode/lua";
import { nesC } from "@codemirror/legacy-modes/mode/clike";
import { nginx } from "@codemirror/legacy-modes/mode/nginx";
import { objectiveC } from "@codemirror/legacy-modes/mode/clike";
import { objectiveCpp } from "@codemirror/legacy-modes/mode/clike";
import { octave } from "@codemirror/legacy-modes/mode/octave";
import { pascal } from "@codemirror/legacy-modes/mode/pascal";
import { perl } from "@codemirror/legacy-modes/mode/perl";
import { powerShell } from "@codemirror/legacy-modes/mode/powershell";
import { protobuf } from "@codemirror/legacy-modes/mode/protobuf";
import { pug } from "@codemirror/legacy-modes/mode/pug";
import { puppet } from "@codemirror/legacy-modes/mode/puppet";
import { r } from "@codemirror/legacy-modes/mode/r";
import { rpmSpec } from "@codemirror/legacy-modes/mode/rpm";
import { ruby } from "@codemirror/legacy-modes/mode/ruby";
import { scala } from "@codemirror/legacy-modes/mode/clike";
import { scheme } from "@codemirror/legacy-modes/mode/scheme";
import { shader } from "@codemirror/legacy-modes/mode/clike";
import { shell } from "@codemirror/legacy-modes/mode/shell";
import { squirrel } from "@codemirror/legacy-modes/mode/clike";
import { swift } from "@codemirror/legacy-modes/mode/swift";
import { tcl } from "@codemirror/legacy-modes/mode/tcl";
import { textile } from "@codemirror/legacy-modes/mode/textile";
import { stex } from "@codemirror/legacy-modes/mode/stex";
import { toml } from "@codemirror/legacy-modes/mode/toml";
import { turtle } from "@codemirror/legacy-modes/mode/turtle";
// import { twig } from "@codemirror/legacy-modes/mode/twig"; // not present anymore
import { vb } from "@codemirror/legacy-modes/mode/vb";
import { vbScript } from "@codemirror/legacy-modes/mode/vbscript";
import { velocity } from "@codemirror/legacy-modes/mode/velocity";
import { verilog } from "@codemirror/legacy-modes/mode/verilog";
import { vhdl } from "@codemirror/legacy-modes/mode/vhdl";
// import { wast } from "@codemirror/legacy-modes/mode/wast"; // available in CodeMirror 6
import { webIDL } from "@codemirror/legacy-modes/mode/webidl";
import { xQuery } from "@codemirror/legacy-modes/mode/xquery";
import { languageMetadataMap } from "@/lib/languageMetadata";
export type CodeMirrorLanguageKey = keyof typeof codemirrorLanguageMap;
export const getCodemirrorLanguage = (linguistLanguage: string): StreamLanguage<unknown> | LanguageSupport | null => {
if (languageMetadataMap[linguistLanguage]?.codemirrorLanguage) {
const codemirrorLanguage = languageMetadataMap[linguistLanguage].codemirrorLanguage;
if (codemirrorLanguageMap[codemirrorLanguage]) {
return codemirrorLanguageMap[codemirrorLanguage];
}
}
return null;
}
export const codemirrorLanguageMap = {
// CodeMirror 6 languages
"brainfuck": brainfuck(),
"css": css(),
"c": cpp(),
"c#": csharp(),
"dot": dot(),
"elixir": elixir(),
"go": go(),
"graphql": graphqlLanguageSupport(),
"handlebars": new LanguageSupport(handlebarsLanguage),
"hcl": hcl(),
"html": html(),
"j": j(),
"java": java(),
"jsx": javascript({ jsx: true, typescript: false }),
"jq": jq(),
"json": json(),
"jsonc": jsonc(),
"less": less(),
"liquid": liquid(),
"makefile": makefile(),
"markdown": markdown(),
"mermaid": mermaid(), // not recognized by linguist/enry
"nix": nix(),
// "perl": perl(), // not working - use codemirror 5 mode
"php": php(),
"prolog": prolog(),
"python": python(),
// "r": r(), // not working - use codemirror 5 mode
"rust": rust(),
"sass": sass(),
"solidity": solidity,
"sparql": sparql(),
"spreadsheet": spreadsheet(),
"sql": sql(),
"svelte": svelte(),
"tsx": javascript({ jsx: true, typescript: true }),
"twig": twig(),
"typescript": javascript({ jsx: false, typescript: true }),
"vue": vue(),
"wast": wast(),
"wgsl": wgsl(),
"xml": xml(),
"yaml": yaml(),
"zig": zig(),
// Legacy CodeMirror 5 modes
"apl": StreamLanguage.define(apl),
"ceylon": StreamLanguage.define(ceylon),
"clojure": StreamLanguage.define(clojure),
"cmake": StreamLanguage.define(cmake),
"cobol": StreamLanguage.define(cobol),
"coffeescript": StreamLanguage.define(coffeeScript),
"common lisp": StreamLanguage.define(commonLisp),
"crystal": StreamLanguage.define(crystal),
"cypher": StreamLanguage.define(cypher),
"d": StreamLanguage.define(d),
"dart": StreamLanguage.define(dart),
"dockerfile": StreamLanguage.define(dockerFile),
"diff": StreamLanguage.define(diff),
"elm": StreamLanguage.define(elm),
"erlang": StreamLanguage.define(erlang),
"fortran": StreamLanguage.define(fortran),
"gherkin": StreamLanguage.define(gherkin),
"groovy": StreamLanguage.define(groovy),
"haskell": StreamLanguage.define(haskell),
"idl": StreamLanguage.define(idl),
"jinja2": StreamLanguage.define(jinja2),
"julia": StreamLanguage.define(julia),
"kotlin": StreamLanguage.define(kotlin),
"livescript": StreamLanguage.define(liveScript),
"lua": StreamLanguage.define(lua),
"nesc": StreamLanguage.define(nesC),
"nginx": StreamLanguage.define(nginx),
"objective-c": StreamLanguage.define(objectiveC),
"objective-c++": StreamLanguage.define(objectiveCpp),
"octave": StreamLanguage.define(octave),
"pascal": StreamLanguage.define(pascal),
"perl": StreamLanguage.define(perl),
"powershell": StreamLanguage.define(powerShell),
"protobuf": StreamLanguage.define(protobuf),
"pug": StreamLanguage.define(pug),
"puppet": StreamLanguage.define(puppet),
"r": StreamLanguage.define(r),
"rpm spec": StreamLanguage.define(rpmSpec),
"ruby": StreamLanguage.define(ruby),
"scala": StreamLanguage.define(scala),
"scheme": StreamLanguage.define(scheme),
"shader": StreamLanguage.define(shader),
"shell": StreamLanguage.define(shell),
"squirrel": StreamLanguage.define(squirrel),
"swift": StreamLanguage.define(swift),
"tcl": StreamLanguage.define(tcl),
"textile": StreamLanguage.define(textile),
"stex": StreamLanguage.define(stex),
"toml": StreamLanguage.define(toml),
"turtle": StreamLanguage.define(turtle),
"vb": StreamLanguage.define(vb),
"vbscript": StreamLanguage.define(vbScript),
"velocity": StreamLanguage.define(velocity),
"verilog": StreamLanguage.define(verilog),
"vhdl": StreamLanguage.define(vhdl),
// "wast": StreamLanguage.define(wast), // available in CodeMirror 6
"webidl": StreamLanguage.define(webIDL),
"xquery": StreamLanguage.define(xQuery),
};