mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-11-02 10:10:28 +08:00
It was a copy pasta function from `radicle-explorer` that if we need to highlight files by line in the future e.g. changesets we should do it better than this.
125 lines
3.8 KiB
TypeScript
125 lines
3.8 KiB
TypeScript
import type { Root } from "hast";
|
|
|
|
import onigurumaWASMUrl from "vscode-oniguruma/release/onig.wasm?url";
|
|
import sourceAsciiDoc from "@wooorm/starry-night/text.html.asciidoc";
|
|
import sourceDockerfile from "@wooorm/starry-night/source.dockerfile";
|
|
import sourceErlang from "@wooorm/starry-night/source.erlang";
|
|
import sourceSolidity from "@wooorm/starry-night/source.solidity";
|
|
import sourceSvelte from "@wooorm/starry-night/source.svelte";
|
|
import sourceSass from "@wooorm/starry-night/source.sass";
|
|
import sourceToml from "@wooorm/starry-night/source.toml";
|
|
import sourceTsx from "@wooorm/starry-night/source.tsx";
|
|
import sourceNix from "@wooorm/starry-night/source.nix";
|
|
import sourceGitconfig from "@wooorm/starry-night/source.gitconfig";
|
|
import sourceGitignore from "@wooorm/starry-night/source.gitignore";
|
|
import sourceGitrevlist from "@wooorm/starry-night/source.git-revlist";
|
|
import sourceGitattributes from "@wooorm/starry-night/source.gitattributes";
|
|
import sourceJson from "@wooorm/starry-night/source.json";
|
|
import sourceNpmrc from "@wooorm/starry-night/source.ini.npmrc";
|
|
import sourceGradle from "@wooorm/starry-night/source.groovy.gradle";
|
|
import sourceBatchfile from "@wooorm/starry-night/source.batchfile";
|
|
import sourceEditorconfig from "@wooorm/starry-night/source.editorconfig";
|
|
import sourceHaproxyConfig from "@wooorm/starry-night/source.haproxy-config";
|
|
import sourceDotenv from "@wooorm/starry-night/source.dotenv";
|
|
import sourceZig from "@wooorm/starry-night/source.zig";
|
|
import textHtmlVue from "@wooorm/starry-night/text.html.vue";
|
|
import textHtmlDjango from "@wooorm/starry-night/text.html.django";
|
|
import textRobotsTxt from "@wooorm/starry-night/text.robots-txt";
|
|
import textZoneFile from "@wooorm/starry-night/text.zone_file";
|
|
import etc from "@wooorm/starry-night/etc";
|
|
import goMod from "@wooorm/starry-night/go.mod";
|
|
import goSum from "@wooorm/starry-night/go.sum";
|
|
|
|
import { createStarryNight, common, type Grammar } from "@wooorm/starry-night";
|
|
|
|
export { type Root };
|
|
|
|
export const grammars = [
|
|
...common,
|
|
sourceAsciiDoc,
|
|
sourceToml,
|
|
sourceErlang,
|
|
sourceSolidity,
|
|
sourceSvelte,
|
|
sourceSass,
|
|
sourceTsx,
|
|
sourceDockerfile,
|
|
sourceNix,
|
|
sourceGitconfig,
|
|
sourceGitignore,
|
|
sourceGitrevlist,
|
|
sourceGitattributes,
|
|
sourceNpmrc,
|
|
sourceGradle,
|
|
sourceBatchfile,
|
|
sourceEditorconfig,
|
|
sourceHaproxyConfig,
|
|
sourceDotenv,
|
|
sourceZig,
|
|
textHtmlVue,
|
|
textHtmlDjango,
|
|
textRobotsTxt,
|
|
textZoneFile,
|
|
etc,
|
|
goMod,
|
|
goSum,
|
|
{
|
|
extensions: [".hintrc"],
|
|
names: ["json"],
|
|
patterns: [sourceJson],
|
|
scopeName: "source.json",
|
|
},
|
|
{
|
|
extensions: [
|
|
".npmignore",
|
|
".eslintignore",
|
|
".dockerignore",
|
|
".nuxtignore",
|
|
".vscodeignore",
|
|
],
|
|
names: ["ignore"],
|
|
patterns: [sourceGitignore],
|
|
scopeName: "source.gitignore",
|
|
},
|
|
{
|
|
extensions: [".sample", ".example", ".template"],
|
|
names: [".env.sample", ".env.example", ".env.template"],
|
|
patterns: [sourceDotenv],
|
|
scopeName: "source.dotenv",
|
|
},
|
|
{
|
|
extensions: [".mod"],
|
|
names: ["go.mod"],
|
|
patterns: [goMod],
|
|
scopeName: "go.mode",
|
|
},
|
|
{
|
|
extensions: [".sum"],
|
|
names: ["go.sum"],
|
|
patterns: [goSum],
|
|
scopeName: "go.sum",
|
|
},
|
|
// A grammar that doesn't do any parsing, but needed for files without a known filetype.
|
|
{
|
|
extensions: [""],
|
|
names: ["raw-format"],
|
|
patterns: [],
|
|
scopeName: "text.raw",
|
|
},
|
|
] satisfies Grammar[];
|
|
|
|
let starryNight: Awaited<ReturnType<typeof createStarryNight>>;
|
|
|
|
export async function highlight(
|
|
content: string,
|
|
grammar: string,
|
|
): Promise<Root> {
|
|
if (starryNight === undefined) {
|
|
starryNight = await createStarryNight(grammars, {
|
|
getOnigurumaUrlFetch: () => new URL(onigurumaWASMUrl, import.meta.url),
|
|
});
|
|
}
|
|
const scope = starryNight.flagToScope(grammar);
|
|
return starryNight.highlight(content, scope ?? "text.raw");
|
|
}
|