tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,420 lines (1,419 loc) • 39.2 kB
JSON
{
"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"
}