goLanguage top-level constant
Language
const goLanguage
Go (source.go).
Implementation
const goLanguage = Language(
name: 'go',
scopeName: 'source.go',
displayName: 'Go',
aliases: [],
grammar: <String, Object?>{
'displayName': 'Go',
'name': 'go',
'patterns': [
{'include': '#statements'},
],
'repository': {
'after_control_variables': {
'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'},
],
},
},
'match':
'(?<=\\brange\\b|;|\\bif\\b|\\bfor\\b|[<>]|<=|>=|==|!=|\\w[-%*+/]|\\w[-%*+/]=|\\|\\||&&)\\s*((?![]\\[]+)[-\\]!%*+./:<=>\\[_[:alnum:]]+)\\s*(?=\\{)',
},
'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'},
],
},
],
},
'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',
},
{
'begin': '\\b(new)\\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': '#support_functions'},
{'include': '#type-declarations'},
{'include': '#generic_types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
{'include': '\$self'},
],
},
{
'begin':
'\\b(make)\\b(\\()((?:(?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+(?:\\([^)]+\\))?)?[]*\\[]+{0,1}(?:(?!\\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'},
],
},
],
},
'comments': {
'patterns': [
{
'begin': '(/\\*)',
'beginCaptures': {
'1': {'name': 'punctuation.definition.comment.go'},
},
'end': '(\\*/)',
'endCaptures': {
'1': {'name': 'punctuation.definition.comment.go'},
},
'name': 'comment.block.go',
},
{
'begin': '(//)',
'beginCaptures': {
'1': {'name': 'punctuation.definition.comment.go'},
},
'end': '\\n|\$',
'name': 'comment.line.double-slash.go',
},
],
},
'const_assignment': {
'patterns': [
{
'captures': {
'1': {
'patterns': [
{'include': '#delimiters'},
{'match': '\\w+', 'name': 'variable.other.constant.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'},
],
},
},
'match':
'(?<=\\bconst\\b)\\s*\\b([.\\w]+(?:,\\s*[.\\w]+)*)\\s*((?:(?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+(?:\\([^)]+\\))?)?(?![]*\\[]+{0,1}\\b(?:struct|func|map)\\b)(?:[]*.\\[\\w]+(?:,\\s*[]*.\\[\\w]+)*)?\\s*=?)?',
},
{
'begin': '(?<=\\bconst\\b)\\s*(\\()',
'beginCaptures': {
'1': {'name': 'punctuation.definition.begin.bracket.round.go'},
},
'end': '\\)',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.round.go'},
},
'patterns': [
{
'captures': {
'1': {
'patterns': [
{'include': '#delimiters'},
{'match': '\\w+', 'name': 'variable.other.constant.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'},
],
},
},
'match':
'^\\s*\\b([.\\w]+(?:,\\s*[.\\w]+)*)\\s*((?:(?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+(?:\\([^)]+\\))?)?(?![]*\\[]+{0,1}\\b(?:struct|func|map)\\b)(?:[]*.\\[\\w]+(?:,\\s*[]*.\\[\\w]+)*)?\\s*=?)?',
},
{'include': '\$self'},
],
},
],
},
'delimiters': {
'patterns': [
{'match': ',', 'name': 'punctuation.other.comma.go'},
{'match': '\\.(?!\\.\\.)', 'name': 'punctuation.other.period.go'},
{'match': ':(?!=)', 'name': 'punctuation.other.colon.go'},
],
},
'double_parentheses_types': {
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{
'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': '\\{',
'name': 'punctuation.definition.begin.bracket.curly.go',
},
{
'match': '}',
'name': 'punctuation.definition.end.bracket.curly.go',
},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'(?<!\\w)(\\([]*\\[]+{0,1}[.\\w]+(?:\\[(?:[]*.\\[{}\\w]+(?:,\\s*[]*.\\[{}\\w]+)*)?])?\\))(?=\\()',
},
'function_declaration': {
'begin': '^\\b(func)\\b\\s*(\\([^)]+\\)\\s*)?(?:(\\w+)(?=[(\\[]))?',
'beginCaptures': {
'1': {'name': 'keyword.function.go'},
'2': {
'patterns': [
{
'begin': '\\(',
'beginCaptures': {
'0': {
'name': 'punctuation.definition.begin.bracket.round.go',
},
},
'end': '\\)',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.round.go'},
},
'patterns': [
{
'captures': {
'1': {'name': 'variable.parameter.go'},
'2': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'(\\w+\\s+)?([*.\\w]+(?:\\[(?:[*.\\w]+(?:,\\s+)?)+{0,1}])?)',
},
{'include': '\$self'},
],
},
],
},
'3': {
'patterns': [
{'match': '\\d\\w*', 'name': 'invalid.illegal.identifier.go'},
{'match': '\\w+', 'name': 'entity.name.function.go'},
],
},
},
'end':
'(?<=\\))\\s*((?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}(?![]*\\[]+{0,1}\\b(?:struct|interface)\\b)[-\\]*.\\[\\w]+)?\\s*(?=\\{)',
'endCaptures': {
'1': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'patterns': [
{
'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'},
],
},
{
'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'},
],
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'(?<=\\))\\s*((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[-\\]*.<>\\[\\w]+\\s*(?:/[*/].*)?)\$',
},
{'include': '\$self'},
],
},
'function_param_types': {
'patterns': [
{'include': '#struct_variables_types'},
{'include': '#interface_variables_types'},
{'include': '#type-declarations-without-brackets'},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.parameter.go'},
],
},
},
'match':
'((?:\\b\\w+,\\s*)+{0,1}\\b\\w+)\\s+(?=(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[]*\\[]+{0,1}\\b(?:struct|interface)\\b\\s*\\{)',
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.parameter.go'},
],
},
},
'match': '(?:(?<=\\()|^\\s*)((?:\\b\\w+,\\s*)+(?:/[*/].*)?)\$',
},
{
'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'},
],
},
},
'match':
'((?:\\b\\w+,\\s*)+{0,1}\\b\\w+)\\s+((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}(?:[]*.\\[\\w]+{0,1}(?:\\bfunc\\b\\([^)]+{0,1}\\)(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}\\s*)+(?:[]*.\\[\\w]+|\\([^)]+{0,1}\\))?|(?:[]*\\[]+{0,1}[*.\\w]+(?:\\[[^]]+])?[*.\\w]+{0,1})+))',
},
{
'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'},
],
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match': '([.\\w]+)',
},
{'include': '\$self'},
],
},
'functions': {
'begin': '\\b(func)\\b(?=\\()',
'beginCaptures': {
'1': {'name': 'keyword.function.go'},
},
'end':
'(?<=\\))(\\s*(?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+)?(\\s*(?:[]*\\[]+{0,1}[*.\\w]+)?(?:\\[(?:[*.\\w]+{0,1}(?:\\[[^]]+{0,1}])?(?:,\\s+)?)+]|\\([^)]+{0,1}\\))?[*.\\w]+{0,1}\\s*(?=\\{)|\\s*(?:[]*\\[]+{0,1}(?!\\bfunc\\b)[*.\\w]+(?:\\[(?:[*.\\w]+{0,1}(?:\\[[^]]+{0,1}])?(?:,\\s+)?)+])?[*.\\w]+{0,1}|\\([^)]+{0,1}\\)))?',
'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': {
'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'},
],
},
},
'match': '\\b(func)\\b(\\([^/]*?\\)\\s+\\([^/]*?\\))\\s+(?=\\{)',
},
'generic_param_types': {
'patterns': [
{'include': '#struct_variables_types'},
{'include': '#interface_variables_types'},
{'include': '#type-declarations-without-brackets'},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.parameter.go'},
],
},
},
'match':
'((?:\\b\\w+,\\s*)+{0,1}\\b\\w+)\\s+(?=(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[]*\\[]+{0,1}\\b(?:struct|interface)\\b\\s*\\{)',
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.parameter.go'},
],
},
},
'match': '(?:(?<=\\()|^\\s*)((?:\\b\\w+,\\s*)+(?:/[*/].*)?)\$',
},
{
'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'},
],
},
},
'match':
'((?:\\b\\w+,\\s*)+{0,1}\\b\\w+)\\s+((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}(?:[]*.\\[\\w]+{0,1}(?:\\bfunc\\b\\([^)]+{0,1}\\)(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}\\s*)+(?:[*.\\w]+|\\([^)]+{0,1}\\))?|(?:(?:[*.~\\w]+|\\[(?:[*.\\w]+{0,1}(?:\\[[^]]+{0,1}])?(?:,\\s+)?)+])[*.\\w]+{0,1})+))',
},
{
'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'},
],
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match': '\\b([.\\w]+)',
},
{'include': '\$self'},
],
},
'generic_types': {
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
'2': {
'patterns': [
{'include': '#parameter-variable-types'},
],
},
},
'match': '([*.\\w]+)(\\[[^]]+{0,1}])',
},
'group-functions': {
'patterns': [
{'include': '#function_declaration'},
{'include': '#functions_inline'},
{'include': '#functions'},
{'include': '#built_in_functions'},
{'include': '#support_functions'},
],
},
'group-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': {
'patterns': [
{'include': '#const_assignment'},
{'include': '#var_assignment'},
{'include': '#variable_assignment'},
{'include': '#label_loop_variables'},
{'include': '#slice_index_variables'},
{'include': '#property_variables'},
{'include': '#switch_variables'},
{'include': '#other_variables'},
],
},
'hover': {
'patterns': [
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.property.go'},
],
},
'2': {
'patterns': [
{
'match': '\\binvalid\\b\\s+\\btype\\b',
'name': 'invalid.field.go',
},
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match': '(?<=^\\bfield\\b)\\s+([*.\\w]+)\\s+([\\s\\S]+)',
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match': '(?<=^\\breturns\\b)\\s+([\\s\\S]+)',
},
],
},
'import': {
'patterns': [
{
'begin': '\\b(import)\\s+',
'beginCaptures': {
'1': {'name': 'keyword.control.import.go'},
},
'end': '(?!\\G)',
'patterns': [
{'include': '#imports'},
],
},
],
},
'imports': {
'patterns': [
{
'captures': {
'1': {
'patterns': [
{'include': '#delimiters'},
{'match': '\\w+', 'name': 'variable.other.import.go'},
],
},
'2': {'name': 'string.quoted.double.go'},
'3': {'name': 'punctuation.definition.string.begin.go'},
'4': {'name': 'entity.name.import.go'},
'5': {'name': 'punctuation.definition.string.end.go'},
},
'match': '(\\s*[.\\w]+)?\\s*((")([^"]*)("))',
},
{
'begin': '\\(',
'beginCaptures': {
'0': {
'name': 'punctuation.definition.imports.begin.bracket.round.go',
},
},
'end': '\\)',
'endCaptures': {
'0': {
'name': 'punctuation.definition.imports.end.bracket.round.go',
},
},
'patterns': [
{'include': '#comments'},
{'include': '#imports'},
],
},
{'include': '\$self'},
],
},
'interface_variables_types': {
'begin': '\\b(interface)\\b\\s*(\\{)',
'beginCaptures': {
'1': {'name': 'keyword.interface.go'},
'2': {'name': 'punctuation.definition.begin.bracket.curly.go'},
},
'end': '}',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.curly.go'},
},
'patterns': [
{'include': '#interface_variables_types_field'},
{'include': '\$self'},
],
},
'interface_variables_types_field': {
'patterns': [
{'include': '#support_functions'},
{'include': '#type-declarations-without-brackets'},
{
'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'},
],
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match': '([.\\w]+)',
},
],
},
'keywords': {
'patterns': [
{
'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'},
],
},
'label_loop_variables': {
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.label.go'},
],
},
},
'match':
'^(\\s*\\w+:\\s*|\\s*\\b(?:break|goto|continue)\\b\\s+\\w+(?:\\s*/[*/]\\s*.*)?)\$',
},
'language_constants': {
'captures': {
'1': {'name': 'constant.language.boolean.go'},
'2': {'name': 'constant.language.null.go'},
'3': {'name': 'constant.language.iota.go'},
},
'match': '\\b(?:(true|false)|(nil)|(iota))\\b',
},
'map_types': {
'begin': '\\b(map)\\b(\\[)',
'beginCaptures': {
'1': {'name': 'keyword.map.go'},
'2': {'name': 'punctuation.definition.begin.bracket.square.go'},
},
'end':
'(])((?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}(?![]*\\[]+{0,1}\\b(?:func|struct|map)\\b)[]*\\[]+{0,1}[.\\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'},
],
},
'multi_types': {
'begin': '\\b(type)\\b\\s*(\\()',
'beginCaptures': {
'1': {'name': 'keyword.type.go'},
'2': {'name': 'punctuation.definition.begin.bracket.round.go'},
},
'end': '\\)',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.round.go'},
},
'patterns': [
{'include': '#struct_variables_types'},
{'include': '#interface_variables_types'},
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
'numeric_literals': {
'captures': {
'0': {
'patterns': [
{
'begin': '(?=.)',
'end': '\\n|\$',
'patterns': [
{
'captures': {
'1': {
'name': 'constant.numeric.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'2': {
'name': 'punctuation.separator.constant.numeric.go',
},
'3': {'name': 'constant.numeric.decimal.point.go'},
'4': {
'name': 'constant.numeric.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'5': {
'name': 'punctuation.separator.constant.numeric.go',
},
'6': {'name': 'keyword.other.unit.exponent.decimal.go'},
'7': {
'name': 'keyword.operator.plus.exponent.decimal.go',
},
'8': {
'name': 'keyword.operator.minus.exponent.decimal.go',
},
'9': {
'name': 'constant.numeric.exponent.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'10': {'name': 'keyword.other.unit.imaginary.go'},
'11': {
'name': 'constant.numeric.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'12': {
'name': 'punctuation.separator.constant.numeric.go',
},
'13': {'name': 'keyword.other.unit.exponent.decimal.go'},
'14': {
'name': 'keyword.operator.plus.exponent.decimal.go',
},
'15': {
'name': 'keyword.operator.minus.exponent.decimal.go',
},
'16': {
'name': 'constant.numeric.exponent.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'17': {'name': 'keyword.other.unit.imaginary.go'},
'18': {'name': 'constant.numeric.decimal.point.go'},
'19': {
'name': 'constant.numeric.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'20': {
'name': 'punctuation.separator.constant.numeric.go',
},
'21': {'name': 'keyword.other.unit.exponent.decimal.go'},
'22': {
'name': 'keyword.operator.plus.exponent.decimal.go',
},
'23': {
'name': 'keyword.operator.minus.exponent.decimal.go',
},
'24': {
'name': 'constant.numeric.exponent.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'25': {'name': 'keyword.other.unit.imaginary.go'},
'26': {'name': 'keyword.other.unit.hexadecimal.go'},
'27': {
'name': 'constant.numeric.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'28': {
'name': 'punctuation.separator.constant.numeric.go',
},
'29': {'name': 'constant.numeric.hexadecimal.go'},
'30': {
'name': 'constant.numeric.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'31': {
'name': 'punctuation.separator.constant.numeric.go',
},
'32': {
'name': 'keyword.other.unit.exponent.hexadecimal.go',
},
'33': {
'name': 'keyword.operator.plus.exponent.hexadecimal.go',
},
'34': {
'name':
'keyword.operator.minus.exponent.hexadecimal.go',
},
'35': {
'name': 'constant.numeric.exponent.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'36': {'name': 'keyword.other.unit.imaginary.go'},
'37': {'name': 'keyword.other.unit.hexadecimal.go'},
'38': {
'name': 'constant.numeric.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'39': {
'name': 'punctuation.separator.constant.numeric.go',
},
'40': {
'name': 'keyword.other.unit.exponent.hexadecimal.go',
},
'41': {
'name': 'keyword.operator.plus.exponent.hexadecimal.go',
},
'42': {
'name':
'keyword.operator.minus.exponent.hexadecimal.go',
},
'43': {
'name': 'constant.numeric.exponent.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'44': {'name': 'keyword.other.unit.imaginary.go'},
'45': {'name': 'keyword.other.unit.hexadecimal.go'},
'46': {'name': 'constant.numeric.hexadecimal.go'},
'47': {
'name': 'constant.numeric.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'48': {
'name': 'punctuation.separator.constant.numeric.go',
},
'49': {
'name': 'keyword.other.unit.exponent.hexadecimal.go',
},
'50': {
'name': 'keyword.operator.plus.exponent.hexadecimal.go',
},
'51': {
'name':
'keyword.operator.minus.exponent.hexadecimal.go',
},
'52': {
'name': 'constant.numeric.exponent.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'53': {'name': 'keyword.other.unit.imaginary.go'},
},
'match':
'\\G(?:(?:(?:(?:(?:(?=[.0-9])(?!0[BOXbox])([0-9](?:[0-9]|((?<=\\h)_(?=\\h)))*)((?<=[0-9])\\.|\\.(?=[0-9]))([0-9](?:[0-9]|((?<=\\h)_(?=\\h)))*)?(?:(?<!_)([Ee])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)_(?=\\h))*))?(i(?!\\w))?(?:\\n|\$)|(?=[.0-9])(?!0[BOXbox])([0-9](?:[0-9]|((?<=\\h)_(?=\\h)))*)(?<!_)([Ee])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)_(?=\\h))*)(i(?!\\w))?(?:\\n|\$))|((?<=[0-9])\\.|\\.(?=[0-9]))([0-9](?:[0-9]|((?<=\\h)_(?=\\h)))*)(?:(?<!_)([Ee])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)_(?=\\h))*))?(i(?!\\w))?(?:\\n|\$))|(0[Xx])_?(\\h(?:\\h|((?<=\\h)_(?=\\h)))*)((?<=\\h)\\.|\\.(?=\\h))(\\h(?:\\h|((?<=\\h)_(?=\\h)))*)?(?<!_)([Pp])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)_(?=\\h))*)(i(?!\\w))?(?:\\n|\$))|(0[Xx])_?(\\h(?:\\h|((?<=\\h)_(?=\\h)))*)(?<!_)([Pp])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)_(?=\\h))*)(i(?!\\w))?(?:\\n|\$))|(0[Xx])((?<=\\h)\\.|\\.(?=\\h))(\\h(?:\\h|((?<=\\h)_(?=\\h)))*)(?<!_)([Pp])(\\+?)(-?)([0-9](?:[0-9]|(?<=\\h)_(?=\\h))*)(i(?!\\w))?(?:\\n|\$))',
},
{
'captures': {
'1': {
'name': 'constant.numeric.decimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'2': {
'name': 'punctuation.separator.constant.numeric.go',
},
'3': {'name': 'keyword.other.unit.imaginary.go'},
'4': {'name': 'keyword.other.unit.binary.go'},
'5': {
'name': 'constant.numeric.binary.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'6': {
'name': 'punctuation.separator.constant.numeric.go',
},
'7': {'name': 'keyword.other.unit.imaginary.go'},
'8': {'name': 'keyword.other.unit.octal.go'},
'9': {
'name': 'constant.numeric.octal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'10': {
'name': 'punctuation.separator.constant.numeric.go',
},
'11': {'name': 'keyword.other.unit.imaginary.go'},
'12': {'name': 'keyword.other.unit.hexadecimal.go'},
'13': {
'name': 'constant.numeric.hexadecimal.go',
'patterns': [
{
'match': '(?<=\\h)_(?=\\h)',
'name': 'punctuation.separator.constant.numeric.go',
},
],
},
'14': {
'name': 'punctuation.separator.constant.numeric.go',
},
'15': {'name': 'keyword.other.unit.imaginary.go'},
},
'match':
'\\G(?:(?:(?:(?=[.0-9])(?!0[BOXbox])([0-9](?:[0-9]|((?<=\\h)_(?=\\h)))*)(i(?!\\w))?(?:\\n|\$)|(0[Bb])_?([01](?:[01]|((?<=\\h)_(?=\\h)))*)(i(?!\\w))?(?:\\n|\$))|(0[Oo]?)_?((?:[0-7]|((?<=\\h)_(?=\\h)))+)(i(?!\\w))?(?:\\n|\$))|(0[Xx])_?(\\h(?:\\h|((?<=\\h)_(?=\\h)))*)(i(?!\\w))?(?:\\n|\$))',
},
{
'match': '(?:[.0-9A-Z_a-z]|(?<=[EPep])[-+])+',
'name': 'invalid.illegal.constant.numeric.go',
},
],
},
],
},
},
'match': '(?<!\\w)\\.?\\d(?:[.0-9A-Z_a-z]|(?<=[EPep])[-+])*',
},
'operators': {
'patterns': [
{
'match': '(?<!\\w)[\\&*]+(?!\\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'},
],
},
'other_struct_interface_expressions': {
'patterns': [
{'include': '#after_control_variables'},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.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': '\\{',
'name': 'punctuation.definition.begin.bracket.curly.go',
},
{
'match': '}',
'name': 'punctuation.definition.end.bracket.curly.go',
},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'\\b(?!(?:struct|interface)\\b)([.\\w]+)(?<brackets>\\[(?:[^]\\[]|\\g<brackets>)*])?(?=\\{)',
},
],
},
'other_variables': {'match': '\\w+', 'name': 'variable.other.go'},
'package_name': {
'patterns': [
{
'begin': '\\b(package)\\s+',
'beginCaptures': {
'1': {'name': 'keyword.package.go'},
},
'end': '(?!\\G)',
'patterns': [
{'match': '\\d\\w*', 'name': 'invalid.illegal.identifier.go'},
{'match': '\\w+', 'name': 'entity.name.type.package.go'},
],
},
],
},
'parameter-variable-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'},
],
},
],
},
'property_variables': {
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.property.go'},
],
},
},
'match': '\\b([.\\w]+:(?!=))',
},
'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'},
],
},
'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\\h{2}|u\\h{4}|U\\h{8})|.)(?=\')',
'name': 'constant.other.rune.go',
},
{'match': '[^\']+', 'name': 'invalid.illegal.unknown-rune.go'},
],
},
],
},
'single_type': {
'patterns': [
{
'captures': {
'1': {'name': 'keyword.type.go'},
'2': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
'3': {
'patterns': [
{
'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'},
],
},
{'include': '#type-declarations'},
{'include': '#generic_types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'^\\s*\\b(type)\\b\\s*([*.\\w]+)\\s+(?!(?:=\\s*)?[]*\\[]+{0,1}\\b(?:struct|interface)\\b)([\\s\\S]+)',
},
{
'begin': '(?:^|\\s+)\\b(type)\\b\\s*([*.\\w]+)(?=\\[)',
'beginCaptures': {
'1': {'name': 'keyword.type.go'},
'2': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'end':
'(?<=])(\\s+(?:=\\s*)?(?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}(?![]*\\[]+{0,1}\\b(?:struct|interface|func)\\b)[-\\]*.\\[\\w]+(?:,\\s*[]*.\\[\\w]+)*)?',
'endCaptures': {
'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': 'entity.name.type.go'},
],
},
},
'patterns': [
{'include': '#struct_variables_types'},
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{
'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'},
],
},
],
},
'slice_index_variables': {
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.go'},
],
},
},
'match':
'(?<=\\w\\[)((?:\\b[-%\\&*+./<>|\\w]+:|:\\b[-%\\&*+./<>|\\w]+)(?:\\b[-%\\&*+./<>|\\w]+)?(?::\\b[-%\\&*+./<>|\\w]+)?)(?=])',
},
'statements': {
'patterns': [
{'include': '#package_name'},
{'include': '#import'},
{'include': '#syntax_errors'},
{'include': '#group-functions'},
{'include': '#group-types'},
{'include': '#group-variables'},
{'include': '#hover'},
],
},
'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'},
{
'match': '\\bcomparable\\b',
'name': 'entity.name.type.comparable.go',
},
],
},
'string_escaped_char': {
'patterns': [
{
'match': '\\\\([0-7]{3}|["\'\\\\abfnrtv]|x\\h{2}|u\\h{4}|U\\h{8})',
'name': 'constant.character.escape.go',
},
{
'match': '\\\\[^"\'0-7Uabfnrtuvx]',
'name': 'invalid.illegal.unknown-escape.go',
},
],
},
'string_literals': {
'patterns': [
{
'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_placeholder': {
'patterns': [
{
'match':
'%(\\[\\d+])?([- #+0]{0,2}((\\d+|\\*)?(\\.?(\\d+|\\*|(\\[\\d+])\\*?)?(\\[\\d+])?)?))?[%EFGTUXb-gopqstvwx]',
'name': 'constant.other.placeholder.go',
},
],
},
'struct_interface_declaration': {
'captures': {
'1': {'name': 'keyword.type.go'},
'2': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match': '^\\s*\\b(type)\\b\\s*([.\\w]+)',
},
'struct_variable_types_fields_multi': {
'patterns': [
{
'begin':
'\\b(\\w+(?:,\\s*\\b\\w+)*(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}\\s*[]*\\[]+{0,1})\\b(struct)\\b\\s*(\\{)',
'beginCaptures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.property.go'},
],
},
'2': {'name': 'keyword.struct.go'},
'3': {'name': 'punctuation.definition.begin.bracket.curly.go'},
},
'end': '}',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.curly.go'},
},
'patterns': [
{'include': '#struct_variables_types_fields'},
{'include': '\$self'},
],
},
{
'begin':
'\\b(\\w+(?:,\\s*\\b\\w+)*(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}\\s*[]*\\[]+{0,1})\\b(interface)\\b\\s*(\\{)',
'beginCaptures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.property.go'},
],
},
'2': {'name': 'keyword.interface.go'},
'3': {'name': 'punctuation.definition.begin.bracket.curly.go'},
},
'end': '}',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.curly.go'},
},
'patterns': [
{'include': '#interface_variables_types_field'},
{'include': '\$self'},
],
},
{
'begin':
'\\b(\\w+(?:,\\s*\\b\\w+)*(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}\\s*[]*\\[]+{0,1})\\b(func)\\b\\s*(\\()',
'beginCaptures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.property.go'},
],
},
'2': {'name': 'keyword.function.go'},
'3': {'name': 'punctuation.definition.begin.bracket.round.go'},
},
'end': '\\)',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.round.go'},
},
'patterns': [
{'include': '#function_param_types'},
{'include': '\$self'},
],
},
{'include': '#parameter-variable-types'},
],
},
'struct_variables_types': {
'begin': '\\b(struct)\\b\\s*(\\{)',
'beginCaptures': {
'1': {'name': 'keyword.struct.go'},
'2': {'name': 'punctuation.definition.begin.bracket.curly.go'},
},
'end': '}',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.curly.go'},
},
'patterns': [
{'include': '#struct_variables_types_fields'},
{'include': '\$self'},
],
},
'struct_variables_types_fields': {
'patterns': [
{'include': '#struct_variable_types_fields_multi'},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'(?<=\\{)\\s*((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[]*.\\[\\w]+)\\s*(?=})',
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.property.go'},
],
},
'2': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'(?<=\\{)\\s*((?:\\w+,\\s*)+{0,1}\\w+\\s+)((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[]*.\\[\\w]+)\\s*(?=})',
},
{
'captures': {
'1': {
'patterns': [
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{
'match': '\\w+',
'name': 'variable.other.property.go',
},
],
},
'2': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'((?:\\w+,\\s*)+{0,1}\\w+\\s+)?((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[^"/`\\s]+;?)',
},
],
},
},
'match':
'(?<=\\{)((?:\\s*(?:(?:\\w+,\\s*)+{0,1}\\w+\\s+)?(?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[^"/`\\s]+;?)+)\\s*(?=})',
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[*.\\w]+\\s*)(?:(?=["/`])|\$)',
},
{
'captures': {
'1': {
'patterns': [
{'include': '#type-declarations'},
{'match': '\\w+', 'name': 'variable.other.property.go'},
],
},
'2': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{'include': '#parameter-variable-types'},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match': '\\b(\\w+(?:\\s*,\\s*\\b\\w+)*)\\s*([^"/`]+)',
},
],
},
'support_functions': {
'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'},
],
},
},
'match':
'(?:((?<=\\.)\\b\\w+)|\\b(\\w+))(?<brackets>\\[(?:[^]\\[]|\\g<brackets>)*])?(?=\\()',
},
'switch_types': {
'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': [
{
'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'},
],
},
},
'match':
'^\\s*\\b(case)\\b\\s+([!*,.<=>\\w\\s]+)(:)(\\s*/[*/]\\s*.*)?\$',
},
{
'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'},
],
},
'switch_variables': {
'patterns': [
{
'captures': {
'1': {'name': 'keyword.control.go'},
'2': {
'patterns': [
{'include': '#type-declarations'},
{'include': '#support_functions'},
{'include': '#variable_assignment'},
{'match': '\\w+', 'name': 'variable.other.go'},
],
},
},
'match': '^\\s*\\b(case)\\b\\s+([\\s\\S]+:\\s*(?:/[*/].*)?)\$',
},
{
'begin':
'(?<=\\bswitch\\b)\\s*((?:[.\\w]+(?:\\s*[-!%\\&+,/:<=>|]+\\s*[.\\w]+)*\\s*[-!%\\&+,/:<=>|]+)?\\s*[-\\]%\\&(-+./<>\\[|\\w]+{0,1}\\s*(?:;\\s*[-\\]%\\&(-+./<>\\[|\\w]+\\s*)?)(\\{)',
'beginCaptures': {
'1': {
'patterns': [
{'include': '#support_functions'},
{'include': '#type-declarations'},
{'include': '#variable_assignment'},
{'match': '\\w+', 'name': 'variable.other.go'},
],
},
'2': {'name': 'punctuation.definition.begin.bracket.curly.go'},
},
'end': '}',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.curly.go'},
},
'patterns': [
{
'begin': '\\bcase\\b',
'beginCaptures': {
'0': {'name': 'keyword.control.go'},
},
'end': ':',
'endCaptures': {
'0': {'name': 'punctuation.other.colon.go'},
},
'patterns': [
{'include': '#support_functions'},
{'include': '#type-declarations'},
{'include': '#variable_assignment'},
{'match': '\\w+', 'name': 'variable.other.go'},
],
},
{'include': '\$self'},
],
},
],
},
'syntax_errors': {
'patterns': [
{
'captures': {
'1': {'name': 'invalid.illegal.slice.go'},
},
'match': '\\[](\\s+)',
},
{
'match': '\\b0[0-7]*[89]\\d*\\b',
'name': 'invalid.illegal.numeric.go',
},
],
},
'terminators': {'match': ';', 'name': 'punctuation.terminator.go'},
'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': {
'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'},
],
},
'type_assertion_inline': {
'captures': {
'1': {'name': 'keyword.type.go'},
'2': {
'patterns': [
{'include': '#type-declarations-without-brackets'},
{
'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': '\\{',
'name': 'punctuation.definition.begin.bracket.curly.go',
},
{
'match': '}',
'name': 'punctuation.definition.end.bracket.curly.go',
},
{'match': '\\w+', 'name': 'entity.name.type.go'},
],
},
},
'match':
'(?<=\\.\\()(?:\\b(type)\\b|((?:\\s*[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+{0,1}[]*\\[]+{0,1}[.\\w]+(?:\\[(?:[]*.\\[{}\\w]+(?:,\\s*[]*.\\[{}\\w]+)*)?])?))(?=\\))',
},
'var_assignment': {
'patterns': [
{
'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'},
],
},
},
'match':
'(?<=\\bvar\\b)\\s*\\b([.\\w]+(?:,\\s*[.\\w]+)*)\\s*((?:(?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+(?:\\([^)]+\\))?)?(?![]*\\[]+{0,1}\\b(?:struct|func|map)\\b)(?:[]*.\\[\\w]+(?:,\\s*[]*.\\[\\w]+)*)?\\s*=?)?',
},
{
'begin': '(?<=\\bvar\\b)\\s*(\\()',
'beginCaptures': {
'1': {'name': 'punctuation.definition.begin.bracket.round.go'},
},
'end': '\\)',
'endCaptures': {
'0': {'name': 'punctuation.definition.end.bracket.round.go'},
},
'patterns': [
{
'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'},
],
},
},
'match':
'^\\s*\\b([.\\w]+(?:,\\s*[.\\w]+)*)\\s*((?:(?:[]*\\[]+{0,1}(?:<-\\s*)?\\bchan\\b(?:\\s*<-)?\\s*)+(?:\\([^)]+\\))?)?(?![]*\\[]+{0,1}\\b(?:struct|func|map)\\b)(?:[]*.\\[\\w]+(?:,\\s*[]*.\\[\\w]+)*)?\\s*=?)?',
},
{'include': '\$self'},
],
},
],
},
'variable_assignment': {
'patterns': [
{
'captures': {
'0': {
'patterns': [
{'include': '#delimiters'},
{'match': '\\d\\w*', 'name': 'invalid.illegal.identifier.go'},
{'match': '\\w+', 'name': 'variable.other.assignment.go'},
],
},
},
'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'},
],
},
},
'match': '\\b[*.\\w]+(?:,\\s*[*.\\w]+)*(?=\\s*=(?!=))',
},
],
},
},
'scopeName': 'source.go',
},
);