mirror of
https://github.com/helix-editor/helix
synced 2026-03-09 09:16:21 +01:00
322 lines
9.6 KiB
Scheme
322 lines
9.6 KiB
Scheme
;; Comments
|
|
(one_line_comment) @comment
|
|
(block_comment) @comment
|
|
|
|
|
|
;; Strings
|
|
(string_literal) @string
|
|
(quoted_string) @string ; `include strings
|
|
(system_lib_string) @string
|
|
|
|
|
|
;; Keywords
|
|
(["begin" "end" "this"]) @keyword
|
|
(["input" "output" "inout" "ref"]) @keyword
|
|
(["alias" "and" "assert" "assign" "assume" "before" "bind" "binsof" "break"
|
|
"case" "checker" "class" "class" "clocking" "config" "const" "constraint"
|
|
"cover" "covergroup" "coverpoint" "cross" "default" "defparam" "disable"
|
|
"do" "else" "endcase" "endchecker" "endclass" "endclocking" "endconfig"
|
|
"endfunction" "endgenerate" "endgroup" "endinterface" "endmodule"
|
|
"endpackage" "endprogram" "endproperty" "endsequence" "endtask" "enum"
|
|
"extends" "extern" "final" "first_match" "for" "force" "foreach" "forever"
|
|
"fork" "forkjoin" "function" "generate" "genvar" "if" "iff" "illegal_bins"
|
|
"implements" "import" "initial" "inside" "interconnect" "interface"
|
|
"intersect" "join" "join_any" "join_none" "local" "localparam" "matches"
|
|
"modport" "new" "null" "option" "or" "package" "packed" "parameter"
|
|
"program" "property" "pure" "randcase" "randomize" "release" "repeat"
|
|
"return" "sequence" "showcancelled" "soft" "solve" "struct" "super" "tagged"
|
|
"task" "timeprecision" "timeunit" "type" "typedef" "union" "unique"
|
|
"virtual" "wait" "while" "with"
|
|
(always_keyword) ; always, always_comb, always_latch, always_ff
|
|
(bins_keyword) ; bins, illegal_bins, ignore_bins
|
|
(case_keyword) ; case, casez, casex
|
|
(class_item_qualifier) ; static, protected, local
|
|
(edge_identifier) ; posedge, negedge, edge
|
|
(lifetime) ; static, automatic
|
|
(module_keyword) ; module, macromodule
|
|
(random_qualifier) ; rand, randc
|
|
(unique_priority)]) @keyword ; unique, unique0, priority
|
|
|
|
|
|
;; Preprocessor directives and macro usage
|
|
(["`include" "`define" "`ifdef" "`ifndef" "`timescale" "`default_nettype"
|
|
"`elsif" "`undef" (resetall_compiler_directive) (undefineall_compiler_directive)
|
|
"`endif" "`else" "`unconnected_drive" (celldefine_compiler_directive)
|
|
(endcelldefine_compiler_directive) (endkeywords_directive) "`line"
|
|
"`begin_keywords" "`pragma" "`__FILE__" "`__LINE__"]) @string.special
|
|
(text_macro_usage
|
|
(simple_identifier) @string.special)
|
|
|
|
|
|
;; Delimiters, operators
|
|
([";" ":" "," "::"
|
|
"=" "?" "|=" "&=" "^="
|
|
"|->" "|=>" "->"
|
|
":=" ":/" "-:" "+:"]) @punctuation.delimiter
|
|
(["(" ")"]) @punctuation.bracket
|
|
(["[" "]"]) @punctuation.bracket
|
|
(["{" "}" "'{"]) @punctuation.bracket
|
|
|
|
(["."] @operator)
|
|
(["+" "-" "*" "/" "%" "**"]) @operator
|
|
(["<" "<=" ">" ">="]) @operator
|
|
(["===" "!==" "==" "!="]) @operator
|
|
(["&&" "||" "!"]) @operator
|
|
(["~" "&" "~&" "|" "~|" "^" "~^"]) @operator
|
|
(["<<" ">>" "<<<" ">>>"]) @operator
|
|
|
|
(["@" "#" "##"]) @operator
|
|
(assignment_operator) @operator
|
|
(unary_operator) @operator
|
|
(inc_or_dec_operator) @operator
|
|
(stream_operator) @operator
|
|
(event_trigger) @operator
|
|
(["->" "->>"]) @operator
|
|
|
|
|
|
;; Declarations
|
|
;; Module/interface/program/package/class/checker
|
|
(module_nonansi_header
|
|
name: (simple_identifier) @function)
|
|
(module_ansi_header
|
|
name: (simple_identifier) @function)
|
|
(interface_nonansi_header
|
|
name: (simple_identifier) @function)
|
|
(interface_ansi_header
|
|
name: (simple_identifier) @function)
|
|
(program_nonansi_header
|
|
name: (simple_identifier) @function)
|
|
(program_ansi_header
|
|
name: (simple_identifier) @function)
|
|
(package_declaration
|
|
name: (simple_identifier) @function)
|
|
(class_declaration
|
|
name: (simple_identifier) @function)
|
|
(interface_class_declaration
|
|
name: (simple_identifier) @function)
|
|
(checker_declaration
|
|
name: (simple_identifier) @function)
|
|
(class_declaration
|
|
(class_type
|
|
(simple_identifier) @type)) ; Parent class
|
|
;; Function/task/methods
|
|
(function_body_declaration
|
|
name: (simple_identifier) @function)
|
|
(task_body_declaration
|
|
name: (simple_identifier) @function)
|
|
(function_prototype
|
|
(data_type_or_void)
|
|
name: (simple_identifier) @function)
|
|
(task_prototype
|
|
name: (simple_identifier) @function)
|
|
(class_scope ; Definition of extern defined methods
|
|
(class_type
|
|
(simple_identifier)) @function)
|
|
|
|
|
|
;; Types
|
|
[(integer_vector_type) ; bit, logic, reg
|
|
(integer_atom_type) ; byte, shortint, int, longint, integer, time
|
|
(non_integer_type) ; shortreal, real, realtime
|
|
(net_type) ; supply0, supply1, tri, triand, trior, trireg, tri0, tri1, uwire, wire, wand, wor
|
|
["string" "event" "signed" "unsigned" "chandle"]] @type
|
|
(data_type_or_implicit
|
|
(data_type
|
|
(simple_identifier)) @type)
|
|
(data_type
|
|
(class_type
|
|
(simple_identifier) @type
|
|
(parameter_value_assignment)))
|
|
(data_type
|
|
(class_type
|
|
(simple_identifier) @operator
|
|
(simple_identifier) @type))
|
|
(net_port_header
|
|
(net_port_type
|
|
(simple_identifier) @type))
|
|
(variable_port_header
|
|
(variable_port_type
|
|
(data_type
|
|
(simple_identifier) @type)))
|
|
(["void'" (data_type_or_void)]) @type ; void cast of task called as a function
|
|
(interface_port_header ; Interfaces with modports
|
|
interface_name: (simple_identifier) @type
|
|
modport_name: (simple_identifier) @type)
|
|
(type_assignment
|
|
name: (simple_identifier) @type)
|
|
(net_declaration ; User type variable declaration
|
|
(simple_identifier) @type)
|
|
(enum_base_type ; Enum base type with user type
|
|
(simple_identifier) @type)
|
|
|
|
|
|
;; Instances
|
|
;; Module names
|
|
(module_instantiation
|
|
instance_type: (simple_identifier) @namespace)
|
|
(interface_instantiation
|
|
instance_type: (simple_identifier) @namespace)
|
|
(program_instantiation
|
|
instance_type: (simple_identifier) @namespace)
|
|
(checker_instantiation
|
|
instance_type: (simple_identifier) @namespace)
|
|
(udp_instantiation
|
|
instance_type: (simple_identifier) @namespace)
|
|
(gate_instantiation
|
|
[(cmos_switchtype)
|
|
(mos_switchtype)
|
|
(enable_gatetype)
|
|
(n_input_gatetype)
|
|
(n_output_gatetype)
|
|
(pass_en_switchtype)
|
|
(pass_switchtype)
|
|
"pulldown" "pullup"]
|
|
@namespace)
|
|
;; Instance names
|
|
(name_of_instance
|
|
instance_name: (simple_identifier) @constant)
|
|
;; Instance parameters
|
|
(module_instantiation
|
|
(parameter_value_assignment
|
|
(list_of_parameter_value_assignments
|
|
(named_parameter_assignment
|
|
(simple_identifier) @constant))))
|
|
(module_instantiation
|
|
(parameter_value_assignment
|
|
(list_of_parameter_value_assignments
|
|
(ordered_parameter_assignment
|
|
(param_expression
|
|
(data_type
|
|
(simple_identifier) @constant))))))
|
|
;; Port names
|
|
(named_port_connection
|
|
port_name: (simple_identifier) @constant)
|
|
(named_parameter_assignment
|
|
(simple_identifier) @constant)
|
|
(named_checker_port_connection
|
|
port_name: (simple_identifier) @constant)
|
|
;; Bind statements
|
|
(bind_directive
|
|
(bind_target_scope
|
|
(simple_identifier) @constant))
|
|
|
|
|
|
;; Numbers
|
|
(hex_number
|
|
size: (unsigned_number) @constant.numeric
|
|
base: (hex_base) @punctuation.delimiter)
|
|
(decimal_number
|
|
size: (unsigned_number) @constant.numeric
|
|
base: (decimal_base) @punctuation.delimiter)
|
|
(octal_number
|
|
size: (unsigned_number) @constant.numeric
|
|
base: (octal_base) @punctuation.delimiter)
|
|
(binary_number
|
|
size: (unsigned_number) @constant.numeric
|
|
base: (binary_base) @punctuation.delimiter)
|
|
;; Same as before but without the width (width extension)
|
|
(hex_number
|
|
base: (hex_base) @punctuation.delimiter)
|
|
(decimal_number
|
|
base: (decimal_base) @punctuation.delimiter)
|
|
(octal_number
|
|
base: (octal_base) @punctuation.delimiter)
|
|
(binary_number
|
|
base: (binary_base) @punctuation.delimiter)
|
|
|
|
|
|
;; Arrays
|
|
(unpacked_dimension
|
|
[(constant_expression) (constant_range)] @constant.numeric)
|
|
(packed_dimension
|
|
(constant_range) @constant.numeric)
|
|
(select
|
|
(constant_range) @constant.numeric)
|
|
(constant_select
|
|
(constant_range
|
|
(constant_expression) @constant.numeric))
|
|
(constant_bit_select
|
|
(constant_expression) @constant.numeric)
|
|
(bit_select
|
|
(expression) @constant.numeric)
|
|
(indexed_range
|
|
(expression) @constant.numeric
|
|
(constant_expression) @constant.numeric)
|
|
(constant_indexed_range
|
|
(constant_expression) @constant.numeric)
|
|
(value_range ; inside {[min_range:max_range]}, place here to apply override
|
|
(expression) @constant)
|
|
(dynamic_array_new
|
|
(expression) @constant)
|
|
|
|
|
|
;; Misc
|
|
;; Timeunit
|
|
((time_unit) @constant.builtin)
|
|
;; Enum labels
|
|
(enum_name_declaration
|
|
(simple_identifier) @constant.builtin)
|
|
;; Case item label (not radix)
|
|
(case_item_expression
|
|
(expression
|
|
(primary
|
|
(hierarchical_identifier
|
|
(simple_identifier) @constant.builtin))))
|
|
;; Hierarchical references, interface signals, class members, package scope
|
|
(hierarchical_identifier
|
|
(simple_identifier) @punctuation.delimiter
|
|
"."
|
|
(simple_identifier))
|
|
(method_call
|
|
(primary) @punctuation.delimiter
|
|
(["." "::"])
|
|
(method_call_body))
|
|
(package_scope
|
|
(simple_identifier) @punctuation.delimiter)
|
|
(method_call
|
|
(primary
|
|
(select
|
|
(simple_identifier) @punctuation.delimiter))
|
|
(method_call_body))
|
|
;; Attributes
|
|
(["(*" "*)"] @constant)
|
|
(attribute_instance
|
|
(attr_spec (simple_identifier) @attribute))
|
|
;; Typedefs
|
|
(type_declaration
|
|
(class_type (simple_identifier) @type)
|
|
type_name: (simple_identifier) @constant)
|
|
(type_declaration
|
|
type_name: (simple_identifier) @constant)
|
|
("typedef" "class" (simple_identifier) @constant)
|
|
;; Coverpoint & cross labels
|
|
(cover_point
|
|
name: (simple_identifier) @constant)
|
|
(cover_cross
|
|
name: (simple_identifier) @constant)
|
|
;; Loop variables (foreach[i])
|
|
(loop_variables
|
|
(simple_identifier) @constant)
|
|
;; Bins values
|
|
(bins_or_options
|
|
(expression
|
|
(primary
|
|
(concatenation
|
|
(expression) @constant))))
|
|
;; Bins ranges
|
|
(covergroup_value_range
|
|
(expression) @constant)
|
|
;; Queue dimension
|
|
(("$") @punctuation.special)
|
|
;; Parameterized classes (e.g: uvm_config_db #(axi_stream_agent_config))
|
|
(class_type
|
|
(parameter_value_assignment
|
|
(list_of_parameter_value_assignments) @punctuation.delimiter))
|
|
|
|
|
|
;; System-tf
|
|
([(system_tf_identifier) ; System task/function
|
|
"$fatal" "$error" "$warning" "$info" ; (severity_system_task)
|
|
"$stop" "$finish" "$exit"]) ; (simulation_control_task)
|
|
@function.builtin
|