UNPKG

@wooorm/starry-night

Version:
927 lines (924 loc) 32.5 kB
// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // <https://github.com/onflow/vscode-cadence> // and licensed `apache-2.0`. // See <https://github.com/wooorm/starry-night> for more info. /** * @import {Grammar} from '@wooorm/starry-night' */ /** @type {Grammar} */ const grammar = { extensions: ['.cdc'], names: ['cadence'], patterns: [ {include: '#comments'}, {include: '#declarations'}, {include: '#keywords'}, {include: '#code-block'}, {include: '#expressions'}, {include: '#composite'}, {include: '#event'} ], repository: { 'code-block': { begin: '\\{', beginCaptures: {0: {name: 'punctuation.section.scope.begin.cadence'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.section.scope.end.cadence'}}, patterns: [{include: '$self'}] }, comments: { patterns: [ { captures: {1: {name: 'punctuation.definition.comment.cadence'}}, match: '\\A^(#!).*$\\n?', name: 'comment.line.number-sign.cadence' }, { begin: '/\\*\\*(?!/)', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.cadence'} }, end: '\\*/', endCaptures: { 0: {name: 'punctuation.definition.comment.end.cadence'} }, name: 'comment.block.documentation.cadence', patterns: [{include: '#nested'}] }, { begin: '/\\*:', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.cadence'} }, end: '\\*/', endCaptures: { 0: {name: 'punctuation.definition.comment.end.cadence'} }, name: 'comment.block.documentation.playground.cadence', patterns: [{include: '#nested'}] }, { begin: '/\\*', beginCaptures: { 0: {name: 'punctuation.definition.comment.begin.cadence'} }, end: '\\*/', endCaptures: { 0: {name: 'punctuation.definition.comment.end.cadence'} }, name: 'comment.block.cadence', patterns: [{include: '#nested'}] }, { match: '\\*/', name: 'invalid.illegal.unexpected-end-of-block-comment.cadence' }, { begin: '(^[ \\t]+)?(?=//)', beginCaptures: { 1: {name: 'punctuation.whitespace.comment.leading.cadence'} }, end: '(?!\\G)', patterns: [ { begin: '///', beginCaptures: { 0: {name: 'punctuation.definition.comment.cadence'} }, end: '$', name: 'comment.line.triple-slash.documentation.cadence' }, { begin: '//:', beginCaptures: { 0: {name: 'punctuation.definition.comment.cadence'} }, end: '$', name: 'comment.line.double-slash.documentation.cadence' }, { begin: '//', beginCaptures: { 0: {name: 'punctuation.definition.comment.cadence'} }, end: '$', name: 'comment.line.double-slash.cadence' } ] } ], repository: { nested: {begin: '/\\*', end: '\\*/', patterns: [{include: '#nested'}]} } }, composite: { begin: '\\b((?:(?:struct|resource|contract|attachment)(?:\\s+interface)?)|enum)\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)', beginCaptures: { 1: {name: 'storage.type.$1.cadence'}, 2: {name: 'entity.name.type.$1.cadence'} }, end: '(?<=\\})|(?=\\s*\\Z)', name: 'meta.definition.type.composite.cadence', patterns: [ {include: '#comments'}, {include: '#conformance-clause'}, { begin: '\\{', beginCaptures: {0: {name: 'punctuation.section.type.begin.cadence'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.section.type.end.cadence'}}, name: 'meta.definition.type.body.cadence', patterns: [{include: '$self'}] } ] }, 'conformance-clause': { begin: '(:)(?=\\s*\\{)|(:)\\s*', beginCaptures: { 1: {name: 'invalid.illegal.empty-conformance-clause.cadence'}, 2: {name: 'punctuation.separator.conformance-clause.cadence'} }, end: '(?!\\G)$|(?=[={}])', name: 'meta.conformance-clause.cadence', patterns: [ { begin: '\\G', end: '(?!\\G)$|(?=[={}])', patterns: [{include: '#comments'}, {include: '#type'}] } ] }, declarations: { patterns: [ {include: '#var-let-declaration'}, {include: '#function'}, {include: '#initializer'}, {include: '#prepare-execute'}, {include: '#execute-phase'}, {include: '#pre-post'}, {include: '#transaction'} ] }, event: { begin: '\\b(event)\\b\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*', beginCaptures: { 1: {name: 'storage.type.event.cadence'}, 2: {name: 'entity.name.type.event.cadence'} }, end: '(?<=\\))', name: 'meta.definition.type.event.cadence', patterns: [{include: '#comments'}, {include: '#parameter-clause'}] }, 'execute-phase': { begin: '(?<!\\.)\\b(execute)\\b\\s*(?=\\{)', beginCaptures: {1: {name: 'storage.modifier.phase.cadence'}}, end: '(?<=\\})', name: 'meta.definition.transaction.phase.cadence', patterns: [ {include: '#comments'}, { begin: '\\{', beginCaptures: {0: {name: 'punctuation.section.phase.begin.cadence'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.section.phase.end.cadence'}}, patterns: [{include: '$self'}] } ] }, 'expression-element-list': { patterns: [ {include: '#comments'}, { begin: '([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*(:)', beginCaptures: { 1: {name: 'variable.parameter.function-call.cadence'}, 2: {name: 'punctuation.separator.argument-label.cadence'} }, end: '(?=[,)\\]])', patterns: [{include: '#expressions'}] }, { begin: '(?![,)\\]])(?=\\S)', end: '(?=[,)\\]])', patterns: [{include: '#expressions'}] } ] }, expressions: { patterns: [ {include: '#comments'}, {include: '#keywords'}, {include: '#language-variables'}, {include: '#function-expression'}, {include: '#path-literals'}, { begin: '(?!\\b(?:if|while|for|return|create|destroy|emit|as)\\b)([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*(<)(?=[\\p{Lu}_&@\\[{(]|auth\\b|\\s*$)', beginCaptures: { 1: {name: 'entity.name.function.cadence'}, 2: {name: 'punctuation.definition.type-arguments.begin.cadence'} }, end: '(>)(?!\\s*[=<>])', endCaptures: { 1: {name: 'punctuation.definition.type-arguments.end.cadence'} }, name: 'meta.type.arguments.cadence', patterns: [ {include: '#type'}, {match: ',', name: 'punctuation.separator.type-argument.cadence'} ] }, { begin: '(\\()', beginCaptures: { 1: {name: 'punctuation.definition.arguments.begin.cadence'} }, end: '(\\))', endCaptures: { 1: {name: 'punctuation.definition.arguments.end.cadence'} }, name: 'meta.group.cadence', patterns: [{include: '#expression-element-list'}] }, { begin: '(?<=\\.)([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*(\\()', beginCaptures: { 1: {name: 'entity.name.function.cadence'}, 2: {name: 'punctuation.definition.arguments.begin.cadence'} }, end: '(\\))', endCaptures: { 1: {name: 'punctuation.definition.arguments.end.cadence'} }, name: 'meta.function-call.method.cadence', patterns: [{include: '#expression-element-list'}] }, { match: '(?<=\\.)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*', name: 'variable.other.member.cadence' }, {include: '#function-call-expression'}, { match: '(?<!\\.)\\b(?!(?:contract|struct|resource|event|enum|attachment|entitlement|import|fun|let|var|if|else|switch|case|default|while|for|in|break|continue|return|emit|as|create|destroy|attach|to|remove|from|pub|priv|access|all|self|view|auth|transaction|prepare|execute|pre|post|init|true|false|nil|Type|Int|UInt|Int8|Int16|Int32|Int64|Int128|Int256|UInt8|UInt16|UInt32|UInt64|UInt128|UInt256|Word8|Word16|Word32|Word64|Fix64|Fix128|UFix64|UFix128|String|Character|Bool|Address|Void|AnyStruct|AnyResource|Any|Never|mapping|include)\\b)[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\b', name: 'variable.other.readwrite.cadence' }, {include: '#literals'}, {include: '#operators'} ] }, function: { begin: '\\b(fun)\\b\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*', beginCaptures: { 1: {name: 'storage.type.function.cadence'}, 2: {name: 'entity.name.function.cadence'} }, end: '(?<=\\})|;|(?=\\}[\\s]*$)|$', name: 'meta.definition.function.cadence', patterns: [ {include: '#comments'}, {include: '#parameter-clause'}, {include: '#function-result'}, { begin: '(\\{)', beginCaptures: { 1: {name: 'punctuation.section.function.begin.cadence'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.section.function.end.cadence'}}, name: 'meta.definition.function.body.cadence', patterns: [{include: '$self'}] } ] }, 'function-call-expression': { patterns: [ { begin: '(?<!\\.)\\b(?!(?:set|init|transaction|prepare|execute|access|auth))([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*(\\()', beginCaptures: { 1: {name: 'entity.name.function.cadence'}, 2: {name: 'punctuation.definition.arguments.begin.cadence'} }, end: '(\\))', endCaptures: { 1: {name: 'punctuation.definition.arguments.end.cadence'} }, name: 'meta.function-call.cadence', patterns: [{include: '#expression-element-list'}] } ] }, 'function-expression': { begin: '(?<!\\.)\\b(?:(view)\\s+)?(fun)\\b(?=\\s*\\()', beginCaptures: { 1: {name: 'storage.modifier.view.cadence'}, 2: {name: 'storage.type.function.cadence'} }, end: '(?<=\\})|$', name: 'meta.function.expression.cadence', patterns: [ {include: '#comments'}, {include: '#parameter-clause'}, {include: '#function-result'}, { begin: '(\\{)', beginCaptures: { 1: {name: 'punctuation.section.function.begin.cadence'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.section.function.end.cadence'}}, name: 'meta.definition.function.body.cadence', patterns: [{include: '$self'}] } ] }, 'function-result': { begin: '(?<![/=\\-+!*%<>&|\\^~.])(:)(?![/=\\-+!*%<>&|\\^~.])\\s*', beginCaptures: {1: {name: 'keyword.operator.function-result.cadence'}}, end: '(?<![@&\\[<])(?!\\G)(?=\\s*\\{)|(?=;|(?<!\\{)\\})|$', name: 'meta.function-result.cadence', patterns: [{include: '#type'}] }, initializer: { begin: '(?<!\\.)\\b(init)\\s*(?=\\(|<)', beginCaptures: {1: {name: 'storage.type.function.cadence'}}, end: '(?<=\\})|$', name: 'meta.definition.function.initializer.cadence', patterns: [ {include: '#comments'}, {include: '#parameter-clause'}, { begin: '(\\{)', beginCaptures: { 1: {name: 'punctuation.section.function.begin.cadence'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.section.function.end.cadence'}}, name: 'meta.definition.function.body.cadence', patterns: [{include: '$self'}] } ] }, keywords: { patterns: [ {match: '(?<!\\.)\\bvar\\b', name: 'storage.type.var.cadence'}, {match: '(?<!\\.)\\blet\\b', name: 'storage.type.let.cadence'}, { begin: '(?<!\\.)\\b(entitlement)\\s+(mapping)\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*(\\{)', beginCaptures: { 1: {name: 'keyword.declaration.entitlement.cadence'}, 2: {name: 'keyword.other.mapping.cadence'}, 3: {name: 'entity.name.type.entitlement-mapping.cadence'}, 4: {name: 'punctuation.definition.type.begin.cadence'} }, end: '(\\})', endCaptures: {1: {name: 'punctuation.definition.type.end.cadence'}}, name: 'meta.definition.entitlement-mapping.cadence', patterns: [ {include: '#comments'}, { match: '\\binclude\\b', name: 'keyword.other.mapping.include.cadence' }, { captures: { 1: {name: 'entity.name.type.entitlement-mapping.cadence'} }, match: '(?<=\\binclude)\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*)' }, { match: '[\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*', name: 'entity.name.type.entitlement.cadence' }, {match: '->', name: 'punctuation.separator.mapping.cadence'} ] }, { captures: { 1: {name: 'keyword.declaration.entitlement.cadence'}, 2: {name: 'entity.name.type.entitlement.cadence'} }, match: '(?<!\\.)\\b(entitlement)\\b\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)' }, { begin: '(?<!\\.)\\b(access)\\b\\s*(\\()', beginCaptures: { 1: {name: 'storage.modifier.access.cadence'}, 2: {name: 'punctuation.section.group.begin.cadence'} }, end: '(\\))', endCaptures: {1: {name: 'punctuation.section.group.end.cadence'}}, name: 'meta.access.modifier.cadence', patterns: [ {include: '#comments'}, {match: '\\bmapping\\b', name: 'keyword.other.mapping.cadence'}, { captures: { 1: {name: 'entity.name.type.entitlement-mapping.cadence'} }, match: '(?<=\\bmapping)\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*)' }, { match: '\\b(?:all|self|contract|account)\\b', name: 'constant.language.access.audience.cadence' }, {match: ',', name: 'punctuation.separator.entitlement.cadence'}, {match: '\\|', name: 'punctuation.separator.entitlement.cadence'}, { match: '[\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*', name: 'entity.name.type.entitlement.cadence' } ] }, { match: '(?<!\\.)\\b(?:if|else|switch|case|default)\\b', name: 'keyword.control.branch.cadence' }, { match: '(?<!\\.)\\b(?:return|continue|break)\\b', name: 'keyword.control.transfer.cadence' }, { match: '(?<!\\.)\\b(?:while|for|in)\\b', name: 'keyword.control.loop.cadence' }, { match: '(?<!\\.)\\b(?:create|destroy|emit|attach|to|remove|from)\\b', name: 'keyword.other.cadence' }, { match: '(?<!\\.)\\b(pub|priv)\\b', name: 'invalid.deprecated.keyword.cadence' }, {match: '(?<!\\.)\\bview\\b', name: 'storage.modifier.view.cadence'}, {match: '(?<!\\.)\\b(auth)\\b', name: 'keyword.other.auth.cadence'}, { begin: '(?<!\\.)\\b(import)\\b', beginCaptures: {1: {name: 'keyword.control.import.cadence'}}, end: '(?=$|//|/\\*|;)', name: 'meta.import.cadence', patterns: [ {match: '\\bfrom\\b', name: 'keyword.control.import.cadence'}, {include: '#literals'}, { match: '\\b[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*\\b', name: 'variable.other.readwrite.cadence' } ] } ] }, 'language-variables': { patterns: [{match: '\\b(self)\\b', name: 'variable.language.cadence'}] }, literals: { patterns: [ {include: '#boolean'}, {include: '#numeric'}, {include: '#string'}, {match: '\\bnil\\b', name: 'constant.language.nil.cadence'} ], repository: { boolean: { match: '\\b(true|false)\\b', name: 'constant.language.boolean.cadence' }, numeric: { patterns: [ {include: '#binary'}, {include: '#octal'}, {include: '#hexadecimal'}, {include: '#fixed-point'}, {include: '#decimal'} ], repository: { binary: { match: '(\\B\\-|\\b)0b[01]([_01]*[01])?\\b', name: 'constant.numeric.integer.binary.cadence' }, decimal: { match: '(\\B\\-|\\b)[0-9]([_0-9]*[0-9])?\\b', name: 'constant.numeric.integer.decimal.cadence' }, 'fixed-point': { match: '(\\B\\-|\\b)[0-9]([_0-9]*[0-9])?\\.[0-9]([_0-9]*[0-9])?\\b', name: 'constant.numeric.float.cadence' }, hexadecimal: { match: '(\\B\\-|\\b)0x[0-9A-Fa-f]([_0-9A-Fa-f]*[0-9A-Fa-f])?\\b', name: 'constant.numeric.integer.hexadecimal.cadence' }, octal: { match: '(\\B\\-|\\b)0o[0-7]([_0-7]*[0-7])?\\b', name: 'constant.numeric.integer.octal.cadence' } } }, string: { patterns: [ { begin: '"', beginCaptures: { 0: {name: 'punctuation.definition.string.begin.cadence'} }, end: '"', endCaptures: { 0: {name: 'punctuation.definition.string.end.cadence'} }, name: 'string.quoted.double.single-line.cadence', patterns: [ { match: '\\r|\\n', name: 'invalid.illegal.returns-not-allowed.cadence' }, { begin: '\\\\\\(', beginCaptures: { 0: { name: 'punctuation.section.embedded.begin.cadence meta.embedded.cadence' } }, contentName: 'meta.embedded.line.cadence', end: '\\)', endCaptures: { 0: { name: 'punctuation.section.embedded.end.cadence meta.embedded.cadence' } }, name: 'meta.interpolation.cadence', patterns: [ { begin: '\\(', beginCaptures: { 0: {name: 'punctuation.section.group.begin.cadence'} }, end: '\\)', endCaptures: { 0: {name: 'punctuation.section.group.end.cadence'} }, patterns: [{include: '#expressions'}] }, {include: '#expressions'} ] }, {include: '#string-guts'} ] } ], repository: { 'string-guts': { patterns: [ { match: '\\\\[0\\\\tnr"\']', name: 'constant.character.escape.cadence' }, { match: '\\\\u\\{[0-9a-fA-F]{1,8}\\}', name: 'constant.character.escape.unicode.cadence' } ] } } } } }, operators: { patterns: [ {match: '<->', name: 'keyword.operator.swap.cadence'}, {match: '\\?\\.', name: 'keyword.operator.optional.chain.cadence'}, { begin: '\\b(as\\?|as!|as)\\b', beginCaptures: {0: {name: 'keyword.operator.type.cast.cadence'}}, end: '(?=$|;|//|/\\\\*|\\")|(?=\\)|,|\\})|(?<=\\>)(?=\\s*\\{(?!\\s*[\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*\\s*:))|(?<=[\\p{L}\\p{N}\\}\\>\\)\\]\\?])(?=\\s*\\{(?!\\s*[\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*\\s*:))|(?=\\?\\?)', name: 'meta.type.cast-target.cadence', patterns: [ { begin: '\\{(?=\\s*[\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*\\s*:)', beginCaptures: { 0: { name: 'punctuation.definition.type.dictionary.begin.cadence' } }, end: '(\\})', endCaptures: { 1: {name: 'punctuation.definition.type.dictionary.end.cadence'} }, name: 'meta.type.dictionary.cadence', patterns: [ {include: '#comments'}, {include: '#type'}, { match: ':', name: 'punctuation.separator.type.dictionary.cadence' }, { match: ',', name: 'punctuation.separator.type.dictionary.cadence' } ] }, {include: '#type'} ] }, {match: '\\-', name: 'keyword.operator.arithmetic.unary.cadence'}, {match: '(?<=\\))!', name: 'keyword.operator.force-unwrap.cadence'}, {match: '!', name: 'keyword.operator.logical.not.cadence'}, {match: '=', name: 'keyword.operator.assignment.cadence'}, {match: '<-', name: 'keyword.operator.move.cadence'}, {match: '<-!', name: 'keyword.operator.force-move.cadence'}, {match: '\\+|\\-|\\*|/', name: 'keyword.operator.arithmetic.cadence'}, {match: '%', name: 'keyword.operator.arithmetic.remainder.cadence'}, {match: '>>', name: 'keyword.operator.bitwise.shift.cadence'}, {match: '<<', name: 'keyword.operator.bitwise.shift.cadence'}, {match: '==|!=|>|<|>=|<=', name: 'keyword.operator.comparison.cadence'}, {match: '\\?\\?', name: 'keyword.operator.coalescing.cadence'}, {match: '&&|\\|\\|', name: 'keyword.operator.logical.cadence'}, {match: '[?!]', name: 'keyword.operator.type.optional.cadence'} ] }, 'parameter-clause': { begin: '(\\()', beginCaptures: { 1: {name: 'punctuation.definition.parameters.begin.cadence'} }, end: '(\\))', endCaptures: {1: {name: 'punctuation.definition.parameters.end.cadence'}}, name: 'meta.parameter-clause.cadence', patterns: [{include: '#comments'}, {include: '#parameter-list'}] }, 'parameter-list': { patterns: [ {include: '#comments'}, { captures: { 1: {name: 'keyword.operator.unnamed-parameter.cadence'}, 2: {name: 'variable.parameter.cadence'} }, match: '(_)\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)(?=\\s*:)' }, { captures: { 1: {name: 'entity.name.label.cadence'}, 2: {name: 'variable.parameter.cadence'} }, match: '([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)(?=\\s*:)' }, { captures: {1: {name: 'variable.parameter.cadence'}}, match: '([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)(?=\\s*:)' }, { begin: ':\\s*(?!\\s)', end: '(?=[,)])', patterns: [ {include: '#type'}, { match: ':', name: 'invalid.illegal.extra-colon-in-parameter-list.cadence' } ] } ] }, 'path-literals': { patterns: [ { captures: { 1: {name: 'punctuation.separator.path.cadence'}, 2: {name: 'constant.other.path.cadence'} }, match: '(/)((storage|public)(/[\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)?)' } ] }, 'pre-post': { begin: '(?<!\\.)\\b(pre|post)\\b\\s*(?=\\{)', beginCaptures: {1: {name: 'storage.modifier.phase.cadence'}}, end: '(?<=\\})', name: 'meta.definition.transaction.phase.cadence', patterns: [ {include: '#comments'}, { begin: '\\{', beginCaptures: {0: {name: 'punctuation.section.phase.begin.cadence'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.section.phase.end.cadence'}}, patterns: [{include: '$self'}] } ] }, 'prepare-execute': { begin: '(?<!\\.)\\b(prepare)\\b\\s*(?=\\()', beginCaptures: {1: {name: 'storage.modifier.phase.cadence'}}, end: '(?<=\\})', name: 'meta.definition.transaction.phase.cadence', patterns: [ {include: '#comments'}, {include: '#parameter-clause'}, { begin: '\\{', beginCaptures: {0: {name: 'punctuation.section.phase.begin.cadence'}}, end: '\\}', endCaptures: {0: {name: 'punctuation.section.phase.end.cadence'}}, patterns: [{include: '$self'}] } ] }, transaction: { begin: '\\b(transaction)\\b', beginCaptures: {1: {name: 'storage.type.transaction.cadence'}}, end: '(?<=\\))|(?<=\\})', name: 'meta.definition.transaction.cadence', patterns: [ {include: '#comments'}, {include: '#parameter-clause'}, { begin: '\\{', beginCaptures: { 0: {name: 'punctuation.section.transaction.begin.cadence'} }, end: '\\}', endCaptures: { 0: {name: 'punctuation.section.transaction.end.cadence'} }, name: 'meta.definition.transaction.body.cadence', patterns: [{include: '$self'}] } ] }, type: { patterns: [ { begin: '(?<!\\.)\\b(?:(view)\\s+)?(fun)\\b\\s*(\\()', beginCaptures: { 1: {name: 'storage.modifier.view.cadence'}, 2: {name: 'storage.type.function.cadence'}, 3: {name: 'punctuation.definition.parameters.begin.cadence'} }, end: '(?=,|[)>}\\]]|$)', name: 'meta.type.function.cadence', patterns: [ {include: '#comments'}, { begin: '\\G', end: '(\\))', endCaptures: { 1: {name: 'punctuation.definition.parameters.end.cadence'} }, patterns: [ {include: '#type'}, {match: ',', name: 'punctuation.separator.parameter.cadence'} ] }, { begin: '(:)', beginCaptures: { 1: {name: 'keyword.operator.function-result.cadence'} }, end: '(?=,|[)>}\\]]|$)', name: 'meta.function-result.cadence', patterns: [{include: '#type'}] } ] }, {include: '#comments'}, { begin: '(?<!\\.)([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)\\s*(<)', beginCaptures: { 1: {name: 'entity.name.type.cadence'}, 2: {name: 'punctuation.definition.type-arguments.begin.cadence'} }, end: '(>)', endCaptures: { 1: {name: 'punctuation.definition.type-arguments.end.cadence'} }, name: 'meta.type.arguments.cadence', patterns: [ {include: '#type'}, {match: ',', name: 'punctuation.separator.type-argument.cadence'} ] }, { begin: '(?<!\\.)\\b(auth)\\b\\s*(\\()', beginCaptures: { 1: {name: 'keyword.other.auth.cadence'}, 2: {name: 'punctuation.section.group.begin.cadence'} }, end: '(\\))', endCaptures: {1: {name: 'punctuation.section.group.end.cadence'}}, name: 'meta.auth.entitlements.cadence', patterns: [ {include: '#comments'}, {match: '\\bmapping\\b', name: 'keyword.other.mapping.cadence'}, { captures: { 1: {name: 'entity.name.type.entitlement-mapping.cadence'} }, match: '(?<=\\bmapping)\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*)' }, {match: ',', name: 'punctuation.separator.entitlement.cadence'}, {match: '\\|', name: 'punctuation.separator.entitlement.cadence'}, { match: '[\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*', name: 'entity.name.type.entitlement.cadence' } ] }, { begin: '\\{(?![^}]*:)(?!.*\\}\\s*\\()', beginCaptures: { 0: {name: 'punctuation.definition.type.intersection.begin.cadence'} }, end: '(\\})', endCaptures: { 1: {name: 'punctuation.definition.type.intersection.end.cadence'} }, patterns: [ {include: '#comments'}, {include: '#type'}, { match: ',', name: 'punctuation.separator.type.intersection.cadence' } ] }, { begin: '\\{(?=\\s*[\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*\\s*:)(?!.*\\}\\s*\\()', beginCaptures: { 0: {name: 'punctuation.definition.type.dictionary.begin.cadence'} }, end: '(\\})', endCaptures: { 1: {name: 'punctuation.definition.type.dictionary.end.cadence'} }, name: 'meta.type.dictionary.cadence', patterns: [ {include: '#comments'}, {include: '#type'}, {match: ':', name: 'punctuation.separator.type.dictionary.cadence'}, {match: ',', name: 'punctuation.separator.type.dictionary.cadence'} ] }, { begin: '\\[', beginCaptures: { 0: {name: 'punctuation.definition.type.array.begin.cadence'} }, end: '(\\])', endCaptures: { 1: {name: 'punctuation.definition.type.array.end.cadence'} }, name: 'meta.type.array.cadence', patterns: [{include: '#comments'}, {include: '#type'}] }, { captures: { 1: {name: 'punctuation.definition.type.reference.cadence'} }, match: '(&|@)(?=\\s*\\{)' }, { captures: { 1: {name: 'punctuation.definition.type.reference.cadence'}, 2: {name: 'entity.name.type.cadence'} }, match: '(&|@)\\s*([\\p{L}_][\\p{L}_\\p{N}\\p{M}.]*)' }, { match: '([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)', name: 'entity.name.type.cadence' }, {match: '[?!]', name: 'keyword.operator.type.optional.cadence'} ] }, 'var-let-declaration': { begin: '\\b(var|let)\\b\\s+([\\p{L}_][\\p{L}_\\p{N}\\p{M}]*)', beginCaptures: { 1: {name: 'storage.type.$1.cadence'}, 2: {name: 'variable.other.declaration.cadence'} }, end: '=|<-|<-!|;|(?=//)|$', patterns: [ {include: '#comments'}, { begin: ':\\s*(?!\\s)', beginCaptures: { 0: {name: 'keyword.operator.type.annotation.cadence'} }, end: '(?=//|=|<-|<-!|;|$)', patterns: [{include: '#type'}, {include: '#comments'}] } ] } }, scopeName: 'source.cadence' } export default grammar