pi-lens
Version:
Real-time code feedback for pi — LSP, linters, formatters, type-checking, structural analysis & booboo
176 lines (175 loc) • 3.62 kB
JavaScript
import path from "node:path";
/**
* Language ID Mappings for LSP
*
* Maps file extensions to LSP language identifiers.
*/
export const LANGUAGE_EXTENSIONS = {
// JavaScript/TypeScript
".ts": "typescript",
".tsx": "typescriptreact",
".mts": "typescript",
".cts": "typescript",
".js": "javascript",
".jsx": "javascriptreact",
".mjs": "javascript",
".cjs": "javascript",
".svelte": "svelte",
".vue": "vue",
".astro": "astro",
// Python
".py": "python",
".pyi": "python",
// Go
".go": "go",
".mod": "go",
".sum": "go",
// Rust
".rs": "rust",
".ron": "rust",
// C/C++
".c": "c",
".cpp": "cpp",
".cc": "cpp",
".cxx": "cpp",
".h": "c",
".hpp": "cpp",
".hh": "cpp",
// Java
".java": "java",
// Kotlin
".kt": "kotlin",
".kts": "kotlin",
// Ruby
".rb": "ruby",
".rake": "ruby",
".gemspec": "ruby",
".ru": "ruby",
// PHP
".php": "php",
// C#
".cs": "csharp",
// F#
".fs": "fsharp",
".fsi": "fsharp",
".fsx": "fsharp",
// Swift
".swift": "swift",
// Dart
".dart": "dart",
// Lua
".lua": "lua",
// Shell
".sh": "shellscript",
".bash": "shellscript",
".zsh": "shellscript",
".fish": "shellscript",
// JSON/YAML
".json": "json",
".jsonc": "jsonc",
".yaml": "yaml",
".yml": "yaml",
// Markdown
".md": "markdown",
".mdx": "markdown",
// CSS
".css": "css",
".scss": "scss",
".sass": "sass",
".less": "less",
// HTML
".html": "html",
".htm": "html",
// SQL
".sql": "sql",
// Docker
".dockerfile": "dockerfile",
"Dockerfile": "dockerfile",
// Terraform
".tf": "terraform",
".tfvars": "terraform",
// Nix
".nix": "nix",
// Elixir
".ex": "elixir",
".exs": "elixir",
// Haskell
".hs": "haskell",
".lhs": "haskell",
// OCaml
".ml": "ocaml",
".mli": "ocaml",
// Zig
".zig": "zig",
".zon": "zig",
// Gleam
".gleam": "gleam",
// Clojure
".clj": "clojure",
".cljs": "clojure",
".cljc": "clojure",
".edn": "clojure",
// Scala
".scala": "scala",
".sc": "scala",
// R
".r": "r",
".R": "r",
// Julia
".jl": "julia",
// Perl
".pl": "perl",
".pm": "perl",
// Erlang
".erl": "erlang",
".hrl": "erlang",
// Fortran
".f": "fortran",
".f90": "fortran",
".f95": "fortran",
// COBOL
".cob": "cobol",
".cbl": "cobol",
// Pascal
".pas": "pascal",
".pp": "pascal",
// Ada
".adb": "ada",
".ads": "ada",
// VHDL/Verilog
".vhd": "vhdl",
".vhdl": "vhdl",
".v": "verilog",
".sv": "systemverilog",
// GraphQL
".graphql": "graphql",
".gql": "graphql",
// Protocol Buffers
".proto": "proto",
// TOML
".toml": "toml",
// Prisma
".prisma": "prisma",
// Typst
".typ": "typst",
".typc": "typst",
};
/**
* Get language ID for a file path
*/
export function getLanguageId(filePath) {
const ext = path.extname(filePath).toLowerCase();
if (ext && LANGUAGE_EXTENSIONS[ext]) {
return LANGUAGE_EXTENSIONS[ext];
}
const base = path.basename(filePath);
return LANGUAGE_EXTENSIONS[base] ?? LANGUAGE_EXTENSIONS[base.toLowerCase()];
}
/**
* Get all extensions for a language ID
*/
export function getExtensionsForLanguage(languageId) {
return Object.entries(LANGUAGE_EXTENSIONS)
.filter(([, id]) => id === languageId)
.map(([ext]) => ext);
}