changeset 877:56e26ce1a5ce draft

feat: improve verilog support
author Zeger Van de Vannet <zeger@vandevan.net>
date Tue, 16 Apr 2024 19:08:02 +0200
parents 8589883596fd
children 837fdac1f972
files dot_config/helix/languages.toml dot_config/helix/runtime/queries/verilog/highlights.scm dot_config/helix/runtime/queries/verilog/textobjects.scm
diffstat 3 files changed, 342 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/dot_config/helix/languages.toml	Thu Apr 25 10:05:40 2024 +0200
+++ b/dot_config/helix/languages.toml	Tue Apr 16 19:08:02 2024 +0200
@@ -60,3 +60,12 @@
 [[grammar]]
 name = "verilog"
 source = { git = "https://github.com/gmlarumbe/tree-sitter-verilog.git", rev = "cd6e48b27d8bd7b192a8784b0171a39afa06f13d" }
+
+[[language]]
+name = "verilog"
+
+[language.auto-pairs]
+'"' = '"'
+'(' = ')'
+'{' = '}'
+'['= ']'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dot_config/helix/runtime/queries/verilog/highlights.scm	Tue Apr 16 19:08:02 2024 +0200
@@ -0,0 +1,327 @@
+; Keywords
+
+[
+  ; block delimiters
+  (module_keyword)
+  "endmodule"
+  "program"
+  "endprogram"
+  "class"
+  "endclass"
+  "interface"
+  "endinterface"
+  "package"
+  "endpackage"
+  "checker"
+  "endchecker"
+  "config"
+  "endconfig"
+
+  "pure"
+  "virtual"
+  "extends"
+  "implements"
+  "super"
+  (class_item_qualifier)
+
+  "parameter"
+  "localparam"
+  "defparam"
+  "assign"
+  "typedef"
+  "modport"
+  "fork"
+  "join"
+  "join_none"
+  "join_any"
+  "default"
+  "break"
+  "assert"
+  (unique_priority)
+  "tagged"
+  "extern"
+] @keyword
+
+[
+  "function"
+  "endfunction"
+
+  "task"
+  "endtask"
+] @keyword.function
+
+"return" @keyword.control.return
+
+[
+  "begin"
+  "end"
+] @label
+
+[
+  (always_keyword)
+  "generate"
+  "for"
+  "foreach"
+  "repeat"
+  "forever"
+  "initial"
+  "while"
+] @keyword.control
+
+[
+  "if"
+  "else"
+  (case_keyword)
+  "endcase"
+] @keyword.control.conditional
+
+(comment) @comment
+
+(include_compiler_directive) @keyword.directive
+(package_import_declaration
+ "import" @keyword.control.import)
+
+(package_import_declaration
+ (package_import_item
+  (package_identifier
+   (simple_identifier) @constant)))
+
+(text_macro_definition) @keyword.directive
+
+(text_macro_identifier
+ (simple_identifier) @keyword.directive)
+
+[
+ (id_directive)
+ (zero_directive)
+] @keyword.directive
+
+(package_scope
+ (package_identifier
+  (simple_identifier) @constant))
+
+(package_declaration
+ (package_identifier
+  (simple_identifier) @constant))
+
+(parameter_port_list
+ "#" @constructor)
+
+[
+  "="
+  "-"
+  "+"
+  "/"
+  "*"
+  "^"
+  "&"
+  "|"
+  "&&"
+  "||"
+  ":"
+  (unary_operator)
+  "{"
+  "}"
+  "'{"
+  "<="
+  "@"
+  "or"
+  "and"
+  "=="
+  "!="
+  "==="
+  "!=="
+  "-:"
+  "<"
+  ">"
+  ">="
+  "%"
+  ">>"
+  "<<"
+  "|="
+  (inc_or_dec_operator)
+] @keyword.operator
+
+(cast
+ ["'" "(" ")"] @keyword.operator)
+
+(edge_identifier) @constant
+
+[
+ (port_direction)
+ (input_declaration)
+ (output_declaration)
+] @label
+
+(port_identifier) @variable.parameter
+
+
+[
+  (net_type)
+  (integer_vector_type)
+  (integer_atom_type)
+] @type.builtin
+
+[
+  "signed"
+  "unsigned"
+] @label
+
+(data_type
+ (simple_identifier) @type)
+
+(method_call_body
+  (method_identifier) @variable.other.member)
+
+(interface_identifier
+ (simple_identifier) @type)
+
+(modport_identifier
+ (modport_identifier
+  (simple_identifier) @variable.other.member))
+
+(net_port_type1
+ (simple_identifier) @type)
+
+[
+  (double_quoted_string)
+  (string_literal)
+] @string
+
+[
+  (include_compiler_directive)
+  (default_nettype_compiler_directive)
+  (timescale_compiler_directive)
+] @keyword.directive
+
+; begin/end label
+(seq_block
+ (simple_identifier) @comment)
+
+[
+ ";"
+ "::"
+ ","
+ "."
+] @punctuation.delimiter
+
+
+(default_nettype_compiler_directive
+ (default_nettype_value) @string)
+
+(text_macro_identifier
+ (simple_identifier) @function.macro)
+
+(module_declaration
+ (module_header
+  (simple_identifier) @constructor))
+
+(class_constructor_declaration
+ "new" @constructor)
+
+(parameter_identifier
+ (simple_identifier) @variable.parameter)
+
+[
+  (integral_number)
+  (unsigned_number)
+  (unbased_unsized_literal)
+] @constant.numeric
+
+(time_unit) @constant
+
+(checker_instantiation
+ (checker_identifier
+  (simple_identifier) @constructor))
+
+(module_instantiation
+ (simple_identifier) @type)
+
+(name_of_instance
+ (instance_identifier
+  (simple_identifier) @variable))
+
+(interface_port_declaration
+ (interface_identifier
+  (simple_identifier) @type))
+
+(net_declaration
+ (simple_identifier) @type)
+
+(lifetime) @label
+
+(function_identifier 
+ (function_identifier 
+  (simple_identifier) @function))
+
+(function_subroutine_call 
+ (subroutine_call
+  (tf_call
+   (simple_identifier) @function)))
+
+(function_subroutine_call 
+ (subroutine_call
+  (system_tf_call
+   (system_tf_identifier) @function.builtin)))
+
+(task_identifier
+ (task_identifier
+  (simple_identifier) @function.method))
+
+;;TODO: fixme
+;(assignment_pattern_expression
+ ;(assignment_pattern
+  ;(parameter_identifier) @variable.other.member))
+
+(type_declaration
+  (data_type ["packed"] @label))
+
+(struct_union) @type
+
+[
+  "enum"
+] @type
+
+(enum_name_declaration
+ (enum_identifier
+  (simple_identifier) @constant))
+
+(type_declaration
+ (simple_identifier) @type)
+
+[
+  (integer_atom_type)
+  (non_integer_type)
+  "genvar"
+] @type.builtin
+
+(struct_union_member
+ (list_of_variable_decl_assignments
+  (variable_decl_assignment
+   (simple_identifier) @variable.other.member)))
+
+(member_identifier
+ (simple_identifier) @variable.other.member)
+
+(struct_union_member
+ (data_type_or_void
+  (data_type
+   (simple_identifier) @type)))
+
+(type_declaration
+ (simple_identifier) @type)
+
+(generate_block_identifier) @comment
+
+[
+  "["
+  "]"
+  "("
+  ")"
+] @punctuation.bracket
+
+(attribute_instance) @attribute
+(attribute_instance
+ (attr_spec) @label)
+
+(ERROR) @error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dot_config/helix/runtime/queries/verilog/textobjects.scm	Tue Apr 16 19:08:02 2024 +0200
@@ -0,0 +1,6 @@
+
+(function_declaration
+ (function_body_declaration
+  (function_identifier
+     (function_identifier
+        (simple_identifier) @function.inside)))) @function.around
\ No newline at end of file