import { parser as jsParser } from '@lezer/javascript' import { parser as jsonParser } from '@lezer/json' import { parser as cssParser } from '@lezer/css' import { parser as cppParser } from '@lezer/cpp' import { parser as goParser } from '@lezer/go' import { parser as htmlParser } from '@lezer/html' import { parser as javaParser } from '@lezer/java' import { parser as pythonParser } from '@lezer/python' import { parser as markdownParser } from '@lezer/markdown' import { parser as phpParser } from '@lezer/php' import { parser as rustParser } from '@lezer/rust' import { parser as xmlParser } from '@lezer/xml' import { parser as yamlParser } from '@lezer/yaml' import { parser as elixirParser } from 'lezer-elixir' import type { Parser } from '@lezer/common' const parsersByExtension: Record = { // JavaScript/TypeScript js: jsParser, jsx: jsParser.configure({ dialect: 'jsx' }), ts: jsParser.configure({ dialect: 'ts' }), tsx: jsParser.configure({ dialect: 'ts jsx' }), mjs: jsParser, cjs: jsParser, // C / C++ / Objective-C c: cppParser, h: cppParser, cc: cppParser, cpp: cppParser, cxx: cppParser, hpp: cppParser, hxx: cppParser, m: cppParser, mm: cppParser, // JSON json: jsonParser, // CSS css: cssParser, scss: cssParser, // HTML html: htmlParser, htm: htmlParser, // XML xml: xmlParser, // Java java: javaParser, // Python py: pythonParser, // Go go: goParser, // PHP php: phpParser, // YAML yaml: yamlParser, yml: yamlParser, // Rust rs: rustParser, // Elixir ex: elixirParser, exs: elixirParser, // Markdown md: markdownParser, mdx: markdownParser, } export function getParserForFile(filename: string): Parser | null { const ext = filename.split('.').pop()?.toLowerCase() if (!ext) return null return parsersByExtension[ext] ?? null } export function isLanguageSupported(filename: string): boolean { return getParserForFile(filename) !== null } export function getSupportedExtensions(): string[] { return Object.keys(parsersByExtension) }