add something
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
import type { SimpleIcon } from "simple-icons";
|
||||
import {
|
||||
siAstro,
|
||||
siBun,
|
||||
siC,
|
||||
siClojure,
|
||||
siCmake,
|
||||
siCplusplus,
|
||||
siCss,
|
||||
siDart,
|
||||
siDeno,
|
||||
siDocker,
|
||||
siDotnet,
|
||||
siEditorconfig,
|
||||
siElixir,
|
||||
siErlang,
|
||||
siEslint,
|
||||
siFortran,
|
||||
siFsharp,
|
||||
siGit,
|
||||
siGitignoredotio,
|
||||
siGnubash,
|
||||
siGo,
|
||||
siGradle,
|
||||
siGraphql,
|
||||
siHaskell,
|
||||
siHtml5,
|
||||
siJavascript,
|
||||
siJson,
|
||||
siJulia,
|
||||
siKotlin,
|
||||
siLua,
|
||||
siMake,
|
||||
siMarkdown,
|
||||
siNodedotjs,
|
||||
siNpm,
|
||||
siOcaml,
|
||||
siOpenjdk,
|
||||
siPerl,
|
||||
siPhp,
|
||||
siPnpm,
|
||||
siPrettier,
|
||||
siPython,
|
||||
siR,
|
||||
siReact,
|
||||
siRuby,
|
||||
siRust,
|
||||
siSass,
|
||||
siScala,
|
||||
siShell,
|
||||
siSqlite,
|
||||
siSvelte,
|
||||
siSvg,
|
||||
siSwift,
|
||||
siTailwindcss,
|
||||
siTauri,
|
||||
siTerraform,
|
||||
siToml,
|
||||
siTypescript,
|
||||
siVite,
|
||||
siVuedotjs,
|
||||
siYaml,
|
||||
siYarn,
|
||||
siZig,
|
||||
siZsh,
|
||||
} from "simple-icons";
|
||||
|
||||
export interface LanguageIconSpec {
|
||||
icon: SimpleIcon;
|
||||
title: string;
|
||||
}
|
||||
|
||||
function spec(icon: SimpleIcon, title = icon.title): LanguageIconSpec {
|
||||
return { icon, title };
|
||||
}
|
||||
|
||||
const fileNameIcons = new Map<string, LanguageIconSpec>([
|
||||
["dockerfile", spec(siDocker, "Docker")],
|
||||
["docker-compose.yml", spec(siDocker, "Docker Compose")],
|
||||
["docker-compose.yaml", spec(siDocker, "Docker Compose")],
|
||||
["compose.yml", spec(siDocker, "Docker Compose")],
|
||||
["compose.yaml", spec(siDocker, "Docker Compose")],
|
||||
["package.json", spec(siNodedotjs, "Node package")],
|
||||
["package-lock.json", spec(siNpm, "npm lockfile")],
|
||||
["pnpm-lock.yaml", spec(siPnpm, "pnpm lockfile")],
|
||||
["yarn.lock", spec(siYarn, "Yarn lockfile")],
|
||||
["bun.lockb", spec(siBun, "Bun lockfile")],
|
||||
["deno.json", spec(siDeno, "Deno")],
|
||||
["deno.jsonc", spec(siDeno, "Deno")],
|
||||
["cargo.toml", spec(siRust, "Cargo")],
|
||||
["cargo.lock", spec(siRust, "Cargo lockfile")],
|
||||
["tauri.conf.json", spec(siTauri, "Tauri")],
|
||||
["svelte.config.js", spec(siSvelte, "Svelte config")],
|
||||
["svelte.config.ts", spec(siSvelte, "Svelte config")],
|
||||
["vite.config.js", spec(siVite, "Vite config")],
|
||||
["vite.config.ts", spec(siVite, "Vite config")],
|
||||
["tailwind.config.js", spec(siTailwindcss, "Tailwind CSS config")],
|
||||
["tailwind.config.ts", spec(siTailwindcss, "Tailwind CSS config")],
|
||||
["eslint.config.js", spec(siEslint, "ESLint config")],
|
||||
["eslint.config.mjs", spec(siEslint, "ESLint config")],
|
||||
[".eslintrc", spec(siEslint, "ESLint config")],
|
||||
[".eslintrc.js", spec(siEslint, "ESLint config")],
|
||||
[".eslintrc.cjs", spec(siEslint, "ESLint config")],
|
||||
[".prettierrc", spec(siPrettier, "Prettier config")],
|
||||
[".prettierrc.json", spec(siPrettier, "Prettier config")],
|
||||
[".prettierrc.js", spec(siPrettier, "Prettier config")],
|
||||
[".gitignore", spec(siGitignoredotio, "gitignore")],
|
||||
[".gitattributes", spec(siGit, "Git attributes")],
|
||||
[".gitmodules", spec(siGit, "Git modules")],
|
||||
[".editorconfig", spec(siEditorconfig, "EditorConfig")],
|
||||
["cmakelists.txt", spec(siCmake, "CMake")],
|
||||
["makefile", spec(siMake, "Makefile")],
|
||||
["justfile", spec(siShell, "Justfile")],
|
||||
["rakefile", spec(siRuby, "Rakefile")],
|
||||
["gemfile", spec(siRuby, "Gemfile")],
|
||||
]);
|
||||
|
||||
const extensionIcons = new Map<string, LanguageIconSpec>([
|
||||
["js", spec(siJavascript)],
|
||||
["mjs", spec(siJavascript)],
|
||||
["cjs", spec(siJavascript)],
|
||||
["jsx", spec(siReact, "React JSX")],
|
||||
["ts", spec(siTypescript)],
|
||||
["mts", spec(siTypescript)],
|
||||
["cts", spec(siTypescript)],
|
||||
["tsx", spec(siReact, "React TSX")],
|
||||
["svelte", spec(siSvelte)],
|
||||
["vue", spec(siVuedotjs, "Vue")],
|
||||
["astro", spec(siAstro)],
|
||||
["rs", spec(siRust)],
|
||||
["go", spec(siGo)],
|
||||
["py", spec(siPython)],
|
||||
["pyw", spec(siPython)],
|
||||
["java", spec(siOpenjdk, "Java")],
|
||||
["kt", spec(siKotlin)],
|
||||
["kts", spec(siKotlin)],
|
||||
["cs", spec(siDotnet, "C#")],
|
||||
["cpp", spec(siCplusplus, "C++")],
|
||||
["cxx", spec(siCplusplus, "C++")],
|
||||
["cc", spec(siCplusplus, "C++")],
|
||||
["hpp", spec(siCplusplus, "C++")],
|
||||
["hh", spec(siCplusplus, "C++")],
|
||||
["c", spec(siC)],
|
||||
["h", spec(siC)],
|
||||
["swift", spec(siSwift)],
|
||||
["php", spec(siPhp, "PHP")],
|
||||
["rb", spec(siRuby)],
|
||||
["lua", spec(siLua)],
|
||||
["dart", spec(siDart)],
|
||||
["scala", spec(siScala)],
|
||||
["zig", spec(siZig)],
|
||||
["ex", spec(siElixir)],
|
||||
["exs", spec(siElixir)],
|
||||
["erl", spec(siErlang)],
|
||||
["hrl", spec(siErlang)],
|
||||
["fs", spec(siFsharp, "F#")],
|
||||
["fsx", spec(siFsharp, "F#")],
|
||||
["fsi", spec(siFsharp, "F#")],
|
||||
["clj", spec(siClojure)],
|
||||
["cljs", spec(siClojure)],
|
||||
["hs", spec(siHaskell)],
|
||||
["lhs", spec(siHaskell)],
|
||||
["ml", spec(siOcaml, "OCaml")],
|
||||
["mli", spec(siOcaml, "OCaml")],
|
||||
["jl", spec(siJulia)],
|
||||
["r", spec(siR, "R")],
|
||||
["pl", spec(siPerl)],
|
||||
["pm", spec(siPerl)],
|
||||
["f", spec(siFortran)],
|
||||
["f90", spec(siFortran)],
|
||||
["f95", spec(siFortran)],
|
||||
["html", spec(siHtml5, "HTML")],
|
||||
["htm", spec(siHtml5, "HTML")],
|
||||
["css", spec(siCss, "CSS")],
|
||||
["scss", spec(siSass, "Sass")],
|
||||
["sass", spec(siSass, "Sass")],
|
||||
["svg", spec(siSvg, "SVG")],
|
||||
["json", spec(siJson, "JSON")],
|
||||
["jsonc", spec(siJson, "JSONC")],
|
||||
["json5", spec(siJson, "JSON5")],
|
||||
["yaml", spec(siYaml, "YAML")],
|
||||
["yml", spec(siYaml, "YAML")],
|
||||
["toml", spec(siToml, "TOML")],
|
||||
["tf", spec(siTerraform, "Terraform")],
|
||||
["tfvars", spec(siTerraform, "Terraform variables")],
|
||||
["graphql", spec(siGraphql, "GraphQL")],
|
||||
["gql", spec(siGraphql, "GraphQL")],
|
||||
["md", spec(siMarkdown, "Markdown")],
|
||||
["mdx", spec(siMarkdown, "MDX")],
|
||||
["sh", spec(siGnubash, "Shell script")],
|
||||
["bash", spec(siGnubash, "Bash")],
|
||||
["zsh", spec(siZsh, "Zsh")],
|
||||
["fish", spec(siShell, "Fish shell")],
|
||||
["sql", spec(siSqlite, "SQL")],
|
||||
["sqlite", spec(siSqlite, "SQLite")],
|
||||
["sqlite3", spec(siSqlite, "SQLite")],
|
||||
]);
|
||||
|
||||
export function languageIconForPath(path: string): LanguageIconSpec | null {
|
||||
const name = path.split(/[\\/]/).pop()?.toLowerCase() ?? "";
|
||||
const byName = fileNameIcons.get(name);
|
||||
if (byName) return byName;
|
||||
|
||||
const index = name.lastIndexOf(".");
|
||||
if (index <= 0) return null;
|
||||
return extensionIcons.get(name.slice(index + 1)) ?? null;
|
||||
}
|
||||
Reference in New Issue
Block a user