1package lsp
2
3import (
4 "path/filepath"
5 "strings"
6
7 "github.com/opencode-ai/opencode/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}