UNPKG

tm-grammars

Version:
1,420 lines (1,419 loc) 39.2 kB
{ "displayName": "SystemVerilog", "fileTypes": [ "v", "vh", "sv", "svh" ], "name": "system-verilog", "patterns": [ { "include": "#comments" }, { "include": "#strings" }, { "include": "#typedef-enum-struct-union" }, { "include": "#typedef" }, { "include": "#functions" }, { "include": "#keywords" }, { "include": "#tables" }, { "include": "#function-task" }, { "include": "#module-declaration" }, { "include": "#class-declaration" }, { "include": "#enum-struct-union" }, { "include": "#sequence" }, { "include": "#all-types" }, { "include": "#module-parameters" }, { "include": "#module-no-parameters" }, { "include": "#port-net-parameter" }, { "include": "#system-tf" }, { "include": "#assertion" }, { "include": "#bind-directive" }, { "include": "#cast-operator" }, { "include": "#storage-scope" }, { "include": "#attributes" }, { "include": "#imports" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#identifiers" }, { "include": "#selects" } ], "repository": { "all-types": { "patterns": [ { "include": "#built-ins" }, { "include": "#modifiers" } ] }, "assertion": { "captures": { "1": { "name": "entity.name.goto-label.php" }, "2": { "name": "keyword.operator.systemverilog" }, "3": { "name": "keyword.sva.systemverilog" } }, "match": "\\b([A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]*(:)[\\t\\n\\r ]*(assert|assume|cover|restrict)\\b" }, "attributes": { "begin": "(?<!@[\\t\\n\\r ]?)\\(\\*", "beginCaptures": { "0": { "name": "punctuation.attribute.rounds.begin" } }, "end": "\\*\\)", "endCaptures": { "0": { "name": "punctuation.attribute.rounds.end" } }, "name": "meta.attribute.systemverilog", "patterns": [ { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "keyword.operator.assignment.systemverilog" } }, "match": "([A-Z_a-z][$0-9A-Z_a-z]*)(?:[\\t\\n\\r ]*(=)[\\t\\n\\r ]*)?" }, { "include": "#constants" }, { "include": "#strings" } ] }, "base-grammar": { "patterns": [ { "include": "#all-types" }, { "include": "#comments" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#strings" }, { "captures": { "1": { "name": "storage.type.interface.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b([A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]+[A-Z_a-z][\\t\\n ,0-9=A-Z_a-z]*" }, { "include": "#storage-scope" } ] }, "bind-directive": { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.type.module.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(bind)[\\t\\n\\r ]+([A-Z_a-z][$.0-9A-Z_a-z]*)\\b", "name": "meta.definition.systemverilog" }, "built-ins": { "patterns": [ { "match": "[\\t\\n\\r ]*\\b(bit|logic|reg)\\b", "name": "storage.type.vector.systemverilog" }, { "match": "[\\t\\n\\r ]*\\b(byte|shortint|int|longint|integer|time|genvar)\\b", "name": "storage.type.atom.systemverilog" }, { "match": "[\\t\\n\\r ]*\\b(shortreal|real|realtime)\\b", "name": "storage.type.notint.systemverilog" }, { "match": "[\\t\\n\\r ]*\\b(supply[01]|tri|triand|trior|trireg|tri[01]|uwire|wire|wand|wor)\\b", "name": "storage.type.net.systemverilog" }, { "match": "[\\t\\n\\r ]*\\b(genvar|var|void|signed|unsigned|string|const|process)\\b", "name": "storage.type.built-in.systemverilog" }, { "match": "[\\t\\n\\r ]*\\b(uvm_(?:root|transaction|component|monitor|driver|test|env|object|agent|sequence_base|sequence_item|sequence_state|sequencer|sequencer_base|sequence|component_registry|analysis_imp|analysis_port|analysis_export|config_db|active_passive_enum|phase|verbosity|tlm_analysis_fifo|tlm_fifo|report_server|objection|recorder|domain|reg_field|reg_block|reg|bitstream_t|radix_enum|printer|packer|comparer|scope_stack))\\b", "name": "storage.type.uvm.systemverilog" } ] }, "cast-operator": { "captures": { "1": { "patterns": [ { "include": "#built-ins" }, { "include": "#constants" }, { "match": "[A-Z_a-z][$0-9A-Z_a-z]*", "name": "storage.type.user-defined.systemverilog" } ] }, "2": { "name": "keyword.operator.cast.systemverilog" } }, "match": "[\\t\\n\\r ]*([0-9]+|[A-Z_a-z][$0-9A-Z_a-z]*)(')(?=\\()", "name": "meta.cast.systemverilog" }, "class-declaration": { "begin": "[\\t\\n\\r ]*\\b(virtual[\\t\\n\\r ]+)?(class)(?:[\\t\\n\\r ]+((?:st|autom)atic))?[\\t\\n\\r ]+([A-Z_a-z][$0-:A-Z_a-z]*)(?:[\\t\\n\\r ]+(extends|implements)[\\t\\n\\r ]+([A-Z_a-z][$0-:A-Z_a-z]*))?", "beginCaptures": { "1": { "name": "storage.modifier.systemverilog" }, "2": { "name": "storage.type.class.systemverilog" }, "3": { "name": "storage.modifier.systemverilog" }, "4": { "name": "entity.name.type.class.systemverilog" }, "5": { "name": "keyword.control.systemverilog" }, "6": { "name": "entity.name.type.class.systemverilog" } }, "end": ";", "endCaptures": { "0": { "name": "punctuation.definition.class.end.systemverilog" } }, "name": "meta.class.systemverilog", "patterns": [ { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.type.class.systemverilog" }, "3": { "name": "entity.name.type.class.systemverilog" } }, "match": "[\\t\\n\\r ]+\\b(extends|implements)[\\t\\n\\r ]+([A-Z_a-z][$0-:A-Z_a-z]*)(?:[\\t\\n\\r ]*,[\\t\\n\\r ]*([A-Z_a-z][$0-:A-Z_a-z]*))*" }, { "captures": { "1": { "name": "storage.type.userdefined.systemverilog" }, "2": { "name": "keyword.operator.param.systemverilog" } }, "match": "[\\t\\n\\r ]+\\b([A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]*(#)\\(", "name": "meta.typedef.class.systemverilog" }, { "include": "#port-net-parameter" }, { "include": "#base-grammar" }, { "include": "#module-binding" }, { "include": "#identifiers" } ] }, "comments": { "patterns": [ { "begin": "/\\*", "beginCaptures": { "0": { "name": "punctuation.definition.comment.systemverilog" } }, "end": "\\*/", "endCaptures": { "0": { "name": "punctuation.definition.comment.systemverilog" } }, "name": "comment.block.systemverilog", "patterns": [ { "include": "#fixme-todo" } ] }, { "begin": "//", "beginCaptures": { "0": { "name": "punctuation.definition.comment.systemverilog" } }, "end": "$\\n?", "name": "comment.line.double-slash.systemverilog", "patterns": [ { "include": "#fixme-todo" } ] } ] }, "compiler-directives": { "name": "meta.preprocessor.systemverilog", "patterns": [ { "captures": { "1": { "name": "punctuation.definition.directive.systemverilog" }, "2": { "name": "string.regexp.systemverilog" } }, "match": "(`)(else|endif|endcelldefine|celldefine|nounconnected_drive|resetall|undefineall|end_keywords|__FILE__|__LINE__)\\b" }, { "captures": { "1": { "name": "punctuation.definition.directive.systemverilog" }, "2": { "name": "string.regexp.systemverilog" }, "3": { "name": "variable.other.constant.preprocessor.systemverilog" } }, "match": "(`)(ifdef|ifndef|elsif|define|undef|pragma)[\\t\\n\\r ]+([A-Z_a-z][$0-9A-Z_a-z]*)\\b" }, { "captures": { "1": { "name": "punctuation.definition.directive.systemverilog" }, "2": { "name": "string.regexp.systemverilog" } }, "match": "(`)(include|timescale|default_nettype|unconnected_drive|line|begin_keywords)\\b" }, { "begin": "(`)(protected)\\b", "beginCaptures": { "1": { "name": "punctuation.definition.directive.systemverilog" }, "2": { "name": "string.regexp.systemverilog" } }, "end": "(`)(endprotected)\\b", "endCaptures": { "1": { "name": "punctuation.definition.directive.systemverilog" }, "2": { "name": "string.regexp.systemverilog" } }, "name": "meta.crypto.systemverilog" }, { "captures": { "1": { "name": "punctuation.definition.directive.systemverilog" }, "2": { "name": "variable.other.constant.preprocessor.systemverilog" } }, "match": "(`)([A-Z_a-z][$0-9A-Z_a-z]*)\\b" } ] }, "constants": { "patterns": [ { "match": "(\\b[1-9][0-9_]*)?'([Ss]?[Bb][\\t\\n\\r ]*[01?XZxz][01?XZ_xz]*|[Ss]?[Oo][\\t\\n\\r ]*[0-7?XZxz][0-7?XZ_xz]*|[Ss]?[Dd][\\t\\n\\r ]*[0-9?XZxz][0-9?XZ_xz]*|[Ss]?[Hh][\\t\\n\\r ]*[?XZxz\\h][?XZ_xz\\h]*)(([Ee])([-+])?[0-9]+)?(?!['\\w])", "name": "constant.numeric.systemverilog" }, { "match": "'[01XZxz]", "name": "constant.numeric.bit.systemverilog" }, { "match": "\\b\\d[._\\d]*(?<!\\.)[Ee][-+]?[0-9]+\\b", "name": "constant.numeric.exp.systemverilog" }, { "match": "\\b\\d[._\\d]*(?![.\\d]|[\\t\\n\\r ]*(?:[Ee]|fs|ps|ns|us|ms|s))\\b", "name": "constant.numeric.decimal.systemverilog" }, { "match": "\\b\\d[.\\d]*[\\t\\n\\r ]*(?:[fmnpu]|)s\\b", "name": "constant.numeric.time.systemverilog" }, { "include": "#compiler-directives" }, { "match": "\\b(?:this|super|null)\\b", "name": "constant.language.systemverilog" }, { "match": "\\b([A-Z][0-9A-Z_]*)\\b", "name": "constant.other.net.systemverilog" }, { "match": "\\b(?<!\\.)([0-9A-Z_]+)(?!\\.)\\b", "name": "constant.numeric.parameter.uppercase.systemverilog" }, { "match": "\\.\\*", "name": "keyword.operator.quantifier.regexp" } ] }, "enum-struct-union": { "begin": "[\\t\\n\\r ]*\\b(enum|struct|union(?:[\\t\\n\\r ]+tagged)?|class|interface[\\t\\n\\r ]+class)(?:[\\t\\n\\r ]+(?!(?:pack|sign|unsign)ed)([A-Z_a-z][$0-9A-Z_a-z]*)?[\\t\\n\\r ]*(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])?)?(?:[\\t\\n\\r ]+(packed))?(?:[\\t\\n\\r ]+((?:|un)signed))?(?=[\\t\\n\\r ]*(?:\\{|$))", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "patterns": [ { "include": "#built-ins" } ] }, "3": { "patterns": [ { "include": "#selects" } ] }, "4": { "name": "storage.modifier.systemverilog" }, "5": { "name": "storage.modifier.systemverilog" } }, "end": "(?<=})[\\t\\n\\r ]*([A-Z_a-z][$0-9A-Z_a-z]*|(?<=^|[\\t\\n\\r ])\\\\[!-~]+(?=$|[\\t\\n\\r ]))[\\t\\n\\r ]*(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])?[\\t\\n\\r ]*[,;]", "endCaptures": { "1": { "patterns": [ { "include": "#identifiers" } ] }, "2": { "patterns": [ { "include": "#selects" } ] } }, "name": "meta.enum-struct-union.systemverilog", "patterns": [ { "include": "#keywords" }, { "include": "#base-grammar" }, { "include": "#identifiers" } ] }, "fixme-todo": { "patterns": [ { "match": "(?i:fixme)", "name": "invalid.broken.fixme.systemverilog" }, { "match": "(?i:todo)", "name": "invalid.unimplemented.todo.systemverilog" } ] }, "function-task": { "begin": "[\\t\\n\\r ]*(?:\\b(virtual)[\\t\\n\\r ]+)?\\b(function|task)\\b(?:[\\t\\n\\r ]+\\b((?:st|autom)atic)\\b)?", "beginCaptures": { "1": { "name": "storage.modifier.systemverilog" }, "2": { "name": "storage.type.function.systemverilog" }, "3": { "name": "storage.modifier.systemverilog" } }, "end": ";", "endCaptures": { "0": { "name": "punctuation.definition.function.end.systemverilog" } }, "name": "meta.function.systemverilog", "patterns": [ { "captures": { "1": { "name": "support.type.scope.systemverilog" }, "2": { "name": "keyword.operator.scope.systemverilog" }, "3": { "patterns": [ { "include": "#built-ins" }, { "match": "[A-Z_a-z][$0-9A-Z_a-z]*", "name": "storage.type.user-defined.systemverilog" } ] }, "4": { "patterns": [ { "include": "#modifiers" } ] }, "5": { "patterns": [ { "include": "#selects" } ] }, "6": { "name": "entity.name.function.systemverilog" } }, "match": "[\\t\\n\\r ]*(?:\\b([A-Z_a-z][$0-9A-Z_a-z]*)(::))?([A-Z_a-z][$0-9A-Z_a-z]*\\b[\\t\\n\\r ]+)?(?:\\b((?:|un)signed)\\b[\\t\\n\\r ]*)?(?:(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])[\\t\\n\\r ]*)?\\b([A-Z_a-z][$0-9A-Z_a-z]*)\\b[\\t\\n\\r ]*(?=[(;])" }, { "include": "#keywords" }, { "include": "#port-net-parameter" }, { "include": "#base-grammar" }, { "include": "#identifiers" } ] }, "functions": { "match": "[\\t\\n\\r ]*\\b(?!while|for|if|iff|else|case|casex|casez)([A-Z_a-z][$0-9A-Z_a-z]*)(?=[\\t\\n\\r ]*\\()", "name": "entity.name.function.systemverilog" }, "identifiers": { "patterns": [ { "match": "\\b[A-Z_a-z][$0-9A-Z_a-z]*\\b", "name": "variable.other.identifier.systemverilog" }, { "match": "(?<=^|[\\t\\n\\r ])\\\\[!-~]+(?=$|[\\t\\n\\r ])", "name": "string.regexp.identifier.systemverilog" } ] }, "imports": { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "support.type.scope.systemverilog" }, "3": { "name": "keyword.operator.scope.systemverilog" }, "4": { "patterns": [ { "include": "#operators" }, { "include": "#identifiers" } ] } }, "match": "[\\t\\n\\r ]*\\b((?:im|ex)port)[\\t\\n\\r ]+([A-Z_a-z][$0-9A-Z_a-z]*|\\*)[\\t\\n\\r ]*(::)[\\t\\n\\r ]*([A-Z_a-z][$0-9A-Z_a-z]*|\\*)[\\t\\n\\r ]*([,;])", "name": "meta.import.systemverilog" }, "keywords": { "patterns": [ { "captures": { "1": { "name": "keyword.other.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(edge|negedge|posedge|cell|config|defparam|design|disable|endgenerate|endspecify|event|generate|ifnone|incdir|instance|liblist|library|noshowcancelled|pulsestyle_onevent|pulsestyle_ondetect|scalared|showcancelled|specify|specparam|use|vectored)\\b" }, { "include": "#sv-control" }, { "include": "#sv-control-begin" }, { "include": "#sv-control-end" }, { "include": "#sv-definition" }, { "include": "#sv-cover-cross" }, { "include": "#sv-std" }, { "include": "#sv-option" }, { "include": "#sv-local" }, { "include": "#sv-rand" } ] }, "modifiers": { "match": "[\\t\\n\\r ]*\\b(?:(?:un)?signed|packed|small|medium|large|supply[01]|strong[01]|pull[01]|weak[01]|highz[01])\\b", "name": "storage.modifier.systemverilog" }, "module-binding": { "begin": "\\.([A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]*\\(", "beginCaptures": { "1": { "name": "support.function.port.systemverilog" } }, "end": "\\),?", "name": "meta.port.binding.systemverilog", "patterns": [ { "include": "#constants" }, { "include": "#comments" }, { "include": "#operators" }, { "include": "#strings" }, { "include": "#constants" }, { "include": "#storage-scope" }, { "include": "#cast-operator" }, { "include": "#system-tf" }, { "match": "\\bvirtual\\b", "name": "storage.modifier.systemverilog" }, { "include": "#identifiers" } ] }, "module-declaration": { "begin": "[\\t\\n\\r ]*\\b((?:macro)?module|interface|program|package|modport)[\\t\\n\\r ]+(?:((?:st|autom)atic)[\\t\\n\\r ]+)?([A-Z_a-z][$0-9A-Z_a-z]*)\\b", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "storage.modifier.systemverilog" }, "3": { "name": "entity.name.type.module.systemverilog" } }, "end": ";", "endCaptures": { "0": { "name": "punctuation.definition.module.end.systemverilog" } }, "name": "meta.module.systemverilog", "patterns": [ { "include": "#parameters" }, { "include": "#port-net-parameter" }, { "include": "#imports" }, { "include": "#base-grammar" }, { "include": "#system-tf" }, { "include": "#identifiers" } ] }, "module-no-parameters": { "begin": "[\\t\\n\\r ]*\\b(?:(bind|pullup|pulldown)[\\t\\n\\r ]+(?:([A-Z_a-z][$.0-9A-Z_a-z]*)[\\t\\n\\r ]+)?)?(\\b(?:and|nand|or|nor|xor|xnor|buf|not|bufif[01]|notif[01]|r?[cnp]mos|r?tran|r?tranif[01])\\b|[A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]+(?!intersect|and|or|throughout|within)([A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]*(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])?[\\t\\n\\r ]*(?=\\(|$)(?!;)", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.type.module.systemverilog" }, "3": { "name": "entity.name.type.module.systemverilog" }, "4": { "name": "variable.other.module.systemverilog" }, "5": { "patterns": [ { "include": "#selects" } ] } }, "end": "\\)(?:[\\t\\n\\r ]*(;))?", "endCaptures": { "1": { "name": "punctuation.module.instantiation.end.systemverilog" } }, "name": "meta.module.no_parameters.systemverilog", "patterns": [ { "include": "#module-binding" }, { "include": "#comments" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#strings" }, { "include": "#port-net-parameter" }, { "match": "\\b([A-Z_a-z][$0-9A-Z_a-z]*)\\b(?=[\\t\\n\\r ]*(\\(|$))", "name": "variable.other.module.systemverilog" }, { "include": "#identifiers" } ] }, "module-parameters": { "begin": "[\\t\\n\\r ]*\\b(?:(bind)[\\t\\n\\r ]+([A-Z_a-z][$.0-9A-Z_a-z]*)[\\t\\n\\r ]+)?([A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]+(?!intersect|and|or|throughout|within)(?=#[^#])", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.type.module.systemverilog" }, "3": { "name": "entity.name.type.module.systemverilog" } }, "end": "\\)(?:[\\t\\n\\r ]*(;))?", "endCaptures": { "1": { "name": "punctuation.module.instantiation.end.systemverilog" } }, "name": "meta.module.parameters.systemverilog", "patterns": [ { "match": "\\b([A-Z_a-z][$0-9A-Z_a-z]*)\\b(?=[\\t\\n\\r ]*\\()", "name": "variable.other.module.systemverilog" }, { "include": "#module-binding" }, { "include": "#parameters" }, { "include": "#comments" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#strings" }, { "include": "#port-net-parameter" }, { "match": "\\b([A-Z_a-z][$0-9A-Z_a-z]*)\\b(?=[\\t\\n\\r ]*$)", "name": "variable.other.module.systemverilog" }, { "include": "#identifiers" } ] }, "operators": { "patterns": [ { "match": "\\b(?:dist|inside|with|intersect|and|or|throughout|within|first_match)\\b|:=|:/|\\|->|\\|=>|->>|\\*>|#-#|#=#|&&&", "name": "keyword.operator.logical.systemverilog" }, { "match": "@|##|#|->|<->", "name": "keyword.operator.channel.systemverilog" }, { "match": "(?:[-%\\&*+/^|]|>>>|>>|<<<|<<|<|)=", "name": "keyword.operator.assignment.systemverilog" }, { "match": "\\+\\+", "name": "keyword.operator.increment.systemverilog" }, { "match": "--", "name": "keyword.operator.decrement.systemverilog" }, { "match": "[-+]|\\*\\*|[%*/]", "name": "keyword.operator.arithmetic.systemverilog" }, { "match": "!|&&|\\|\\|", "name": "keyword.operator.logical.systemverilog" }, { "match": "<<<|<<|>>>|>>", "name": "keyword.operator.bitwise.shift.systemverilog" }, { "match": "~&|~\\||~|\\^~|~\\^|[\\&^{|]|'\\{|[:?}]", "name": "keyword.operator.bitwise.systemverilog" }, { "match": "<=|<|>=|>|==\\?|!=\\?|===|!==|==|!=", "name": "keyword.operator.comparison.systemverilog" } ] }, "parameters": { "begin": "[\\t\\n\\r ]*(#)[\\t\\n\\r ]*(\\()", "beginCaptures": { "1": { "name": "keyword.operator.channel.systemverilog" }, "2": { "name": "punctuation.section.parameters.begin" } }, "end": "(\\))[\\t\\n\\r ]*(?=[(;A-Z\\\\_a-z]|$)", "endCaptures": { "1": { "name": "punctuation.section.parameters.end" } }, "name": "meta.parameters.systemverilog", "patterns": [ { "include": "#port-net-parameter" }, { "include": "#comments" }, { "include": "#constants" }, { "include": "#operators" }, { "include": "#strings" }, { "include": "#system-tf" }, { "include": "#functions" }, { "match": "\\bvirtual\\b", "name": "storage.modifier.systemverilog" }, { "include": "#module-binding" } ] }, "port-net-parameter": { "patterns": [ { "captures": { "1": { "name": "support.type.direction.systemverilog" }, "2": { "name": "storage.type.net.systemverilog" }, "3": { "name": "support.type.scope.systemverilog" }, "4": { "name": "keyword.operator.scope.systemverilog" }, "5": { "patterns": [ { "include": "#built-ins" }, { "match": "[A-Z_a-z][$0-9A-Z_a-z]*", "name": "storage.type.user-defined.systemverilog" } ] }, "6": { "patterns": [ { "include": "#modifiers" } ] }, "7": { "patterns": [ { "include": "#selects" } ] }, "8": { "patterns": [ { "include": "#constants" }, { "include": "#identifiers" } ] }, "9": { "patterns": [ { "include": "#selects" } ] } }, "match": ",?[\\t\\n\\r ]*(?:\\b(output|input|inout|ref)\\b[\\t\\n\\r ]*)?(?:\\b(localparam|parameter|var|supply[01]|tri|triand|trior|trireg|tri[01]|uwire|wire|wand|wor)\\b[\\t\\n\\r ]*)?(?:\\b([A-Z_a-z][$0-9A-Z_a-z]*)(::))?(?:([A-Z_a-z][$0-9A-Z_a-z]*)\\b[\\t\\n\\r ]*)?(?:\\b((?:|un)signed)\\b[\\t\\n\\r ]*)?(?:(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])[\\t\\n\\r ]*)?(?<!(?<!#)[-!%\\&(*+/:<-?^|~][\\t\\n\\r ]*)\\b([A-Z_a-z][$0-9A-Z_a-z]*)\\b[\\t\\n\\r ]*(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])?[\\t\\n\\r ]*(?=[),/;=]|$)", "name": "meta.port-net-parameter.declaration.systemverilog" } ] }, "selects": { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.slice.brackets.begin" } }, "end": "]", "endCaptures": { "0": { "name": "punctuation.slice.brackets.end" } }, "name": "meta.brackets.select.systemverilog", "patterns": [ { "match": "\\$(?![a-z])", "name": "constant.language.systemverilog" }, { "include": "#system-tf" }, { "include": "#constants" }, { "include": "#operators" }, { "include": "#cast-operator" }, { "include": "#storage-scope" }, { "match": "[A-Z_a-z][$0-9A-Z_a-z]*", "name": "variable.other.identifier.systemverilog" } ] }, "sequence": { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.function.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(sequence)[\\t\\n\\r ]+([A-Z_a-z][$0-9A-Z_a-z]*)\\b", "name": "meta.sequence.systemverilog" }, "storage-scope": { "captures": { "1": { "name": "support.type.scope.systemverilog" }, "2": { "name": "keyword.operator.scope.systemverilog" } }, "match": "\\b([A-Z_a-z][$0-9A-Z_a-z]*)(::)", "name": "meta.scope.systemverilog" }, "strings": { "patterns": [ { "begin": "`?\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.systemverilog" } }, "end": "\"`?", "endCaptures": { "0": { "name": "punctuation.definition.string.end.systemverilog" } }, "name": "string.quoted.double.systemverilog", "patterns": [ { "match": "\\\\(?:[\"\\\\afntv]|[0-7]{3}|x\\h{2})", "name": "constant.character.escape.systemverilog" }, { "match": "%(\\d+\\$)?[- #'+0]*[,:;_]?((-?\\d+)|\\*(-?\\d+\\$)?)?(\\.((-?\\d+)|\\*(-?\\d+\\$)?)?)?(hh|h|ll|[Ljltz])?[%B-HLMOPS-VXZb-hlmops-vxz]", "name": "constant.character.format.placeholder.systemverilog" }, { "match": "%", "name": "invalid.illegal.placeholder.systemverilog" }, { "include": "#fixme-todo" } ] }, { "begin": "(?<=include)[\\t\\n\\r ]*(<)", "beginCaptures": { "1": { "name": "punctuation.definition.string.begin.systemverilog" } }, "end": ">", "endCaptures": { "0": { "name": "punctuation.definition.string.end.systemverilog" } }, "name": "string.quoted.other.lt-gt.include.systemverilog" } ] }, "sv-control": { "captures": { "1": { "name": "keyword.control.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(initial|always|always_comb|always_ff|always_latch|final|assign|deassign|force|release|wait|forever|repeat|alias|while|for|if|iff|else|case|casex|casez|default|endcase|return|break|continue|do|foreach|clocking|coverpoint|property|bins|binsof|illegal_bins|ignore_bins|randcase|matches|solve|before|expect|cross|ref|srandom|struct|chandle|tagged|extern|throughout|timeprecision|timeunit|priority|type|union|wait_order|triggered|randsequence|context|pure|wildcard|new|forkjoin|unique|unique0|priority)\\b" }, "sv-control-begin": { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "punctuation.definition.label.systemverilog" }, "3": { "name": "entity.name.section.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(begin|fork)\\b(?:[\\t\\n\\r ]*(:)[\\t\\n\\r ]*([A-Z_a-z][$0-9A-Z_a-z]*))?", "name": "meta.item.begin.systemverilog" }, "sv-control-end": { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "punctuation.definition.label.systemverilog" }, "3": { "name": "entity.name.section.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(end|endmodule|endinterface|endprogram|endchecker|endclass|endpackage|endconfig|endfunction|endtask|endproperty|endsequence|endgroup|endprimitive|endclocking|endgenerate|join|join_any|join_none)\\b(?:[\\t\\n\\r ]*(:)[\\t\\n\\r ]*([A-Z_a-z][$0-9A-Z_a-z]*))?", "name": "meta.item.end.systemverilog" }, "sv-cover-cross": { "captures": { "2": { "name": "entity.name.type.class.systemverilog" }, "3": { "name": "keyword.operator.other.systemverilog" }, "4": { "name": "keyword.control.systemverilog" } }, "match": "(([A-Z_a-z][$0-9A-Z_a-z]*)[\\t\\n\\r ]*(:))?[\\t\\n\\r ]*(c(?:overpoint|ross))[\\t\\n\\r ]+([A-Z_a-z][$0-9A-Z_a-z]*)", "name": "meta.definition.systemverilog" }, "sv-definition": { "captures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "entity.name.type.class.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(primitive|package|constraint|interface|covergroup|program)[\\t\\n\\r ]+\\b([A-Z_a-z][$0-9A-Z_a-z]*)\\b", "name": "meta.definition.systemverilog" }, "sv-local": { "captures": { "1": { "name": "keyword.other.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(const|static|protected|virtual|localparam|parameter|local)\\b" }, "sv-option": { "captures": { "1": { "name": "keyword.cover.systemverilog" } }, "match": "[\\t\\n\\r ]*\\b(option)\\." }, "sv-rand": { "match": "[\\t\\n\\r ]*\\brand(?:|c)\\b", "name": "storage.type.rand.systemverilog" }, "sv-std": { "match": "\\b(std)\\b::", "name": "support.class.systemverilog" }, "system-tf": { "match": "\\$[$0-9A-Z_a-z][$0-9A-Z_a-z]*\\b", "name": "support.function.systemverilog" }, "tables": { "begin": "[\\t\\n\\r ]*\\b(table)\\b", "beginCaptures": { "1": { "name": "keyword.table.systemverilog.begin" } }, "end": "[\\t\\n\\r ]*\\b(endtable)\\b", "endCaptures": { "1": { "name": "keyword.table.systemverilog.end" } }, "name": "meta.table.systemverilog", "patterns": [ { "include": "#comments" }, { "match": "\\b[01BFNPRXbfnprx]\\b", "name": "constant.language.systemverilog" }, { "match": "[-*?]", "name": "constant.language.systemverilog" }, { "captures": { "1": { "name": "constant.language.systemverilog" } }, "match": "\\(([01?Xx]{2})\\)" }, { "match": ":", "name": "punctuation.definition.label.systemverilog" }, { "include": "#operators" }, { "include": "#constants" }, { "include": "#strings" }, { "include": "#identifiers" } ] }, "typedef": { "begin": "[\\t\\n\\r ]*\\b(typedef)[\\t\\n\\r ]+(?:([A-Z_a-z][$0-9A-Z_a-z]*)(?:[\\t\\n\\r ]+\\b((?:|un)signed)\\b)?[\\t\\n\\r ]*(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])?)?(?=[\\t\\n\\r ]*[A-Z\\\\_a-z])", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "patterns": [ { "include": "#built-ins" }, { "match": "\\bvirtual\\b", "name": "storage.modifier.systemverilog" } ] }, "3": { "patterns": [ { "include": "#modifiers" } ] }, "4": { "patterns": [ { "include": "#selects" } ] } }, "end": ";", "endCaptures": { "0": { "name": "punctuation.definition.typedef.end.systemverilog" } }, "name": "meta.typedef.systemverilog", "patterns": [ { "include": "#identifiers" }, { "include": "#selects" } ] }, "typedef-enum-struct-union": { "begin": "[\\t\\n\\r ]*\\b(typedef)[\\t\\n\\r ]+(enum|struct|union(?:[\\t\\n\\r ]+tagged)?|class|interface[\\t\\n\\r ]+class)(?:[\\t\\n\\r ]+(?!(?:pack|sign|unsign)ed)([A-Z_a-z][$0-9A-Z_a-z]*)?[\\t\\n\\r ]*(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])?)?(?:[\\t\\n\\r ]+(packed))?(?:[\\t\\n\\r ]+((?:|un)signed))?(?=[\\t\\n\\r ]*(?:\\{|$))", "beginCaptures": { "1": { "name": "keyword.control.systemverilog" }, "2": { "name": "keyword.control.systemverilog" }, "3": { "patterns": [ { "include": "#built-ins" } ] }, "4": { "patterns": [ { "include": "#selects" } ] }, "5": { "name": "storage.modifier.systemverilog" }, "6": { "name": "storage.modifier.systemverilog" } }, "end": "(?<=})[\\t\\n\\r ]*([A-Z_a-z][$0-9A-Z_a-z]*|(?<=^|[\\t\\n\\r ])\\\\[!-~]+(?=$|[\\t\\n\\r ]))[\\t\\n\\r ]*(\\[[]\\t\\n\\r $%'-+\\--:A-\\[_-z]*])?[\\t\\n\\r ]*[,;]", "endCaptures": { "1": { "name": "storage.type.systemverilog" }, "2": { "patterns": [ { "include": "#selects" } ] } }, "name": "meta.typedef-enum-struct-union.systemverilog", "patterns": [ { "include": "#port-net-parameter" }, { "include": "#keywords" }, { "include": "#base-grammar" }, { "include": "#identifiers" } ] } }, "scopeName": "source.systemverilog" }