176 lines · 8.8 KB
import { attributesFor } from "./gitattributes";
import type { AttributeRule } from "./gitattributes";

/**
 * Language breakdown in the spirit of GitHub Linguist: files are classified by name and extension, only
 * programming and markup languages count (data and prose such as JSON, YAML and Markdown don't), and vendored,
 * generated and documentation paths are left out. `.gitattributes` `linguist-*` attributes override all of it.
 */
type Language = { color: string; extensions?: string[]; filenames?: string[] };

const LANGUAGES: Record<string, Language> = {
  TypeScript: { color: "#3178c6", extensions: ["ts", "tsx", "mts", "cts"] },
  JavaScript: { color: "#f1e05a", extensions: ["js", "jsx", "mjs", "cjs"] },
  Python: { color: "#3572A5", extensions: ["py", "pyi", "pyw"] },
  Go: { color: "#00ADD8", extensions: ["go"] },
  Rust: { color: "#dea584", extensions: ["rs"] },
  Java: { color: "#b07219", extensions: ["java"] },
  Kotlin: { color: "#A97BFF", extensions: ["kt", "kts"] },
  Swift: { color: "#F05138", extensions: ["swift"] },
  C: { color: "#555555", extensions: ["c", "h"] },
  "C++": { color: "#f34b7d", extensions: ["cpp", "cc", "cxx", "c++", "hpp", "hh", "hxx", "h++", "ipp"] },
  "C#": { color: "#178600", extensions: ["cs", "csx"] },
  "Objective-C": { color: "#438eff", extensions: ["m"] },
  "Objective-C++": { color: "#6866fb", extensions: ["mm"] },
  Ruby: { color: "#701516", extensions: ["rb", "rake", "gemspec"], filenames: ["Gemfile", "Rakefile"] },
  PHP: { color: "#4F5D95", extensions: ["php", "phtml"] },
  Shell: { color: "#89e051", extensions: ["sh", "bash", "zsh", "ksh", "fish"] },
  PowerShell: { color: "#012456", extensions: ["ps1", "psm1", "psd1"] },
  Batchfile: { color: "#C1F12E", extensions: ["bat", "cmd"] },
  HTML: { color: "#e34c26", extensions: ["html", "htm", "xhtml"] },
  CSS: { color: "#663399", extensions: ["css"] },
  SCSS: { color: "#c6538c", extensions: ["scss"] },
  Sass: { color: "#a53b70", extensions: ["sass"] },
  Less: { color: "#1d365d", extensions: ["less"] },
  Vue: { color: "#41b883", extensions: ["vue"] },
  Svelte: { color: "#ff3e00", extensions: ["svelte"] },
  Astro: { color: "#ff5a03", extensions: ["astro"] },
  MDX: { color: "#fcb32c", extensions: ["mdx"] },
  Handlebars: { color: "#f7931e", extensions: ["hbs", "handlebars"] },
  Dart: { color: "#00B4AB", extensions: ["dart"] },