2016-07-23 13:29:20 +08:00
|
|
|
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
2019-10-15 16:40:42 +08:00
|
|
|
// Distributed under an MIT license: https://codemirror.net/LICENSE
|
2016-07-23 13:29:20 +08:00
|
|
|
|
|
|
|
(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 )];",
|
|
|
|
""
|
|
|
|
);
|
|
|
|
|
|
|
|
// 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]",
|
|
|
|
""
|
|
|
|
);
|
|
|
|
|
|
|
|
})();
|