{ "information_for_contributors": [ "This file has been converted from https://github.com/worlpaker/go-syntax/blob/master/syntaxes/go.tmLanguage.json", "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], "version": "https://github.com/worlpaker/go-syntax/commit/32bbaebcf218fa552e8f0397401e12f6e94fa3c5", "name": "Go", "scopeName": "source.go", "patterns": [ { "include": "#statements" } ], "repository": { "statements": { "patterns": [ { "include": "#package_name" }, { "include": "#import" }, { "include": "#syntax_errors" }, { "include": "#group-functions" }, { "include": "#group-types" }, { "include": "#group-variables" }, { "include": "#field_hover" } ] }, "group-functions": { "comment": "all statements related to functions", "patterns": [ { "include": "#function_declaration" }, { "include": "#functions_inline" }, { "include": "#functions" }, { "include": "#built_in_functions" }, { "include": "#support_functions" } ] }, "group-types": { "comment": "all statements related to types", "patterns": [ { "include": "#other_struct_interface_expressions" }, { "include": "#type_assertion_inline" }, { "include": "#struct_variables_types" }, { "include": "#interface_variables_types" }, { "include": "#single_type" }, { "include": "#multi_types" }, { "include": "#struct_interface_declaration" }, { "include": "#double_parentheses_types" }, { "include": "#switch_types" }, { "include": "#type-declarations" } ] }, "group-variables": { "comment": "all statements related to variables", "patterns": [ { "include": "#var_const_assignment" }, { "include": "#variable_assignment" }, { "include": "#label_loop_variables" }, { "include": "#slice_index_variables" }, { "include": "#property_variables" }, { "include": "#switch_select_case_variables" }, { "include": "#other_variables" } ] }, "type-declarations": { "comment": "includes all type declarations", "patterns": [ { "include": "#language_constants" }, { "include": "#comments" }, { "include": "#map_types" }, { "include": "#brackets" }, { "include": "#delimiters" }, { "include": "#keywords" }, { "include": "#operators" }, { "include": "#runes" }, { "include": "#storage_types" }, { "include": "#raw_string_literals" }, { "include": "#string_literals" }, { "include": "#numeric_literals" }, { "include": "#terminators" } ] }, "type-declarations-without-brackets": { "comment": "includes all type declarations without brackets (in some cases, brackets need to be captured manually)", "patterns": [ { "include": "#language_constants" }, { "include": "#comments" }, { "include": "#map_types" }, { "include": "#delimiters" }, { "include": "#keywords" }, { "include": "#operators" }, { "include": "#runes" }, { "include": "#storage_types" }, { "include": "#raw_string_literals" }, { "include": "#string_literals" }, { "include": "#numeric_literals" }, { "include": "#terminators" } ] }, "parameter-variable-types": { "comment": "function and generic parameter types", "patterns": [ { "match": "\\{", "name": "punctuation.definition.begin.bracket.curly.go" }, { "match": "\\}", "name": "punctuation.definition.end.bracket.curly.go" }, { "begin": "(?:([\\w\\.\\*]+)?(\\[))", "beginCaptures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] }, "2": { "name": "punctuation.definition.begin.bracket.square.go" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.square.go" } }, "patterns": [ { "include": "#generic_param_types" } ] }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.begin.bracket.round.go" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "include": "#function_param_types" } ] } ] }, "language_constants": { "comment": "Language constants", "match": "\\b(?:(true|false)|(nil)|(iota))\\b", "captures": { "1": { "name": "constant.language.boolean.go" }, "2": { "name": "constant.language.null.go" }, "3": { "name": "constant.language.iota.go" } } }, "comments": { "patterns": [ { "name": "comment.block.go", "begin": "(\\/\\*)", "beginCaptures": { "1": { "name": "punctuation.definition.comment.go" } }, "end": "(\\*\\/)", "endCaptures": { "1": { "name": "punctuation.definition.comment.go" } } }, { "name": "comment.line.double-slash.go", "begin": "(\\/\\/)", "beginCaptures": { "1": { "name": "punctuation.definition.comment.go" } }, "end": "(?:\\n|$)" } ] }, "map_types": { "comment": "map types", "begin": "(?:(\\bmap\\b)(\\[))", "beginCaptures": { "1": { "name": "keyword.map.go" }, "2": { "name": "punctuation.definition.begin.bracket.square.go" } }, "end": "(?:(\\])((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?!(?:[\\[\\]\\*]+)?\\b(?:func|struct|map)\\b)(?:[\\*\\[\\]]+)?(?:[\\w\\.]+)(?:\\[(?:(?:[\\w\\.\\*\\[\\]\\{\\}]+)(?:(?:\\,\\s*(?:[\\w\\.\\*\\[\\]\\{\\}]+))*))?\\])?)?)", "endCaptures": { "1": { "name": "punctuation.definition.end.bracket.square.go" }, "2": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "match": "\\[", "name": "punctuation.definition.begin.bracket.square.go" }, { "match": "\\]", "name": "punctuation.definition.end.bracket.square.go" }, { "match": "\\w+", "name": "entity.name.type.go" } ] } }, "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#parameter-variable-types" }, { "include": "#functions" }, { "match": "\\[", "name": "punctuation.definition.begin.bracket.square.go" }, { "match": "\\]", "name": "punctuation.definition.end.bracket.square.go" }, { "match": "\\{", "name": "punctuation.definition.begin.bracket.curly.go" }, { "match": "\\}", "name": "punctuation.definition.end.bracket.curly.go" }, { "match": "\\(", "name": "punctuation.definition.begin.bracket.round.go" }, { "match": "\\)", "name": "punctuation.definition.end.bracket.round.go" }, { "match": "\\w+", "name": "entity.name.type.go" } ] }, "brackets": { "patterns": [ { "begin": "\\{", "beginCaptures": { "0": { "name": "punctuation.definition.begin.bracket.curly.go" } }, "end": "\\}", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.curly.go" } }, "patterns": [ { "include": "$self" } ] }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.begin.bracket.round.go" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "include": "$self" } ] }, { "begin": "\\[", "beginCaptures": { "0": { "name": "punctuation.definition.begin.bracket.square.go" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.square.go" } }, "patterns": [ { "include": "$self" } ] } ] }, "delimiters": { "patterns": [ { "match": "\\,", "name": "punctuation.other.comma.go" }, { "match": "\\.(?!\\.\\.)", "name": "punctuation.other.period.go" }, { "match": ":(?!=)", "name": "punctuation.other.colon.go" } ] }, "keywords": { "patterns": [ { "comment": "Flow control keywords", "match": "\\b(break|case|continue|default|defer|else|fallthrough|for|go|goto|if|range|return|select|switch)\\b", "name": "keyword.control.go" }, { "match": "\\bchan\\b", "name": "keyword.channel.go" }, { "match": "\\bconst\\b", "name": "keyword.const.go" }, { "match": "\\bvar\\b", "name": "keyword.var.go" }, { "match": "\\bfunc\\b", "name": "keyword.function.go" }, { "match": "\\binterface\\b", "name": "keyword.interface.go" }, { "match": "\\bmap\\b", "name": "keyword.map.go" }, { "match": "\\bstruct\\b", "name": "keyword.struct.go" }, { "match": "\\bimport\\b", "name": "keyword.control.import.go" }, { "match": "\\btype\\b", "name": "keyword.type.go" } ] }, "operators": { "comment": "Note that the order here is very important!", "patterns": [ { "match": "((?:\\*|\\&)+)(?:(?!\\d)(?=(?:[\\w\\[\\]])|(?:\\<\\-)))", "name": "keyword.operator.address.go" }, { "match": "<\\-", "name": "keyword.operator.channel.go" }, { "match": "\\-\\-", "name": "keyword.operator.decrement.go" }, { "match": "\\+\\+", "name": "keyword.operator.increment.go" }, { "match": "(==|!=|<=|>=|<(?!<)|>(?!>))", "name": "keyword.operator.comparison.go" }, { "match": "(&&|\\|\\||!)", "name": "keyword.operator.logical.go" }, { "match": "(=|\\+=|\\-=|\\|=|\\^=|\\*=|/=|:=|%=|<<=|>>=|&\\^=|&=)", "name": "keyword.operator.assignment.go" }, { "match": "(\\+|\\-|\\*|/|%)", "name": "keyword.operator.arithmetic.go" }, { "match": "(&(?!\\^)|\\||\\^|&\\^|<<|>>|\\~)", "name": "keyword.operator.arithmetic.bitwise.go" }, { "match": "\\.\\.\\.", "name": "keyword.operator.ellipsis.go" } ] }, "runes": { "patterns": [ { "begin": "'", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.go" } }, "end": "'", "endCaptures": { "0": { "name": "punctuation.definition.string.end.go" } }, "name": "string.quoted.rune.go", "patterns": [ { "match": "\\G(\\\\([0-7]{3}|[abfnrtv\\\\'\"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})|.)(?=')", "name": "constant.other.rune.go" }, { "match": "[^']+", "name": "invalid.illegal.unknown-rune.go" } ] } ] }, "storage_types": { "patterns": [ { "match": "\\bbool\\b", "name": "storage.type.boolean.go" }, { "match": "\\bbyte\\b", "name": "storage.type.byte.go" }, { "match": "\\berror\\b", "name": "storage.type.error.go" }, { "match": "\\b(complex(64|128)|float(32|64)|u?int(8|16|32|64)?)\\b", "name": "storage.type.numeric.go" }, { "match": "\\brune\\b", "name": "storage.type.rune.go" }, { "match": "\\bstring\\b", "name": "storage.type.string.go" }, { "match": "\\buintptr\\b", "name": "storage.type.uintptr.go" }, { "match": "\\bany\\b", "name": "entity.name.type.any.go" } ] }, "raw_string_literals": { "comment": "Raw string literals", "begin": "`", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.go" } }, "end": "`", "endCaptures": { "0": { "name": "punctuation.definition.string.end.go" } }, "name": "string.quoted.raw.go", "patterns": [ { "include": "#string_placeholder" } ] }, "string_literals": { "patterns": [ { "comment": "Interpreted string literals", "begin": "\"", "beginCaptures": { "0": { "name": "punctuation.definition.string.begin.go" } }, "end": "\"", "endCaptures": { "0": { "name": "punctuation.definition.string.end.go" } }, "name": "string.quoted.double.go", "patterns": [ { "include": "#string_escaped_char" }, { "include": "#string_placeholder" } ] } ] }, "string_escaped_char": { "patterns": [ { "match": "\\\\([0-7]{3}|[abfnrtv\\\\'\"]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})", "name": "constant.character.escape.go" }, { "match": "\\\\[^0-7xuUabfnrtv\\'\"]", "name": "invalid.illegal.unknown-escape.go" } ] }, "string_placeholder": { "patterns": [ { "match": "%(\\[\\d+\\])?([\\+#\\-0\\x20]{,2}((\\d+|\\*)?(\\.?(\\d+|\\*|(\\[\\d+\\])\\*?)?(\\[\\d+\\])?)?))?[vT%tbcdoqxXUbeEfFgGspw]", "name": "constant.other.placeholder.go" } ] }, "numeric_literals": { "match": "(?\\-]+(?:\\s*)(?:\\/(?:\\/|\\*).*)?)$)", "captures": { "1": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#parameter-variable-types" }, { "match": "\\w+", "name": "entity.name.type.go" } ] } } }, { "include": "$self" } ] }, "function_param_types": { "comment": "function parameter variables and types", "patterns": [ { "include": "#struct_variables_types" }, { "include": "#interface_variables_types" }, { "include": "#type-declarations-without-brackets" }, { "comment": "struct/interface type declaration", "match": "((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)\\s+(?=(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\[\\]\\*]+)?\\b(?:struct|interface)\\b\\s*\\{)", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.parameter.go" } ] } } }, { "comment": "multiple parameters one type -with multilines", "match": "(?:(?:(?<=\\()|^\\s*)((?:(?:\\b\\w+\\,\\s*)+)(?:/(?:/|\\*).*)?)$)", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.parameter.go" } ] } } }, { "comment": "multiple params and types | multiple params one type | one param one type", "match": "(?:((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)(?:\\s+)((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:(?:(?:[\\w\\[\\]\\.\\*]+)?(?:(?:\\bfunc\\b\\((?:[^\\)]+)?\\))(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:\\s*))+(?:(?:(?:[\\w\\*\\.\\[\\]]+)|(?:\\((?:[^\\)]+)?\\))))?)|(?:(?:[\\[\\]\\*]+)?[\\w\\*\\.]+(?:\\[(?:[^\\]]+)\\])?(?:[\\w\\.\\*]+)?)+)))", "captures": { "1": { "patterns": [ { "include": "#delimiters" }, { "match": "\\w+", "name": "variable.parameter.go" } ] }, "2": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#parameter-variable-types" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] } } }, { "begin": "(?:([\\w\\.\\*]+)?(\\[))", "beginCaptures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] }, "2": { "name": "punctuation.definition.begin.bracket.square.go" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.square.go" } }, "patterns": [ { "include": "#generic_param_types" } ] }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.begin.bracket.round.go" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "include": "#function_param_types" } ] }, { "comment": "other types", "match": "([\\w\\.]+)", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] } } }, { "include": "$self" } ] }, "generic_param_types": { "comment": "generic parameter variables and types", "patterns": [ { "include": "#struct_variables_types" }, { "include": "#interface_variables_types" }, { "include": "#type-declarations-without-brackets" }, { "comment": "struct/interface type declaration", "match": "((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)\\s+(?=(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:[\\[\\]\\*]+)?\\b(?:struct|interface)\\b\\s*\\{)", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.parameter.go" } ] } } }, { "comment": "multiple parameters one type -with multilines", "match": "(?:(?:(?<=\\()|^\\s*)((?:(?:\\b\\w+\\,\\s*)+)(?:/(?:/|\\*).*)?)$)", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.parameter.go" } ] } } }, { "comment": "multiple params and types | multiple types one param", "match": "(?:((?:(?:\\b\\w+\\,\\s*)+)?\\b\\w+)(?:\\s+)((?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:(?:(?:[\\w\\[\\]\\.\\*]+)?(?:(?:\\bfunc\\b\\((?:[^\\)]+)?\\))(?:(?:\\s*(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?(?:\\s*))+(?:(?:(?:[\\w\\*\\.]+)|(?:\\((?:[^\\)]+)?\\))))?)|(?:(?:(?:[\\w\\*\\.\\~]+)|(?:\\[(?:(?:[\\w\\.\\*]+)?(?:\\[(?:[^\\]]+)?\\])?(?:\\,\\s+)?)+\\]))(?:[\\w\\.\\*]+)?)+)))", "captures": { "1": { "patterns": [ { "include": "#delimiters" }, { "match": "\\w+", "name": "variable.parameter.go" } ] }, "2": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#parameter-variable-types" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] }, "3": { "patterns": [ { "include": "#type-declarations" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] } } }, { "begin": "(?:([\\w\\.\\*]+)?(\\[))", "beginCaptures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] }, "2": { "name": "punctuation.definition.begin.bracket.square.go" } }, "end": "\\]", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.square.go" } }, "patterns": [ { "include": "#generic_param_types" } ] }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.begin.bracket.round.go" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "include": "#function_param_types" } ] }, { "comment": "other types", "match": "(?:\\b([\\w\\.]+))", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] } } }, { "include": "$self" } ] }, "functions": { "comment": "Functions", "begin": "(?:(\\bfunc\\b)(?=\\())", "beginCaptures": { "1": { "name": "keyword.function.go" } }, "end": "(?:(?<=\\))(\\s*(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+)?((?:(?:\\s*(?:(?:[\\[\\]\\*]+)?[\\w\\.\\*]+)?(?:(?:\\[(?:(?:[\\w\\.\\*]+)?(?:\\[(?:[^\\]]+)?\\])?(?:\\,\\s+)?)+\\])|(?:\\((?:[^\\)]+)?\\)))?(?:[\\w\\.\\*]+)?)(?:\\s*)(?=\\{))|(?:\\s*(?:(?:(?:[\\[\\]\\*]+)?(?!\\bfunc\\b)(?:[\\w\\.\\*]+)(?:\\[(?:(?:[\\w\\.\\*]+)?(?:\\[(?:[^\\]]+)?\\])?(?:\\,\\s+)?)+\\])?(?:[\\w\\.\\*]+)?)|(?:\\((?:[^\\)]+)?\\)))))?)", "endCaptures": { "1": { "patterns": [ { "include": "#type-declarations" } ] }, "2": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#parameter-variable-types" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] } }, "patterns": [ { "include": "#parameter-variable-types" } ] }, "functions_inline": { "comment": "functions in-line with multi return types", "match": "(?:(\\bfunc\\b)((?:\\((?:[^/]*?)\\))(?:\\s+)(?:\\((?:[^/]*?)\\)))(?:\\s+)(?=\\{))", "captures": { "1": { "name": "keyword.function.go" }, "2": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "begin": "\\(", "beginCaptures": { "0": { "name": "punctuation.definition.begin.bracket.round.go" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "include": "#function_param_types" }, { "include": "$self" } ] }, { "match": "\\[", "name": "punctuation.definition.begin.bracket.square.go" }, { "match": "\\]", "name": "punctuation.definition.end.bracket.square.go" }, { "match": "\\{", "name": "punctuation.definition.begin.bracket.curly.go" }, { "match": "\\}", "name": "punctuation.definition.end.bracket.curly.go" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" } ] } } }, "support_functions": { "comment": "Support Functions", "match": "(?:(?:((?<=\\.)\\b\\w+)|(\\b\\w+))(\\[(?:(?:[\\w\\.\\*\\[\\]\\{\\}\"\\']+)(?:(?:\\,\\s*(?:[\\w\\.\\*\\[\\]\\{\\}]+))*))?\\])?(?=\\())", "captures": { "1": { "name": "entity.name.function.support.go" }, "2": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\d\\w*", "name": "invalid.illegal.identifier.go" }, { "match": "\\w+", "name": "entity.name.function.support.go" } ] }, "3": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "match": "\\[", "name": "punctuation.definition.begin.bracket.square.go" }, { "match": "\\]", "name": "punctuation.definition.end.bracket.square.go" }, { "match": "\\{", "name": "punctuation.definition.begin.bracket.curly.go" }, { "match": "\\}", "name": "punctuation.definition.end.bracket.curly.go" }, { "match": "\\w+", "name": "entity.name.type.go" } ] } } }, "other_struct_interface_expressions": { "comment": "struct and interface expression in-line (before curly bracket)", "patterns": [ { "comment": "after control variables must be added exactly here, do not move it! (changing may not affect tests, so be careful!)", "include": "#after_control_variables" }, { "match": "(\\b[\\w\\.]+)(\\[(?:[^\\]]+)?\\])?(?=\\{)(?|\\<\\=|\\>\\=|\\=\\=|\\!\\=|\\w(?:\\+|/|\\-|\\*|\\%)|\\w(?:\\+|/|\\-|\\*|\\%)\\=|\\|\\||\\&\\&)(?:\\s*)((?![\\[\\]]+)[[:alnum:]\\-\\_\\!\\.\\[\\]\\<\\>\\=\\*/\\+\\%\\:]+)(?:\\s*)(?=\\{))", "captures": { "1": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "match": "\\[", "name": "punctuation.definition.begin.bracket.square.go" }, { "match": "\\]", "name": "punctuation.definition.end.bracket.square.go" }, { "match": "(?:\\w+)", "name": "variable.other.go" } ] } } }, "syntax_errors": { "patterns": [ { "comment": "Syntax error using slices", "match": "\\[\\](\\s+)", "captures": { "1": { "name": "invalid.illegal.slice.go" } } }, { "comment": "Syntax error numeric literals", "match": "\\b0[0-7]*[89]\\d*\\b", "name": "invalid.illegal.numeric.go" } ] }, "built_in_functions": { "comment": "Built-in functions", "patterns": [ { "match": "\\b(append|cap|close|complex|copy|delete|imag|len|panic|print|println|real|recover|min|max|clear)\\b(?=\\()", "name": "entity.name.function.support.builtin.go" }, { "comment": "new keyword", "begin": "(?:(\\bnew\\b)(\\())", "beginCaptures": { "1": { "name": "entity.name.function.support.builtin.go" }, "2": { "name": "punctuation.definition.begin.bracket.round.go" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "include": "#functions" }, { "include": "#struct_variables_types" }, { "include": "#type-declarations" }, { "include": "#generic_types" }, { "match": "(?:\\w+)", "name": "entity.name.type.go" }, { "include": "$self" } ] }, { "comment": "make keyword", "begin": "(?:(\\bmake\\b)(?:(\\()((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?:[\\[\\]\\*]+)?(?:(?!\\bmap\\b)(?:[\\w\\.]+))?(\\[(?:(?:[\\S]+)(?:(?:\\,\\s*(?:[\\S]+))*))?\\])?(?:\\,)?)?))", "beginCaptures": { "1": { "name": "entity.name.function.support.builtin.go" }, "2": { "name": "punctuation.definition.begin.bracket.round.go" }, "3": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#parameter-variable-types" }, { "match": "\\w+", "name": "entity.name.type.go" } ] } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "include": "$self" } ] } ] }, "struct_interface_declaration": { "comment": "struct, interface type declarations (related to: struct_variables_types, interface_variables_types)", "match": "(?:(?:^\\s*)(\\btype\\b)(?:\\s*)([\\w\\.]+))", "captures": { "1": { "name": "keyword.type.go" }, "2": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "entity.name.type.go" } ] } } }, "switch_types": { "comment": "switch type assertions, only highlights types after case keyword", "begin": "(?<=\\bswitch\\b)(?:\\s*)(?:(\\w+\\s*\\:\\=)?\\s*([\\w\\.\\*\\(\\)\\[\\]\\+/\\-\\%\\<\\>\\|\\&]+))(\\.\\(\\btype\\b\\)\\s*)(\\{)", "beginCaptures": { "1": { "patterns": [ { "include": "#operators" }, { "match": "\\w+", "name": "variable.other.assignment.go" } ] }, "2": { "patterns": [ { "include": "#support_functions" }, { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.other.go" } ] }, "3": { "patterns": [ { "include": "#delimiters" }, { "include": "#brackets" }, { "match": "\\btype\\b", "name": "keyword.type.go" } ] }, "4": { "name": "punctuation.definition.begin.bracket.curly.go" } }, "end": "(?:\\})", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.curly.go" } }, "patterns": [ { "comment": "types after case keyword with single line", "match": "(?:^\\s*(\\bcase\\b))(?:\\s+)([\\w\\.\\,\\*\\=\\<\\>\\!\\s]+)(:)(\\s*/(?:/|\\*)\\s*.*)?$", "captures": { "1": { "name": "keyword.control.go" }, "2": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "entity.name.type.go" } ] }, "3": { "name": "punctuation.other.colon.go" }, "4": { "patterns": [ { "include": "#comments" } ] } } }, { "comment": "types after case keyword with multi lines", "begin": "\\bcase\\b", "beginCaptures": { "0": { "name": "keyword.control.go" } }, "end": "\\:", "endCaptures": { "0": { "name": "punctuation.other.colon.go" } }, "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "entity.name.type.go" } ] }, { "include": "$self" } ] }, "var_const_assignment": { "comment": "variable assignment with var and const keyword", "patterns": [ { "comment": "var and const with single type assignment", "match": "(?:(?<=\\bvar\\b|\\bconst\\b)(?:\\s*)(\\b[\\w\\.]+(?:\\,\\s*[\\w\\.]+)*)(?:\\s*)((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?!(?:[\\[\\]\\*]+)?\\b(?:struct|func|map)\\b)(?:[\\w\\.\\[\\]\\*]+(?:\\,\\s*[\\w\\.\\[\\]\\*]+)*)?(?:\\s*)(?:\\=)?)?)", "captures": { "1": { "patterns": [ { "include": "#delimiters" }, { "match": "\\w+", "name": "variable.other.assignment.go" } ] }, "2": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#generic_types" }, { "match": "\\(", "name": "punctuation.definition.begin.bracket.round.go" }, { "match": "\\)", "name": "punctuation.definition.end.bracket.round.go" }, { "match": "\\[", "name": "punctuation.definition.begin.bracket.square.go" }, { "match": "\\]", "name": "punctuation.definition.end.bracket.square.go" }, { "match": "\\w+", "name": "entity.name.type.go" } ] } } }, { "comment": "var and const with multi type assignment", "begin": "(?:(?<=\\bvar\\b|\\bconst\\b)(?:\\s*)(\\())", "beginCaptures": { "1": { "name": "punctuation.definition.begin.bracket.round.go" } }, "end": "\\)", "endCaptures": { "0": { "name": "punctuation.definition.end.bracket.round.go" } }, "patterns": [ { "match": "(?:(?:^\\s*)(\\b[\\w\\.]+(?:\\,\\s*[\\w\\.]+)*)(?:\\s*)((?:(?:(?:[\\*\\[\\]]+)?(?:\\<\\-\\s*)?\\bchan\\b(?:\\s*\\<\\-)?\\s*)+(?:\\([^\\)]+\\))?)?(?!(?:[\\[\\]\\*]+)?\\b(?:struct|func|map)\\b)(?:[\\w\\.\\[\\]\\*]+(?:\\,\\s*[\\w\\.\\[\\]\\*]+)*)?(?:\\s*)(?:\\=)?)?)", "captures": { "1": { "patterns": [ { "include": "#delimiters" }, { "match": "\\w+", "name": "variable.other.assignment.go" } ] }, "2": { "patterns": [ { "include": "#type-declarations-without-brackets" }, { "include": "#generic_types" }, { "match": "\\(", "name": "punctuation.definition.begin.bracket.round.go" }, { "match": "\\)", "name": "punctuation.definition.end.bracket.round.go" }, { "match": "\\[", "name": "punctuation.definition.begin.bracket.square.go" }, { "match": "\\]", "name": "punctuation.definition.end.bracket.square.go" }, { "match": "\\w+", "name": "entity.name.type.go" } ] } } }, { "include": "$self" } ] } ] }, "variable_assignment": { "comment": "variable assignment", "patterns": [ { "comment": "variable assignment with :=", "match": "\\b\\w+(?:\\,\\s*\\w+)*(?=\\s*:=)", "captures": { "0": { "patterns": [ { "include": "#delimiters" }, { "match": "\\d\\w*", "name": "invalid.illegal.identifier.go" }, { "match": "\\w+", "name": "variable.other.assignment.go" } ] } } }, { "comment": "variable assignment with =", "match": "\\b[\\w\\.\\*]+(?:\\,\\s*[\\w\\.\\*]+)*(?=\\s*=(?!=))", "captures": { "0": { "patterns": [ { "include": "#delimiters" }, { "include": "#operators" }, { "match": "\\d\\w*", "name": "invalid.illegal.identifier.go" }, { "match": "\\w+", "name": "variable.other.assignment.go" } ] } } } ] }, "generic_types": { "comment": "Generic support for all types", "match": "(?:([\\w\\.\\*]+)(\\[(?:[^\\]]+)?\\]))", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "entity.name.type.go" } ] }, "2": { "patterns": [ { "include": "#parameter-variable-types" } ] } } }, "switch_select_case_variables": { "comment": "variables after case control keyword in switch/select expression, to not scope them as property variables", "match": "(?:(?:^\\s*(\\bcase\\b))(?:\\s+)([\\s\\S]+(?:\\:)\\s*(?:/(?:/|\\*).*)?)$)", "captures": { "1": { "name": "keyword.control.go" }, "2": { "patterns": [ { "include": "#type-declarations" }, { "include": "#support_functions" }, { "include": "#variable_assignment" }, { "match": "\\w+", "name": "variable.other.go" } ] } } }, "slice_index_variables": { "comment": "slice index and capacity variables, to not scope them as property variables", "match": "(?<=\\w\\[)((?:(?:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+\\:)|(?:\\:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+))(?:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+)?(?:\\:\\b[\\w\\.\\*\\+/\\-\\%\\<\\>\\|\\&]+)?)(?=\\])", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.other.go" } ] } } }, "property_variables": { "comment": "Property variables in struct", "match": "((?:\\b[\\w\\.]+)(?:\\:(?!\\=)))", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.other.property.go" } ] } } }, "label_loop_variables": { "comment": "labeled loop variable name", "match": "((?:^\\s*\\w+:\\s*$)|(?:^\\s*(?:\\bbreak\\b|\\bgoto\\b|\\bcontinue\\b)\\s+\\w+(?:\\s*/(?:/|\\*)\\s*.*)?$))", "captures": { "1": { "patterns": [ { "include": "#type-declarations" }, { "match": "\\w+", "name": "variable.other.label.go" } ] } } }, "double_parentheses_types": { "comment": "double parentheses types", "match": "(?:(?