{ "fileTypes": [ "proto" ], "foldingStartMarker": "/\\*\\*|\\{\\s*$", "foldingStopMarker": "\\*\\*/|^\\s*\\}", "name": "Protocol Buffer", "patterns": [ { "captures": { "1": { "name": "keyword.other.import.protobuf" }, "2": { "name": "string.quoted.double.import.protobuf" } }, "match": "(import) (\".*\")", "name": "meta.import.declaration.protobuf" }, { "begin": "\\b(message)\\s+([A-Za-z0-9_]+)\\s*\\{", "captures": { "1": { "name": "storage.type.message.protobuf" }, "2": { "name": "entity.name.type.message.protobuf" } }, "end": "}", "name": "meta.message-declaration.protobuf", "patterns": [ { "include": "$self" }, { "include": "#any_field" }, { "include": "#comments" } ] }, { "begin": "\\b(enum)\\s+([A-Za-z0-9_]+)\\s*\\{", "beginCaptures": { "1": { "name": "storage.type.enum.protobuf" }, "2": { "name": "entity.name.type.enum.protobuf" } }, "end": "}", "name": "meta.enum-declaration.protobuf", "patterns": [ { "captures": { "1": { "name": "constant.other.user-defined.protobuf" }, "2": { "name": "constant.numeric.protobuf" } }, "match": "\\b([A-Za-z0-9_]+)\\s*=\\s*(\\d+)\\b", "name": "meta.individual-enum-definition.protobuf" }, { "include": "#anywhere_option" }, { "include": "#bracketed_option" }, { "include": "#comments" } ] }, { "begin": "\\b(service)\\s+([A-Za-z0-9_]+)\\s*\\{", "beginCaptures": { "1": { "name": "storage.type.enum.protobuf" }, "2": { "name": "entity.name.type.enum.protobuf" } }, "end": "}", "name": "meta.service-declaration.protobuf", "patterns": [ { "captures": { "1": { "name": "keyword.other.rpc-definition.protobuf" }, "2": { "name": "entity.name.function.service-rpc.protobuf" }, "3": { "name": "variable.parameter.request-type.protobuf" }, "4": { "name": "keyword.operator.returns.protobuf" }, "5": { "name": "variable.parameter.response-type.protobuf" } }, "match": "\\b(rpc)\\s+([A-Za-z0-9_]+)\\s+\\(([A-Za-z0-9_]+)\\)\\s*(returns)\\s*\\(([A-Za-z0-9_]+)\\)\\s*;", "name": "meta.individual-rpc-call.protobuf" }, { "begin": "\\b(method)\\s+([A-Za-z0-9_]+)\\s*\\(\\s*\\)\\s*{", "captures": { "1": { "name": "keyword.other.method-modification.protobuf" }, "2": { "name": "entity.name.function.protobuf" } }, "end": "}", "name": "meta.method-mofification.protobuf", "patterns": [ { "include": "#comments" }, { "include": "#rpc_string_attribute" }, { "include": "#rpc_primitive_attribute" } ] }, { "include": "#anywhere_option" }, { "include": "#comments" } ] }, { "captures": { "1": { "name": "keyword.other.package-definition.protobuf" }, "2": { "name": "entity.name.section.protobuf" } }, "match": "\\b(package)\\s+([A-Za-z0-9.]+)\\s*;", "name": "meta.package.protobuf" }, { "captures": { "1": { "name": "storage.modifier.extensions.protobuf" }, "2": { "name": "constant.numeric.protobufs" }, "3": { "name": "keyword.operator.to.protobufs" }, "4": { "name": "constant.numeric.protobufs" } }, "match": "(extensions)\\s+(\\d+)\\s+(to)\\s+(max|\\d+);", "name": "meta.extension-specification.protobuf" }, { "include": "#anywhere_option" }, { "include": "#bracketed_option" }, { "include": "#extend_block" }, { "include": "#comments" } ], "repository": { "any_field": { "patterns": [ { "include": "#primitive_field" }, { "include": "#group_field" }, { "include": "#user_defined_message_field" } ] }, "anywhere_option": { "begin": "(option)\\s+", "beginCaptures": { "1": { "name": "keyword.other.option.protobuf" } }, "end": ";", "patterns": [ { "include": "#attribute" } ] }, "attribute": { "patterns": [ { "include": "#indiv_attribute" }, { "include": "#string_attribute" } ] }, "bracketed_option": { "begin": "\\[", "end": ";", "patterns": [ { "include": "#attribute" } ] }, "comments": { "begin": "//", "end": "\\n", "name": "comment.line.double-slash.protobuf" }, "extend_block": { "begin": "\\b(extend)\\s+([A-Za-z0-9_]+)\\s*\\{", "captures": { "1": { "name": "storage.type.extend.protobuf" }, "2": { "name": "entity.name.type.message.protobuf" } }, "end": "}", "patterns": [ { "include": "#any_field" }, { "include": "#comments" } ] }, "group_field": { "begin": "(required|optional|repeated)\\s+(group)\\s+([A-Za-z0-9_]+)\\s*=\\s*(\\d+)\\s*{", "captures": { "1": { "name": "keyword.control.occurrences.protobuf" }, "2": { "name": "invalid.deprecated.groups.protobuf" }, "3": { "name": "variable.other.primitive-field.protobuf" }, "4": { "name": "constant.numeric.field-tag.protobuf" } }, "end": "}", "patterns": [ { "include": "#any_field" }, { "include": "#comments" } ] }, "indiv_attribute": { "captures": { "1": { "name": "entity.other.attribute-name.protobuf" }, "2": { "name": "constant.language.field-option-values.protobuf" } }, "match": "\\(?([A-Za-z0-9_.]+)\\)?\\s*=\\s*(true|false|\\d+|([A-Z_]+))\\b" }, "primitive_field": { "captures": { "1": { "name": "keyword.control.occurrences.protobuf" }, "2": { "name": "storage.type.built-in.protobuf" }, "6": { "name": "variable.other.primitive-field.protobuf" }, "7": { "name": "constant.numeric.field-tag.protobuf" } }, "match": "(required|optional|repeated)\\s+(((s|u)?int|s?fixed)(32|64)|string|bytes|bool)\\s+(\\S+)\\s*=\\s*(\\d+)" }, "rpc_primitive_attribute": { "beginCaptures": { "1": { "name": "keyword.other.option.protobuf" }, "2": { "name": "entity.other.attribute-name.protobuf" }, "3": { "name": "entity.other.attribute-name.protobuf" }, "4": { "name": "constant.numeric.protobuf" } }, "match": "(option)\\s+\\(?([A-Za-z0-9_.]+)\\)?\\.([A-Za-z0-9.]+)\\s*=\\s*(true|false|\\d+|([A-Z_]+))\\b" }, "rpc_string_attribute": { "begin": "(option)\\s+\\(?([A-Za-z0-9_.]+)\\)?\\.([A-Za-z0-9.]+)\\s*=\\s*(\")", "beginCaptures": { "1": { "name": "keyword.other.option.protobuf" }, "2": { "name": "entity.other.attribute-name.protobuf" }, "3": { "name": "entity.other.attribute-name.protobuf" }, "4": { "name": "string.quoted.double.protobuf" } }, "contentName": "string.quoted.double.protobuf", "end": "(\")", "endCaptures": { "1": { "name": "string.quoted.double.protobuf" } } }, "string_attribute": { "begin": "\\(?([A-Za-z0-9_.]+)\\)?\\s*=\\s*(\")", "beginCaptures": { "1": { "name": "entity.other.attribute-name.protobuf" }, "2": { "name": "string.quoted.double.protobuf" } }, "contentName": "string.quoted.double.protobuf", "end": "(\")", "endCaptures": { "1": { "name": "string.quoted.double.protobuf" } } }, "user_defined_message_field": { "captures": { "1": { "name": "keyword.control.occurrences.protobuf" }, "2": { "name": "support.class.user-defined-type.protobuf" }, "3": { "name": "variable.other.primitive-field.protobuf" }, "4": { "name": "constant.numeric.field-tag.protobuf" } }, "match": "(required|optional|repeated)\\s+([A-Za-z.]*)\\s+(\\S+)\\s*=\\s*(\\d+)" } }, "scopeName": "source.protobuf", "uuid": "D1D0E31F-1807-408E-A184-00F4D0A2619F" }