123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- // CodeMirror, copyright (c) by Marijn Haverbeke and others
- // Distributed under an MIT license: https://codemirror.net/LICENSE
- ;(function () {
- var mode = CodeMirror.getMode({ indentUnit: 4 }, 'verilog')
- function MT(name) {
- test.mode(name, mode, Array.prototype.slice.call(arguments, 1))
- }
- MT(
- 'binary_literals',
- "[number 1'b0]",
- "[number 1'b1]",
- "[number 1'bx]",
- "[number 1'bz]",
- "[number 1'bX]",
- "[number 1'bZ]",
- "[number 1'B0]",
- "[number 1'B1]",
- "[number 1'Bx]",
- "[number 1'Bz]",
- "[number 1'BX]",
- "[number 1'BZ]",
- "[number 1'b0]",
- "[number 1'b1]",
- "[number 2'b01]",
- "[number 2'bxz]",
- "[number 2'b11]",
- "[number 2'b10]",
- "[number 2'b1Z]",
- "[number 12'b0101_0101_0101]",
- "[number 1'b 0]",
- "[number 'b0101]"
- )
- MT('octal_literals', "[number 3'o7]", "[number 3'O7]", "[number 3'so7]", "[number 3'SO7]")
- MT(
- 'decimal_literals',
- '[number 0]',
- '[number 1]',
- '[number 7]',
- '[number 123_456]',
- "[number 'd33]",
- "[number 8'd255]",
- "[number 8'D255]",
- "[number 8'sd255]",
- "[number 8'SD255]",
- "[number 32'd123]",
- "[number 32 'd123]",
- "[number 32 'd 123]"
- )
- MT(
- 'hex_literals',
- "[number 4'h0]",
- "[number 4'ha]",
- "[number 4'hF]",
- "[number 4'hx]",
- "[number 4'hz]",
- "[number 4'hX]",
- "[number 4'hZ]",
- "[number 32'hdc78]",
- "[number 32'hDC78]",
- "[number 32 'hDC78]",
- "[number 32'h DC78]",
- "[number 32 'h DC78]",
- "[number 32'h44x7]",
- "[number 32'hFFF?]"
- )
- MT(
- 'real_number_literals',
- '[number 1.2]',
- '[number 0.1]',
- '[number 2394.26331]',
- '[number 1.2E12]',
- '[number 1.2e12]',
- '[number 1.30e-2]',
- '[number 0.1e-0]',
- '[number 23E10]',
- '[number 29E-2]',
- '[number 236.123_763_e-12]'
- )
- MT('operators', '[meta ^]')
- MT('keywords', '[keyword logic]', '[keyword logic] [variable foo]', '[keyword reg] [variable abc]')
- MT('variables', '[variable _leading_underscore]', '[variable _if]', '[number 12] [variable foo]', '[variable foo] [number 14]')
- MT('tick_defines', '[def `FOO]', '[def `foo]', '[def `FOO_bar]')
- MT('system_calls', '[meta $display]', '[meta $vpi_printf]')
- MT('line_comment', '[comment // Hello world]')
- // Alignment tests
- MT(
- 'align_port_map_style1',
- /**
- * mod mod(.a(a),
- * .b(b)
- * );
- */
- '[variable mod] [variable mod][bracket (].[variable a][bracket (][variable a][bracket )],',
- ' .[variable b][bracket (][variable b][bracket )]',
- ' [bracket )];',
- ''
- )
- MT(
- 'align_port_map_style2',
- /**
- * mod mod(
- * .a(a),
- * .b(b)
- * );
- */
- '[variable mod] [variable mod][bracket (]',
- ' .[variable a][bracket (][variable a][bracket )],',
- ' .[variable b][bracket (][variable b][bracket )]',
- '[bracket )];',
- ''
- )
- MT(
- 'align_assignments',
- /**
- * always @(posedge clk) begin
- * if (rst)
- * data_out <= 8'b0 +
- * 8'b1;
- * else
- * data_out = 8'b0 +
- * 8'b1;
- * data_out =
- * 8'b0 + 8'b1;
- * end
- */
- '[keyword always] [def @][bracket (][keyword posedge] [variable clk][bracket )] [keyword begin]',
- ' [keyword if] [bracket (][variable rst][bracket )]',
- " [variable data_out] [meta <=] [number 8'b0] [meta +]",
- " [number 8'b1];",
- ' [keyword else]',
- " [variable data_out] [meta =] [number 8'b0] [meta +]",
- " [number 8'b1];",
- " [variable data_out] [meta =] [number 8'b0] [meta +]",
- " [number 8'b1];",
- '[keyword end]',
- ''
- )
- // Indentation tests
- MT('indent_single_statement_if', '[keyword if] [bracket (][variable foo][bracket )]', ' [keyword break];', '')
- MT('no_indent_after_single_line_if', '[keyword if] [bracket (][variable foo][bracket )] [keyword break];', '')
- MT('indent_after_if_begin_same_line', '[keyword if] [bracket (][variable foo][bracket )] [keyword begin]', ' [keyword break];', ' [keyword break];', '[keyword end]', '')
- MT('indent_after_if_begin_next_line', '[keyword if] [bracket (][variable foo][bracket )]', ' [keyword begin]', ' [keyword break];', ' [keyword break];', ' [keyword end]', '')
- MT('indent_single_statement_if_else', '[keyword if] [bracket (][variable foo][bracket )]', ' [keyword break];', '[keyword else]', ' [keyword break];', '')
- MT(
- 'indent_if_else_begin_same_line',
- '[keyword if] [bracket (][variable foo][bracket )] [keyword begin]',
- ' [keyword break];',
- ' [keyword break];',
- '[keyword end] [keyword else] [keyword begin]',
- ' [keyword break];',
- ' [keyword break];',
- '[keyword end]',
- ''
- )
- MT(
- 'indent_if_else_begin_next_line',
- '[keyword if] [bracket (][variable foo][bracket )]',
- ' [keyword begin]',
- ' [keyword break];',
- ' [keyword break];',
- ' [keyword end]',
- '[keyword else]',
- ' [keyword begin]',
- ' [keyword break];',
- ' [keyword break];',
- ' [keyword end]',
- ''
- )
- MT(
- 'indent_if_nested_without_begin',
- '[keyword if] [bracket (][variable foo][bracket )]',
- ' [keyword if] [bracket (][variable foo][bracket )]',
- ' [keyword if] [bracket (][variable foo][bracket )]',
- ' [keyword break];',
- ''
- )
- MT(
- 'indent_case',
- '[keyword case] [bracket (][variable state][bracket )]',
- ' [variable FOO]:',
- ' [keyword break];',
- ' [variable BAR]:',
- ' [keyword break];',
- '[keyword endcase]',
- ''
- )
- MT('unindent_after_end_with_preceding_text', '[keyword begin]', ' [keyword break]; [keyword end]', '')
- MT('export_function_one_line_does_not_indent', '[keyword export] [string "DPI-C"] [keyword function] [variable helloFromSV];', '')
- MT('export_task_one_line_does_not_indent', '[keyword export] [string "DPI-C"] [keyword task] [variable helloFromSV];', '')
- MT('export_function_two_lines_indents_properly', '[keyword export]', ' [string "DPI-C"] [keyword function] [variable helloFromSV];', '')
- MT('export_task_two_lines_indents_properly', '[keyword export]', ' [string "DPI-C"] [keyword task] [variable helloFromSV];', '')
- MT('import_function_one_line_does_not_indent', '[keyword import] [string "DPI-C"] [keyword function] [variable helloFromC];', '')
- MT('import_task_one_line_does_not_indent', '[keyword import] [string "DPI-C"] [keyword task] [variable helloFromC];', '')
- MT('import_package_single_line_does_not_indent', '[keyword import] [variable p]::[variable x];', '[keyword import] [variable p]::[variable y];', '')
- MT(
- 'covergroup_with_function_indents_properly',
- '[keyword covergroup] [variable cg] [keyword with] [keyword function] [variable sample][bracket (][keyword bit] [variable b][bracket )];',
- ' [variable c] : [keyword coverpoint] [variable c];',
- '[keyword endgroup]: [variable cg]',
- ''
- )
- MT(
- 'indent_uvm_macros',
- /**
- * `uvm_object_utils_begin(foo)
- * `uvm_field_event(foo, UVM_ALL_ON)
- * `uvm_object_utils_end
- */
- '[def `uvm_object_utils_begin][bracket (][variable foo][bracket )]',
- ' [def `uvm_field_event][bracket (][variable foo], [variable UVM_ALL_ON][bracket )]',
- '[def `uvm_object_utils_end]',
- ''
- )
- MT(
- 'indent_uvm_macros2',
- /**
- * `uvm_do_with(mem_read,{
- * bar_nb == 0;
- * })
- */
- '[def `uvm_do_with][bracket (][variable mem_read],[bracket {]',
- ' [variable bar_nb] [meta ==] [number 0];',
- '[bracket })]',
- ''
- )
- MT(
- 'indent_wait_disable_fork',
- /**
- * virtual task body();
- * repeat (20) begin
- * fork
- * `uvm_create_on(t,p_seq)
- * join_none
- * end
- * wait fork;
- * disable fork;
- * endtask : body
- */
- '[keyword virtual] [keyword task] [variable body][bracket ()];',
- ' [keyword repeat] [bracket (][number 20][bracket )] [keyword begin]',
- ' [keyword fork]',
- ' [def `uvm_create_on][bracket (][variable t],[variable p_seq][bracket )]',
- ' [keyword join_none]',
- ' [keyword end]',
- ' [keyword wait] [keyword fork];',
- ' [keyword disable] [keyword fork];',
- '[keyword endtask] : [variable body]',
- ''
- )
- MT(
- 'indent_typedef_class',
- /**
- * typedef class asdf;
- * typedef p p_t[];
- * typedef enum {
- * ASDF
- * } t;
- */
- '[keyword typedef] [keyword class] [variable asdf];',
- '[keyword typedef] [variable p] [variable p_t][bracket [[]]];',
- '[keyword typedef] [keyword enum] [bracket {]',
- ' [variable ASDF]',
- '[bracket }] [variable t];',
- ''
- )
- MT(
- 'indent_case_with_macro',
- /**
- * // It should be assumed that Macros can have ';' inside, or 'begin'/'end' blocks.
- * // As such, 'case' statement should indent correctly with macros inside.
- * case(foo)
- * ASDF : this.foo = seqNum;
- * ABCD : `update(f)
- * EFGH : `update(g)
- * endcase
- */
- '[keyword case][bracket (][variable foo][bracket )]',
- ' [variable ASDF] : [keyword this].[variable foo] [meta =] [variable seqNum];',
- ' [variable ABCD] : [def `update][bracket (][variable f][bracket )]',
- ' [variable EFGH] : [def `update][bracket (][variable g][bracket )]',
- '[keyword endcase]',
- ''
- )
- MT(
- 'indent_extern_function',
- /**
- * extern virtual function void do(ref packet trans);
- * extern virtual function void do2(ref packet trans);
- */
- '[keyword extern] [keyword virtual] [keyword function] [keyword void] [variable do1][bracket (][keyword ref] [variable packet] [variable trans][bracket )];',
- '[keyword extern] [keyword virtual] [keyword function] [keyword void] [variable do2][bracket (][keyword ref] [variable packet] [variable trans][bracket )];',
- ''
- )
- MT(
- 'indent_assignment',
- /**
- * for (int i=1;i < fun;i++) begin
- * foo = 2 << asdf || 11'h35 >> abcd
- * && 8'h6 | 1'b1;
- * end
- */
- '[keyword for] [bracket (][keyword int] [variable i][meta =][number 1];[variable i] [meta <] [variable fun];[variable i][meta ++][bracket )] [keyword begin]',
- " [variable foo] [meta =] [number 2] [meta <<] [variable asdf] [meta ||] [number 11'h35] [meta >>] [variable abcd]",
- " [meta &&] [number 8'h6] [meta |] [number 1'b1];",
- '[keyword end]',
- ''
- )
- MT(
- 'indent_foreach_constraint',
- /**
- * `uvm_rand_send_with(wrTlp, {
- * length ==1;
- * foreach (Data[i]) {
- * payload[i] == Data[i];
- * }
- * })
- */
- '[def `uvm_rand_send_with][bracket (][variable wrTlp], [bracket {]',
- ' [variable length] [meta ==][number 1];',
- ' [keyword foreach] [bracket (][variable Data][bracket [[][variable i][bracket ]])] [bracket {]',
- ' [variable payload][bracket [[][variable i][bracket ]]] [meta ==] [variable Data][bracket [[][variable i][bracket ]]];',
- ' [bracket }]',
- '[bracket })]',
- ''
- )
- MT(
- 'indent_compiler_directives',
- /**
- * `ifdef DUT
- * `else
- * `ifndef FOO
- * `define FOO
- * `endif
- * `endif
- * `timescale 1ns/1ns
- */
- '[def `ifdef] [variable DUT]',
- '[def `else]',
- ' [def `ifndef] [variable FOO]',
- ' [def `define] [variable FOO]',
- ' [def `endif]',
- '[def `endif]',
- '[def `timescale] [number 1][variable ns][meta /][number 1][variable ns]',
- ''
- )
- })()
|