Mercurial
comparison .cms/lib/codemirror/mode/verilog/test.js @ 0:78edf6b517a0 draft
24.10
author | Coffee CMS <info@coffee-cms.ru> |
---|---|
date | Fri, 11 Oct 2024 22:40:23 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:78edf6b517a0 |
---|---|
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others | |
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE | |
3 | |
4 (function() { | |
5 var mode = CodeMirror.getMode({indentUnit: 4}, "verilog"); | |
6 function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } | |
7 | |
8 MT("binary_literals", | |
9 "[number 1'b0]", | |
10 "[number 1'b1]", | |
11 "[number 1'bx]", | |
12 "[number 1'bz]", | |
13 "[number 1'bX]", | |
14 "[number 1'bZ]", | |
15 "[number 1'B0]", | |
16 "[number 1'B1]", | |
17 "[number 1'Bx]", | |
18 "[number 1'Bz]", | |
19 "[number 1'BX]", | |
20 "[number 1'BZ]", | |
21 "[number 1'b0]", | |
22 "[number 1'b1]", | |
23 "[number 2'b01]", | |
24 "[number 2'bxz]", | |
25 "[number 2'b11]", | |
26 "[number 2'b10]", | |
27 "[number 2'b1Z]", | |
28 "[number 12'b0101_0101_0101]", | |
29 "[number 1'b 0]", | |
30 "[number 'b0101]" | |
31 ); | |
32 | |
33 MT("octal_literals", | |
34 "[number 3'o7]", | |
35 "[number 3'O7]", | |
36 "[number 3'so7]", | |
37 "[number 3'SO7]" | |
38 ); | |
39 | |
40 MT("decimal_literals", | |
41 "[number 0]", | |
42 "[number 1]", | |
43 "[number 7]", | |
44 "[number 123_456]", | |
45 "[number 'd33]", | |
46 "[number 8'd255]", | |
47 "[number 8'D255]", | |
48 "[number 8'sd255]", | |
49 "[number 8'SD255]", | |
50 "[number 32'd123]", | |
51 "[number 32 'd123]", | |
52 "[number 32 'd 123]" | |
53 ); | |
54 | |
55 MT("hex_literals", | |
56 "[number 4'h0]", | |
57 "[number 4'ha]", | |
58 "[number 4'hF]", | |
59 "[number 4'hx]", | |
60 "[number 4'hz]", | |
61 "[number 4'hX]", | |
62 "[number 4'hZ]", | |
63 "[number 32'hdc78]", | |
64 "[number 32'hDC78]", | |
65 "[number 32 'hDC78]", | |
66 "[number 32'h DC78]", | |
67 "[number 32 'h DC78]", | |
68 "[number 32'h44x7]", | |
69 "[number 32'hFFF?]" | |
70 ); | |
71 | |
72 MT("real_number_literals", | |
73 "[number 1.2]", | |
74 "[number 0.1]", | |
75 "[number 2394.26331]", | |
76 "[number 1.2E12]", | |
77 "[number 1.2e12]", | |
78 "[number 1.30e-2]", | |
79 "[number 0.1e-0]", | |
80 "[number 23E10]", | |
81 "[number 29E-2]", | |
82 "[number 236.123_763_e-12]" | |
83 ); | |
84 | |
85 MT("operators", | |
86 "[meta ^]" | |
87 ); | |
88 | |
89 MT("keywords", | |
90 "[keyword logic]", | |
91 "[keyword logic] [variable foo]", | |
92 "[keyword reg] [variable abc]" | |
93 ); | |
94 | |
95 MT("variables", | |
96 "[variable _leading_underscore]", | |
97 "[variable _if]", | |
98 "[number 12] [variable foo]", | |
99 "[variable foo] [number 14]" | |
100 ); | |
101 | |
102 MT("tick_defines", | |
103 "[def `FOO]", | |
104 "[def `foo]", | |
105 "[def `FOO_bar]" | |
106 ); | |
107 | |
108 MT("system_calls", | |
109 "[meta $display]", | |
110 "[meta $vpi_printf]" | |
111 ); | |
112 | |
113 MT("line_comment", "[comment // Hello world]"); | |
114 | |
115 // Alignment tests | |
116 MT("align_port_map_style1", | |
117 /** | |
118 * mod mod(.a(a), | |
119 * .b(b) | |
120 * ); | |
121 */ | |
122 "[variable mod] [variable mod][bracket (].[variable a][bracket (][variable a][bracket )],", | |
123 " .[variable b][bracket (][variable b][bracket )]", | |
124 " [bracket )];", | |
125 "" | |
126 ); | |
127 | |
128 MT("align_port_map_style2", | |
129 /** | |
130 * mod mod( | |
131 * .a(a), | |
132 * .b(b) | |
133 * ); | |
134 */ | |
135 "[variable mod] [variable mod][bracket (]", | |
136 " .[variable a][bracket (][variable a][bracket )],", | |
137 " .[variable b][bracket (][variable b][bracket )]", | |
138 "[bracket )];", | |
139 "" | |
140 ); | |
141 | |
142 MT("align_assignments", | |
143 /** | |
144 * always @(posedge clk) begin | |
145 * if (rst) | |
146 * data_out <= 8'b0 + | |
147 * 8'b1; | |
148 * else | |
149 * data_out = 8'b0 + | |
150 * 8'b1; | |
151 * data_out = | |
152 * 8'b0 + 8'b1; | |
153 * end | |
154 */ | |
155 "[keyword always] [def @][bracket (][keyword posedge] [variable clk][bracket )] [keyword begin]", | |
156 " [keyword if] [bracket (][variable rst][bracket )]", | |
157 " [variable data_out] [meta <=] [number 8'b0] [meta +]", | |
158 " [number 8'b1];", | |
159 " [keyword else]", | |
160 " [variable data_out] [meta =] [number 8'b0] [meta +]", | |
161 " [number 8'b1];", | |
162 " [variable data_out] [meta =] [number 8'b0] [meta +]", | |
163 " [number 8'b1];", | |
164 "[keyword end]", | |
165 "" | |
166 ); | |
167 | |
168 // Indentation tests | |
169 MT("indent_single_statement_if", | |
170 "[keyword if] [bracket (][variable foo][bracket )]", | |
171 " [keyword break];", | |
172 "" | |
173 ); | |
174 | |
175 MT("no_indent_after_single_line_if", | |
176 "[keyword if] [bracket (][variable foo][bracket )] [keyword break];", | |
177 "" | |
178 ); | |
179 | |
180 MT("indent_after_if_begin_same_line", | |
181 "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", | |
182 " [keyword break];", | |
183 " [keyword break];", | |
184 "[keyword end]", | |
185 "" | |
186 ); | |
187 | |
188 MT("indent_after_if_begin_next_line", | |
189 "[keyword if] [bracket (][variable foo][bracket )]", | |
190 " [keyword begin]", | |
191 " [keyword break];", | |
192 " [keyword break];", | |
193 " [keyword end]", | |
194 "" | |
195 ); | |
196 | |
197 MT("indent_single_statement_if_else", | |
198 "[keyword if] [bracket (][variable foo][bracket )]", | |
199 " [keyword break];", | |
200 "[keyword else]", | |
201 " [keyword break];", | |
202 "" | |
203 ); | |
204 | |
205 MT("indent_if_else_begin_same_line", | |
206 "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", | |
207 " [keyword break];", | |
208 " [keyword break];", | |
209 "[keyword end] [keyword else] [keyword begin]", | |
210 " [keyword break];", | |
211 " [keyword break];", | |
212 "[keyword end]", | |
213 "" | |
214 ); | |
215 | |
216 MT("indent_if_else_begin_next_line", | |
217 "[keyword if] [bracket (][variable foo][bracket )]", | |
218 " [keyword begin]", | |
219 " [keyword break];", | |
220 " [keyword break];", | |
221 " [keyword end]", | |
222 "[keyword else]", | |
223 " [keyword begin]", | |
224 " [keyword break];", | |
225 " [keyword break];", | |
226 " [keyword end]", | |
227 "" | |
228 ); | |
229 | |
230 MT("indent_if_nested_without_begin", | |
231 "[keyword if] [bracket (][variable foo][bracket )]", | |
232 " [keyword if] [bracket (][variable foo][bracket )]", | |
233 " [keyword if] [bracket (][variable foo][bracket )]", | |
234 " [keyword break];", | |
235 "" | |
236 ); | |
237 | |
238 MT("indent_case", | |
239 "[keyword case] [bracket (][variable state][bracket )]", | |
240 " [variable FOO]:", | |
241 " [keyword break];", | |
242 " [variable BAR]:", | |
243 " [keyword break];", | |
244 "[keyword endcase]", | |
245 "" | |
246 ); | |
247 | |
248 MT("unindent_after_end_with_preceding_text", | |
249 "[keyword begin]", | |
250 " [keyword break]; [keyword end]", | |
251 "" | |
252 ); | |
253 | |
254 MT("export_function_one_line_does_not_indent", | |
255 "[keyword export] [string \"DPI-C\"] [keyword function] [variable helloFromSV];", | |
256 "" | |
257 ); | |
258 | |
259 MT("export_task_one_line_does_not_indent", | |
260 "[keyword export] [string \"DPI-C\"] [keyword task] [variable helloFromSV];", | |
261 "" | |
262 ); | |
263 | |
264 MT("export_function_two_lines_indents_properly", | |
265 "[keyword export]", | |
266 " [string \"DPI-C\"] [keyword function] [variable helloFromSV];", | |
267 "" | |
268 ); | |
269 | |
270 MT("export_task_two_lines_indents_properly", | |
271 "[keyword export]", | |
272 " [string \"DPI-C\"] [keyword task] [variable helloFromSV];", | |
273 "" | |
274 ); | |
275 | |
276 MT("import_function_one_line_does_not_indent", | |
277 "[keyword import] [string \"DPI-C\"] [keyword function] [variable helloFromC];", | |
278 "" | |
279 ); | |
280 | |
281 MT("import_task_one_line_does_not_indent", | |
282 "[keyword import] [string \"DPI-C\"] [keyword task] [variable helloFromC];", | |
283 "" | |
284 ); | |
285 | |
286 MT("import_package_single_line_does_not_indent", | |
287 "[keyword import] [variable p]::[variable x];", | |
288 "[keyword import] [variable p]::[variable y];", | |
289 "" | |
290 ); | |
291 | |
292 MT("covergroup_with_function_indents_properly", | |
293 "[keyword covergroup] [variable cg] [keyword with] [keyword function] [variable sample][bracket (][keyword bit] [variable b][bracket )];", | |
294 " [variable c] : [keyword coverpoint] [variable c];", | |
295 "[keyword endgroup]: [variable cg]", | |
296 "" | |
297 ); | |
298 | |
299 MT("indent_uvm_macros", | |
300 /** | |
301 * `uvm_object_utils_begin(foo) | |
302 * `uvm_field_event(foo, UVM_ALL_ON) | |
303 * `uvm_object_utils_end | |
304 */ | |
305 "[def `uvm_object_utils_begin][bracket (][variable foo][bracket )]", | |
306 " [def `uvm_field_event][bracket (][variable foo], [variable UVM_ALL_ON][bracket )]", | |
307 "[def `uvm_object_utils_end]", | |
308 "" | |
309 ); | |
310 | |
311 MT("indent_uvm_macros2", | |
312 /** | |
313 * `uvm_do_with(mem_read,{ | |
314 * bar_nb == 0; | |
315 * }) | |
316 */ | |
317 "[def `uvm_do_with][bracket (][variable mem_read],[bracket {]", | |
318 " [variable bar_nb] [meta ==] [number 0];", | |
319 "[bracket })]", | |
320 "" | |
321 ); | |
322 | |
323 MT("indent_wait_disable_fork", | |
324 /** | |
325 * virtual task body(); | |
326 * repeat (20) begin | |
327 * fork | |
328 * `uvm_create_on(t,p_seq) | |
329 * join_none | |
330 * end | |
331 * wait fork; | |
332 * disable fork; | |
333 * endtask : body | |
334 */ | |
335 "[keyword virtual] [keyword task] [variable body][bracket ()];", | |
336 " [keyword repeat] [bracket (][number 20][bracket )] [keyword begin]", | |
337 " [keyword fork]", | |
338 " [def `uvm_create_on][bracket (][variable t],[variable p_seq][bracket )]", | |
339 " [keyword join_none]", | |
340 " [keyword end]", | |
341 " [keyword wait] [keyword fork];", | |
342 " [keyword disable] [keyword fork];", | |
343 "[keyword endtask] : [variable body]", | |
344 "" | |
345 ); | |
346 | |
347 MT("indent_typedef_class", | |
348 /** | |
349 * typedef class asdf; | |
350 * typedef p p_t[]; | |
351 * typedef enum { | |
352 * ASDF | |
353 * } t; | |
354 */ | |
355 "[keyword typedef] [keyword class] [variable asdf];", | |
356 "[keyword typedef] [variable p] [variable p_t][bracket [[]]];", | |
357 "[keyword typedef] [keyword enum] [bracket {]", | |
358 " [variable ASDF]", | |
359 "[bracket }] [variable t];", | |
360 "" | |
361 ); | |
362 | |
363 MT("indent_case_with_macro", | |
364 /** | |
365 * // It should be assumed that Macros can have ';' inside, or 'begin'/'end' blocks. | |
366 * // As such, 'case' statement should indent correctly with macros inside. | |
367 * case(foo) | |
368 * ASDF : this.foo = seqNum; | |
369 * ABCD : `update(f) | |
370 * EFGH : `update(g) | |
371 * endcase | |
372 */ | |
373 "[keyword case][bracket (][variable foo][bracket )]", | |
374 " [variable ASDF] : [keyword this].[variable foo] [meta =] [variable seqNum];", | |
375 " [variable ABCD] : [def `update][bracket (][variable f][bracket )]", | |
376 " [variable EFGH] : [def `update][bracket (][variable g][bracket )]", | |
377 "[keyword endcase]", | |
378 "" | |
379 ); | |
380 | |
381 MT("indent_extern_function", | |
382 /** | |
383 * extern virtual function void do(ref packet trans); | |
384 * extern virtual function void do2(ref packet trans); | |
385 */ | |
386 "[keyword extern] [keyword virtual] [keyword function] [keyword void] [variable do1][bracket (][keyword ref] [variable packet] [variable trans][bracket )];", | |
387 "[keyword extern] [keyword virtual] [keyword function] [keyword void] [variable do2][bracket (][keyword ref] [variable packet] [variable trans][bracket )];", | |
388 "" | |
389 ); | |
390 | |
391 MT("indent_assignment", | |
392 /** | |
393 * for (int i=1;i < fun;i++) begin | |
394 * foo = 2 << asdf || 11'h35 >> abcd | |
395 * && 8'h6 | 1'b1; | |
396 * end | |
397 */ | |
398 "[keyword for] [bracket (][keyword int] [variable i][meta =][number 1];[variable i] [meta <] [variable fun];[variable i][meta ++][bracket )] [keyword begin]", | |
399 " [variable foo] [meta =] [number 2] [meta <<] [variable asdf] [meta ||] [number 11'h35] [meta >>] [variable abcd]", | |
400 " [meta &&] [number 8'h6] [meta |] [number 1'b1];", | |
401 "[keyword end]", | |
402 "" | |
403 ); | |
404 | |
405 MT("indent_foreach_constraint", | |
406 /** | |
407 * `uvm_rand_send_with(wrTlp, { | |
408 * length ==1; | |
409 * foreach (Data[i]) { | |
410 * payload[i] == Data[i]; | |
411 * } | |
412 * }) | |
413 */ | |
414 "[def `uvm_rand_send_with][bracket (][variable wrTlp], [bracket {]", | |
415 " [variable length] [meta ==][number 1];", | |
416 " [keyword foreach] [bracket (][variable Data][bracket [[][variable i][bracket ]])] [bracket {]", | |
417 " [variable payload][bracket [[][variable i][bracket ]]] [meta ==] [variable Data][bracket [[][variable i][bracket ]]];", | |
418 " [bracket }]", | |
419 "[bracket })]", | |
420 "" | |
421 ); | |
422 | |
423 MT("indent_compiler_directives", | |
424 /** | |
425 * `ifdef DUT | |
426 * `else | |
427 * `ifndef FOO | |
428 * `define FOO | |
429 * `endif | |
430 * `endif | |
431 * `timescale 1ns/1ns | |
432 */ | |
433 "[def `ifdef] [variable DUT]", | |
434 "[def `else]", | |
435 " [def `ifndef] [variable FOO]", | |
436 " [def `define] [variable FOO]", | |
437 " [def `endif]", | |
438 "[def `endif]", | |
439 "[def `timescale] [number 1][variable ns][meta /][number 1][variable ns]", | |
440 "" | |
441 ); | |
442 | |
443 })(); |