aboutsummaryrefslogtreecommitdiff
path: root/runtime/queries
diff options
context:
space:
mode:
authorAndrey Tkachenko2022-05-24 17:52:32 +0000
committerGitHub2022-05-24 17:52:32 +0000
commit67fe16008e60893e1dfc9ef237c2421ebb703841 (patch)
tree0bec678cdc0b5ca2bcac7b650e191763f6c6af70 /runtime/queries
parent386dccc84ed4cdeea6a9aed727c04bbb0facc374 (diff)
Basic verilog support (#2552)
Diffstat (limited to 'runtime/queries')
-rw-r--r--runtime/queries/verilog/highlights.scm311
-rw-r--r--runtime/queries/verilog/injections.scm2
-rw-r--r--runtime/queries/verilog/locals.scm61
-rw-r--r--runtime/queries/verilog/textobjects.scm6
4 files changed, 380 insertions, 0 deletions
diff --git a/runtime/queries/verilog/highlights.scm b/runtime/queries/verilog/highlights.scm
new file mode 100644
index 00000000..97ec06e3
--- /dev/null
+++ b/runtime/queries/verilog/highlights.scm
@@ -0,0 +1,311 @@
+; Keywords
+
+[
+ ; block delimeters
+ (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_identifier
+ (simple_identifier) @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) @label
+(port_identifier
+ (simple_identifier) @variable)
+
+[
+ (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) @constructor)
+
+(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
+
+(ERROR) @error
diff --git a/runtime/queries/verilog/injections.scm b/runtime/queries/verilog/injections.scm
new file mode 100644
index 00000000..30804d65
--- /dev/null
+++ b/runtime/queries/verilog/injections.scm
@@ -0,0 +1,2 @@
+((comment) @injection.content
+ (#set! injection.language "comment")) \ No newline at end of file
diff --git a/runtime/queries/verilog/locals.scm b/runtime/queries/verilog/locals.scm
new file mode 100644
index 00000000..507ddea4
--- /dev/null
+++ b/runtime/queries/verilog/locals.scm
@@ -0,0 +1,61 @@
+[
+ (loop_generate_construct)
+ (loop_statement)
+ (conditional_statement)
+ (case_item)
+ (function_declaration)
+ (always_construct)
+ (module_declaration)
+] @scope
+
+(data_declaration
+ (list_of_variable_decl_assignments
+ (variable_decl_assignment
+ (simple_identifier) @definition.var)))
+
+(genvar_initialization
+ (genvar_identifier
+ (simple_identifier) @definition.var))
+
+(for_initialization
+ (for_variable_declaration
+ (simple_identifier) @definition.var))
+
+(net_declaration
+ (list_of_net_decl_assignments
+ (net_decl_assignment
+ (simple_identifier) @definition.var)))
+
+(ansi_port_declaration
+ (port_identifier
+ (simple_identifier) @definition.var))
+
+(parameter_declaration
+ (list_of_param_assignments
+ (param_assignment
+ (parameter_identifier
+ (simple_identifier) @definition.parameter))))
+
+(local_parameter_declaration
+ (list_of_param_assignments
+ (param_assignment
+ (parameter_identifier
+ (simple_identifier) @definition.parameter))))
+
+;; TODO: fixme
+;(function_declaration
+ ;(function_identifier
+ ;(simple_identifier) @definition.function))
+
+(function_declaration
+ (function_body_declaration
+ (function_identifier
+ (function_identifier
+ (simple_identifier) @definition.function))))
+
+(tf_port_item1
+ (port_identifier
+ (simple_identifier) @definition.parameter))
+
+; too broad, now includes types etc
+(simple_identifier) @reference
diff --git a/runtime/queries/verilog/textobjects.scm b/runtime/queries/verilog/textobjects.scm
new file mode 100644
index 00000000..3b1c0fe5
--- /dev/null
+++ b/runtime/queries/verilog/textobjects.scm
@@ -0,0 +1,6 @@
+
+(function_declaration
+ (function_body_declaration
+ (function_identifier
+ (function_identifier
+ (simple_identifier) @function.inside)))) @funtions.around \ No newline at end of file