4
4
5
5
import { cpp } from '@codemirror/lang-cpp' ;
6
6
import { css } from '@codemirror/lang-css' ;
7
+ import { go } from '@codemirror/lang-go' ;
7
8
import { html } from '@codemirror/lang-html' ;
8
9
import { java } from '@codemirror/lang-java' ;
9
10
import { javascript } from '@codemirror/lang-javascript' ;
@@ -16,8 +17,16 @@ import { rust } from '@codemirror/lang-rust';
16
17
import { vue } from '@codemirror/lang-vue' ;
17
18
import { wast } from '@codemirror/lang-wast' ;
18
19
import { xml } from '@codemirror/lang-xml' ;
20
+ import { yaml } from '@codemirror/lang-yaml' ;
19
21
import { HighlightStyle , StreamLanguage } from '@codemirror/language' ;
22
+ import { commonLisp } from '@codemirror/legacy-modes/mode/commonlisp' ;
23
+ import { dockerFile } from '@codemirror/legacy-modes/mode/dockerfile' ;
24
+ import { jinja2 } from '@codemirror/legacy-modes/mode/jinja2' ;
25
+ import { lua } from '@codemirror/legacy-modes/mode/lua' ;
20
26
import { ruby } from '@codemirror/legacy-modes/mode/ruby' ;
27
+ import { shell } from '@codemirror/legacy-modes/mode/shell' ;
28
+ import { swift } from '@codemirror/legacy-modes/mode/swift' ;
29
+ import { toml } from '@codemirror/legacy-modes/mode/toml' ;
21
30
import { NodeType , Tree , Parser } from '@lezer/common' ;
22
31
import { tags , highlightTree } from '@lezer/highlight' ;
23
32
@@ -84,7 +93,14 @@ export function highlightNode(node: Element, mimeType: string): void {
84
93
}
85
94
86
95
export function parserFromFilename ( filename : string ) : Parser | null {
87
- const ext = filename . split ( '.' ) . pop ( ) ;
96
+ const basename = filename . split ( '/' ) . pop ( ) || '' ;
97
+ const ext = basename . split ( '.' ) . pop ( ) ?. toLowerCase ( ) ;
98
+
99
+ // Handle Dockerfiles (with common variations).
100
+ if ( basename === 'Dockerfile' || basename . startsWith ( 'Dockerfile.' ) || ext === 'dockerfile' ) {
101
+ return StreamLanguage . define ( dockerFile ) . parser ;
102
+ }
103
+
88
104
switch ( ext ) {
89
105
case 'jsx' :
90
106
case 'js' :
@@ -116,8 +132,12 @@ export function parserFromFilename(filename: string): Parser | null {
116
132
case 'h++' :
117
133
return cpp ( ) . language . parser ;
118
134
119
- // case 'text/x-go':
120
- // return new LanguageSupport(await CodeMirror.go());
135
+ case 'go' :
136
+ return go ( ) . language . parser ;
137
+
138
+ case 'j2' :
139
+ case 'jinja2' :
140
+ return StreamLanguage . define ( jinja2 ) . parser ;
121
141
122
142
case 'java' :
123
143
return java ( ) . language . parser ;
@@ -128,6 +148,14 @@ export function parserFromFilename(filename: string): Parser | null {
128
148
case 'json' :
129
149
return json ( ) . language . parser ;
130
150
151
+ case 'lisp' :
152
+ case 'cl' :
153
+ case 'el' : // Also catches Emacs Lisp files
154
+ return StreamLanguage . define ( commonLisp ) . parser ;
155
+
156
+ case 'lua' :
157
+ return StreamLanguage . define ( lua ) . parser ;
158
+
131
159
case 'php' :
132
160
return php ( ) . language . parser ;
133
161
@@ -172,6 +200,14 @@ export function parserFromFilename(filename: string): Parser | null {
172
200
// highlighting svelte with js + jsx works much better than the above
173
201
return javascript ( { typescript : true , jsx : true } ) . language . parser ;
174
202
203
+ case 'sh' :
204
+ case 'bash' :
205
+ case 'zsh' :
206
+ return StreamLanguage . define ( shell ) . parser ;
207
+
208
+ case 'swift' :
209
+ return StreamLanguage . define ( swift ) . parser ;
210
+
175
211
case 'vue' :
176
212
return vue ( ) . language . parser ;
177
213
@@ -181,6 +217,13 @@ export function parserFromFilename(filename: string): Parser | null {
181
217
case 'rb' :
182
218
return StreamLanguage . define ( ruby ) . parser ;
183
219
220
+ case 'toml' :
221
+ return StreamLanguage . define ( toml ) . parser ;
222
+
223
+ case 'yml' :
224
+ case 'yaml' :
225
+ return yaml ( ) . language . parser ;
226
+
184
227
default :
185
228
return null ;
186
229
}
0 commit comments