1package lsp
  2
  3import (
  4	"path/filepath"
  5	"strings"
  6
  7	"github.com/charmbracelet/crush/internal/lsp/protocol"
  8)
  9
 10func DetectLanguageID(uri string) protocol.LanguageKind {
 11	ext := strings.ToLower(filepath.Ext(uri))
 12	switch ext {
 13	case ".abap":
 14		return protocol.LangABAP
 15	case ".bat":
 16		return protocol.LangWindowsBat
 17	case ".bib", ".bibtex":
 18		return protocol.LangBibTeX
 19	case ".clj":
 20		return protocol.LangClojure
 21	case ".coffee":
 22		return protocol.LangCoffeescript
 23	case ".c":
 24		return protocol.LangC
 25	case ".cpp", ".cxx", ".cc", ".c++":
 26		return protocol.LangCPP
 27	case ".cs":
 28		return protocol.LangCSharp
 29	case ".css":
 30		return protocol.LangCSS
 31	case ".d":
 32		return protocol.LangD
 33	case ".pas", ".pascal":
 34		return protocol.LangDelphi
 35	case ".diff", ".patch":
 36		return protocol.LangDiff
 37	case ".dart":
 38		return protocol.LangDart
 39	case ".dockerfile":
 40		return protocol.LangDockerfile
 41	case ".ex", ".exs":
 42		return protocol.LangElixir
 43	case ".erl", ".hrl":
 44		return protocol.LangErlang
 45	case ".fs", ".fsi", ".fsx", ".fsscript":
 46		return protocol.LangFSharp
 47	case ".gitcommit":
 48		return protocol.LangGitCommit
 49	case ".gitrebase":
 50		return protocol.LangGitRebase
 51	case ".go":
 52		return protocol.LangGo
 53	case ".groovy":
 54		return protocol.LangGroovy
 55	case ".hbs", ".handlebars":
 56		return protocol.LangHandlebars
 57	case ".hs":
 58		return protocol.LangHaskell
 59	case ".html", ".htm":
 60		return protocol.LangHTML
 61	case ".ini":
 62		return protocol.LangIni
 63	case ".java":
 64		return protocol.LangJava
 65	case ".js":
 66		return protocol.LangJavaScript
 67	case ".jsx":
 68		return protocol.LangJavaScriptReact
 69	case ".json":
 70		return protocol.LangJSON
 71	case ".tex", ".latex":
 72		return protocol.LangLaTeX
 73	case ".less":
 74		return protocol.LangLess
 75	case ".lua":
 76		return protocol.LangLua
 77	case ".makefile", "makefile":
 78		return protocol.LangMakefile
 79	case ".md", ".markdown":
 80		return protocol.LangMarkdown
 81	case ".m":
 82		return protocol.LangObjectiveC
 83	case ".mm":
 84		return protocol.LangObjectiveCPP
 85	case ".pl":
 86		return protocol.LangPerl
 87	case ".pm":
 88		return protocol.LangPerl6
 89	case ".php":
 90		return protocol.LangPHP
 91	case ".ps1", ".psm1":
 92		return protocol.LangPowershell
 93	case ".pug", ".jade":
 94		return protocol.LangPug
 95	case ".py":
 96		return protocol.LangPython
 97	case ".r":
 98		return protocol.LangR
 99	case ".cshtml", ".razor":
100		return protocol.LangRazor
101	case ".rb":
102		return protocol.LangRuby
103	case ".rs":
104		return protocol.LangRust
105	case ".scss":
106		return protocol.LangSCSS
107	case ".sass":
108		return protocol.LangSASS
109	case ".scala":
110		return protocol.LangScala
111	case ".shader":
112		return protocol.LangShaderLab
113	case ".sh", ".bash", ".zsh", ".ksh":
114		return protocol.LangShellScript
115	case ".sql":
116		return protocol.LangSQL
117	case ".swift":
118		return protocol.LangSwift
119	case ".ts":
120		return protocol.LangTypeScript
121	case ".tsx":
122		return protocol.LangTypeScriptReact
123	case ".xml":
124		return protocol.LangXML
125	case ".xsl":
126		return protocol.LangXSL
127	case ".yaml", ".yml":
128		return protocol.LangYAML
129	default:
130		return protocol.LanguageKind("") // Unknown language
131	}
132}