tm-grammars
Version:
Collecton of TextMate grammars in JSON
1,447 lines (1,446 loc) • 31.7 kB
JSON
{
"displayName": "Move",
"name": "move",
"patterns": [
{
"include": "#address"
},
{
"include": "#comments"
},
{
"include": "#extend_module"
},
{
"include": "#module"
},
{
"include": "#script"
},
{
"include": "#annotation"
},
{
"include": "#entry"
},
{
"include": "#public-scope"
},
{
"include": "#public"
},
{
"include": "#native"
},
{
"include": "#import"
},
{
"include": "#friend"
},
{
"include": "#const"
},
{
"include": "#struct"
},
{
"include": "#has_ability"
},
{
"include": "#enum"
},
{
"include": "#macro"
},
{
"include": "#fun"
},
{
"include": "#spec"
}
],
"repository": {
"=== DEPRECATED_BELOW ===": {
},
"abilities": {
"match": "\\b(store|key|drop|copy)\\b",
"name": "support.type.ability.move"
},
"address": {
"begin": "\\b(address)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.type.address.keyword.move"
}
},
"end": "(?<=})",
"name": "meta.address_block.move",
"patterns": [
{
"include": "#comments"
},
{
"begin": "(?<=address)",
"end": "(?=\\{)",
"name": "meta.address.definition.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#address_literal"
},
{
"match": "\\b(\\w+)\\b",
"name": "entity.name.type.move"
}
]
},
{
"include": "#module"
}
]
},
"annotation": {
"begin": "#\\[",
"end": "]",
"name": "support.constant.annotation.move",
"patterns": [
{
"include": "#comments"
},
{
"match": "\\b(\\w+)\\s*(?==)",
"name": "meta.annotation.name.move"
},
{
"begin": "=",
"end": "(?=[],])",
"name": "meta.annotation.value.move",
"patterns": [
{
"include": "#literals"
}
]
}
]
},
"as": {
"match": "\\b(as)\\b",
"name": "keyword.control.as.move"
},
"as-import": {
"match": "\\b(as)\\b",
"name": "meta.import.as.move"
},
"block": {
"begin": "\\{",
"end": "}",
"name": "meta.block.move",
"patterns": [
{
"include": "#expr"
}
]
},
"block-comments": {
"patterns": [
{
"begin": "/\\*[!*](?![*/])",
"end": "\\*/",
"name": "comment.block.documentation.move"
},
{
"begin": "/\\*",
"end": "\\*/",
"name": "comment.block.move"
}
]
},
"capitalized": {
"match": "\\b([A-Z][0-9A-Z_a-z]*)\\b",
"name": "entity.name.type.use.move"
},
"comments": {
"name": "meta.comments.move",
"patterns": [
{
"include": "#doc-comments"
},
{
"include": "#line-comments"
},
{
"include": "#block-comments"
}
]
},
"const": {
"begin": "\\b(const)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.const.move"
}
},
"end": ";",
"name": "meta.const.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#primitives"
},
{
"include": "#literals"
},
{
"include": "#types"
},
{
"match": "\\b([A-Z][0-9A-Z_]+)\\b",
"name": "constant.other.move"
},
{
"include": "#error_const"
}
]
},
"control": {
"match": "\\b(return|while|loop|if|else|break|continue|abort)\\b",
"name": "keyword.control.move"
},
"doc-comments": {
"begin": "///",
"end": "$",
"name": "comment.block.documentation.move",
"patterns": [
{
"captures": {
"1": {
"name": "markup.underline.link.move"
}
},
"match": "`(\\w+)`"
}
]
},
"entry": {
"match": "\\b(entry)\\b",
"name": "storage.modifier.visibility.entry.move"
},
"enum": {
"begin": "\\b(enum)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.enum.move"
}
},
"end": "(?<=})",
"name": "meta.enum.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
},
{
"include": "#type_param"
},
{
"match": "\\b[A-Z][0-9A-Z_a-z]*\\b",
"name": "entity.name.type.enum.move"
},
{
"include": "#has"
},
{
"include": "#abilities"
},
{
"begin": "\\{",
"end": "}",
"name": "meta.enum.definition.move",
"patterns": [
{
"include": "#comments"
},
{
"match": "\\b([A-Z][0-9A-Z_a-z]*)\\b(?=\\s*\\()",
"name": "entity.name.function.enum.move"
},
{
"match": "\\b([A-Z][0-9A-Z_a-z]*)\\b",
"name": "entity.name.type.enum.move"
},
{
"begin": "\\(",
"end": "\\)",
"name": "meta.enum.tuple.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#expr_generic"
},
{
"include": "#capitalized"
},
{
"include": "#types"
}
]
},
{
"begin": "\\{",
"end": "}",
"name": "meta.enum.struct.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
},
{
"include": "#expr_generic"
},
{
"include": "#capitalized"
},
{
"include": "#types"
}
]
}
]
}
]
},
"error_const": {
"match": "\\b(E[A-Z][0-9A-Z_a-z]*)\\b",
"name": "variable.other.error.const.move"
},
"escaped_identifier": {
"begin": "`",
"end": "`",
"name": "variable.language.escaped.move"
},
"expr": {
"name": "meta.expression.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
},
{
"include": "#expr_generic"
},
{
"include": "#packed_field"
},
{
"include": "#import"
},
{
"include": "#as"
},
{
"include": "#mut"
},
{
"include": "#let"
},
{
"include": "#types"
},
{
"include": "#literals"
},
{
"include": "#control"
},
{
"include": "#move_copy"
},
{
"include": "#resource_methods"
},
{
"include": "#self_access"
},
{
"include": "#module_access"
},
{
"include": "#label"
},
{
"include": "#macro_call"
},
{
"include": "#local_call"
},
{
"include": "#method_call"
},
{
"include": "#path_access"
},
{
"include": "#match_expression"
},
{
"match": "\\$(?=[a-z])",
"name": "keyword.operator.macro.dollar.move"
},
{
"match": "(?<=\\$)[a-z][0-9A-Z_a-z]*",
"name": "variable.other.meta.move"
},
{
"match": "\\b([A-Z][A-Z_]+)\\b",
"name": "constant.other.move"
},
{
"include": "#error_const"
},
{
"match": "\\b([A-Z][0-9A-Z_a-z]*)\\b",
"name": "entity.name.type.move"
},
{
"include": "#paren"
},
{
"include": "#block"
}
]
},
"expr_generic": {
"begin": "<(?=([,0-9<>A-Z_a-z\\s]+>))",
"end": ">",
"name": "meta.expression.generic.type.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#types"
},
{
"include": "#capitalized"
},
{
"include": "#expr_generic"
}
]
},
"extend_module": {
"begin": "\\b(extend)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.type.extend.move"
}
},
"end": "(?<=[;}])",
"name": "meta.extend_module.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#module"
}
]
},
"friend": {
"begin": "\\b(friend)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.type.move"
}
},
"end": ";",
"name": "meta.friend.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#address_literal"
},
{
"match": "\\b([A-Za-z][0-9A-Z_a-z]*)\\b",
"name": "entity.name.type.module.move"
}
]
},
"fun": {
"patterns": [
{
"include": "#fun_signature"
},
{
"include": "#block"
}
]
},
"fun_body": {
"begin": "\\{",
"end": "(?<=})",
"name": "meta.fun_body.move",
"patterns": [
{
"include": "#expr"
}
]
},
"fun_call": {
"begin": "\\b(\\w+)\\s*(?:<[,\\w\\s]+>)?\\s*\\(",
"beginCaptures": {
"1": {
"name": "entity.name.function.call.move"
}
},
"end": "\\)",
"name": "meta.fun_call.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#resource_methods"
},
{
"include": "#self_access"
},
{
"include": "#module_access"
},
{
"include": "#move_copy"
},
{
"include": "#literals"
},
{
"include": "#fun_call"
},
{
"include": "#block"
},
{
"include": "#mut"
},
{
"include": "#as"
}
]
},
"fun_signature": {
"begin": "\\b(fun)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.fun.move"
}
},
"end": "(?=[;{])",
"name": "meta.fun_signature.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#module_access"
},
{
"include": "#capitalized"
},
{
"include": "#types"
},
{
"include": "#mut"
},
{
"begin": "(?<=\\bfun)",
"end": "(?=[(<])",
"name": "meta.function_name.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
},
{
"match": "\\b(\\w+)\\b",
"name": "entity.name.function.move"
}
]
},
{
"include": "#fun_type_param"
},
{
"begin": "\\(",
"end": "\\)",
"name": "meta.parentheses.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#self_access"
},
{
"include": "#expr_generic"
},
{
"include": "#escaped_identifier"
},
{
"include": "#module_access"
},
{
"include": "#capitalized"
},
{
"include": "#types"
},
{
"include": "#mut"
}
]
},
{
"match": "\\b(acquires)\\b",
"name": "storage.modifier"
}
]
},
"fun_type_param": {
"begin": "<",
"end": ">",
"name": "meta.fun_generic_param.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#types"
},
{
"include": "#phantom"
},
{
"include": "#capitalized"
},
{
"include": "#module_access"
},
{
"include": "#abilities"
}
]
},
"has": {
"match": "\\b(has)\\b",
"name": "keyword.control.ability.has.move"
},
"has_ability": {
"begin": "(?<=[)}])\\s+(has)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.type.move"
}
},
"end": ";",
"name": "meta.has.ability.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#abilities"
}
]
},
"ident": {
"match": "\\b([A-Za-z][0-9A-Z_a-z]*)\\b",
"name": "meta.identifier.move"
},
"import": {
"begin": "\\b(use)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.type.move"
}
},
"end": ";",
"name": "meta.import.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#use_fun"
},
{
"include": "#address_literal"
},
{
"include": "#as-import"
},
{
"match": "\\b([A-Z]\\w*)\\b",
"name": "entity.name.type.move"
},
{
"begin": "\\{",
"end": "}",
"patterns": [
{
"include": "#comments"
},
{
"include": "#as-import"
},
{
"match": "\\b([A-Z]\\w*)\\b",
"name": "entity.name.type.move"
}
]
},
{
"match": "\\b(\\w+)\\b",
"name": "meta.entity.name.type.module.move"
}
]
},
"inline": {
"match": "\\b(inline)\\b",
"name": "storage.modifier.visibility.inline.move"
},
"label": {
"match": "'[a-z][0-9_a-z]*",
"name": "string.quoted.single.label.move"
},
"let": {
"match": "\\b(let)\\b",
"name": "keyword.control.move"
},
"line-comments": {
"begin": "//",
"end": "$",
"name": "comment.line.double-slash.move"
},
"literals": {
"name": "meta.literal.move",
"patterns": [
{
"match": "@0x\\h+",
"name": "support.constant.address.base16.move"
},
{
"match": "@[A-Za-z][0-9A-Z_a-z]*",
"name": "support.constant.address.name.move"
},
{
"match": "0x[_\\h]+(?:u(?:8|16|32|64|128|256))?",
"name": "constant.numeric.hex.move"
},
{
"match": "(?<!\\w|(?<!\\.)\\.)[0-9][0-9_]*(?:\\.(?!\\.)(?:[0-9][0-9_]*)?)?(?:[Ee][-+]?[0-9_]+)?(?:u(?:8|16|32|64|128|256))?",
"name": "constant.numeric.move"
},
{
"begin": "\"",
"end": "\"",
"name": "meta.string.literal.move",
"patterns": [
{
"match": "\\\\x\\h\\h",
"name": "constant.character.escape.hex.move"
},
{
"match": "\\\\.",
"name": "constant.character.escape.move"
},
{
"match": ".",
"name": "string.quoted.double.raw.move"
}
]
},
{
"begin": "\\bb\"",
"end": "\"",
"name": "meta.vector.literal.ascii.move",
"patterns": [
{
"match": "\\\\x\\h\\h",
"name": "constant.character.escape.hex.move"
},
{
"match": "\\\\.",
"name": "constant.character.escape.move"
},
{
"match": ".",
"name": "string.quoted.double.raw.move"
}
]
},
{
"begin": "x\"",
"end": "\"",
"name": "meta.vector.literal.hex.move",
"patterns": [
{
"match": "\\h+",
"name": "constant.character.move"
}
]
},
{
"match": "\\b(?:true|false)\\b",
"name": "constant.language.boolean.move"
},
{
"begin": "\\b(vector)\\b\\[",
"captures": {
"1": {
"name": "support.type.vector.move"
}
},
"end": "]",
"name": "meta.vector.literal.move",
"patterns": [
{
"include": "#expr"
}
]
}
]
},
"local_call": {
"match": "\\b([a-z][0-9_a-z]*)(?=[(<])",
"name": "entity.name.function.call.local.move"
},
"macro": {
"begin": "\\b(macro)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.macro.move"
}
},
"end": "(?<=})",
"name": "meta.macro.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#fun"
}
]
},
"macro_call": {
"captures": {
"2": {
"name": "support.function.macro.move"
},
"3": {
"name": "support.function.operator.macro.move"
}
},
"match": "(\\b|\\.)([a-z][0-9A-Z_a-z]*)(!)",
"name": "meta.macro.call"
},
"match_expression": {
"begin": "\\b(match)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.match.move"
}
},
"end": "(?<=})",
"name": "meta.match.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
},
{
"include": "#types"
},
{
"begin": "\\{",
"end": "}",
"name": "meta.match.block.move",
"patterns": [
{
"match": "\\b(=>)\\b",
"name": "operator.match.move"
},
{
"include": "#expr"
}
]
},
{
"include": "#expr"
}
]
},
"method_call": {
"captures": {
"1": {
"name": "entity.name.function.call.path.move"
}
},
"match": "\\.([a-z][0-9_a-z]*)(?=[(<])",
"name": "meta.path.call.move"
},
"module": {
"begin": "\\b(module)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.type.move"
}
},
"end": "(?<=[;}])",
"name": "meta.module.move",
"patterns": [
{
"include": "#comments"
},
{
"begin": "(?<=\\b(module)\\b)",
"end": "(?=[;{])",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
},
{
"begin": "(?<=\\b(module))",
"end": "(?=[():{])",
"name": "constant.other.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
}
]
},
{
"begin": "(?<=::)",
"end": "(?=[;{\\s])",
"name": "entity.name.type.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
}
]
}
]
},
{
"begin": "\\{",
"end": "}",
"name": "meta.module_scope.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#annotation"
},
{
"include": "#entry"
},
{
"include": "#public-scope"
},
{
"include": "#public"
},
{
"include": "#native"
},
{
"include": "#import"
},
{
"include": "#friend"
},
{
"include": "#const"
},
{
"include": "#struct"
},
{
"include": "#has_ability"
},
{
"include": "#enum"
},
{
"include": "#macro"
},
{
"include": "#fun"
},
{
"include": "#spec"
}
]
}
]
},
"module_access": {
"captures": {
"1": {
"name": "meta.entity.name.type.accessed.module.move"
},
"2": {
"name": "entity.name.function.call.move"
}
},
"match": "\\b(\\w+)::(\\w+)\\b",
"name": "meta.module_access.move"
},
"move_copy": {
"match": "\\b(move|copy)\\b",
"name": "variable.language.move"
},
"mut": {
"match": "\\b(mut)\\b",
"name": "storage.modifier.mut.move"
},
"native": {
"match": "\\b(native)\\b",
"name": "storage.modifier.visibility.native.move"
},
"packed_field": {
"match": "[a-z][0-9_a-z]+\\s*:\\s*(?=\\s)",
"name": "meta.struct.field.move"
},
"paren": {
"begin": "\\(",
"end": "\\)",
"name": "meta.paren.move",
"patterns": [
{
"include": "#expr"
}
]
},
"path_access": {
"match": "\\.[a-z][0-9_a-z]*\\b",
"name": "meta.path.access.move"
},
"phantom": {
"match": "\\b(phantom)\\b",
"name": "keyword.control.phantom.move"
},
"primitives": {
"match": "\\b(u8|u16|u32|u64|u128|u256|address|bool|signer)\\b",
"name": "support.type.primitives.move"
},
"public": {
"match": "\\b(public)\\b",
"name": "storage.modifier.visibility.public.move"
},
"public-scope": {
"begin": "(?<=\\b(public))\\s*\\(",
"end": "\\)",
"name": "meta.public.scoped.move",
"patterns": [
{
"include": "#comments"
},
{
"match": "\\b(friend|script|package)\\b",
"name": "keyword.control.public.scope.move"
}
]
},
"resource_methods": {
"match": "\\b(borrow_global|borrow_global_mut|exists|move_from|move_to_sender|move_to)\\b",
"name": "support.function.typed.move"
},
"script": {
"begin": "\\b(script)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.script.move"
}
},
"end": "(?<=})",
"name": "meta.script.move",
"patterns": [
{
"include": "#comments"
},
{
"begin": "\\{",
"end": "}",
"name": "meta.script_scope.move",
"patterns": [
{
"include": "#const"
},
{
"include": "#comments"
},
{
"include": "#import"
},
{
"include": "#fun"
}
]
}
]
},
"self_access": {
"captures": {
"1": {
"name": "variable.language.self.move"
},
"2": {
"name": "entity.name.function.call.move"
}
},
"match": "\\b(Self)::(\\w+)\\b",
"name": "meta.self_access.move"
},
"spec": {
"begin": "\\b(spec)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.spec.move"
}
},
"end": "(?<=[;}])",
"name": "meta.spec.move",
"patterns": [
{
"match": "\\b(module|schema|struct|fun)",
"name": "storage.modifier.spec.target.move"
},
{
"match": "\\b(define)",
"name": "storage.modifier.spec.define.move"
},
{
"match": "\\b(\\w+)\\b",
"name": "entity.name.function.move"
},
{
"begin": "\\{",
"end": "}",
"patterns": [
{
"include": "#comments"
},
{
"include": "#spec_block"
},
{
"include": "#spec_types"
},
{
"include": "#spec_define"
},
{
"include": "#spec_keywords"
},
{
"include": "#control"
},
{
"include": "#fun_call"
},
{
"include": "#literals"
},
{
"include": "#types"
},
{
"include": "#let"
}
]
}
]
},
"spec_block": {
"begin": "\\{",
"end": "}",
"name": "meta.spec_block.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#spec_block"
},
{
"include": "#spec_types"
},
{
"include": "#fun_call"
},
{
"include": "#literals"
},
{
"include": "#control"
},
{
"include": "#types"
},
{
"include": "#let"
}
]
},
"spec_define": {
"begin": "\\b(define)\\b",
"beginCaptures": {
"1": {
"name": "keyword.control.move.spec"
}
},
"end": "(?=[;{])",
"name": "meta.spec_define.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#spec_types"
},
{
"include": "#types"
},
{
"begin": "(?<=\\bdefine)",
"end": "(?=\\()",
"patterns": [
{
"include": "#comments"
},
{
"match": "\\b(\\w+)\\b",
"name": "entity.name.function.move"
}
]
}
]
},
"spec_keywords": {
"match": "\\b(global|pack|unpack|pragma|native|include|ensures|requires|invariant|apply|aborts_if|modifies)\\b",
"name": "keyword.control.move.spec"
},
"spec_types": {
"match": "\\b(range|num|vector|bool|u8|u16|u32|u64|u128|u256|address)\\b",
"name": "support.type.vector.move"
},
"struct": {
"begin": "\\b(struct)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.type.move"
}
},
"end": "(?<=[);}])",
"name": "meta.struct.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#escaped_identifier"
},
{
"include": "#has"
},
{
"include": "#abilities"
},
{
"match": "\\b[A-Z][0-9A-Z_a-z]*\\b",
"name": "entity.name.type.struct.move"
},
{
"begin": "\\(",
"end": "\\)",
"name": "meta.struct.paren.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#capitalized"
},
{
"include": "#types"
}
]
},
{
"include": "#type_param"
},
{
"begin": "\\(",
"end": "(?<=\\))",
"name": "meta.struct.paren.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#types"
}
]
},
{
"begin": "\\{",
"end": "}",
"name": "meta.struct.body.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#self_access"
},
{
"include": "#escaped_identifier"
},
{
"include": "#module_access"
},
{
"include": "#expr_generic"
},
{
"include": "#capitalized"
},
{
"include": "#types"
}
]
},
{
"include": "#has_ability"
}
]
},
"struct_pack": {
"begin": "(?<=[0-9>A-Z_a-z])\\s*\\{",
"end": "}",
"name": "meta.struct.pack.move",
"patterns": [
{
"include": "#comments"
}
]
},
"type_param": {
"begin": "<",
"end": ">",
"name": "meta.generic_param.move",
"patterns": [
{
"include": "#comments"
},
{
"include": "#phantom"
},
{
"include": "#capitalized"
},
{
"include": "#module_access"
},
{
"include": "#abilities"
}
]
},
"types": {
"name": "meta.types.move",
"patterns": [
{
"include": "#primitives"
},
{
"include": "#vector"
}
]
},
"use_fun": {
"begin": "\\b(fun)\\b",
"beginCaptures": {
"1": {
"name": "storage.modifier.fun.move"
}
},
"end": "(?=;)",
"name": "meta.import.fun.move",
"patterns": [
{
"include": "#comments"
},
{
"match": "\\b(as)\\b",
"name": "keyword.control.as.move"
},
{
"match": "\\b(Self)\\b",
"name": "variable.language.self.use.fun.move"
},
{
"match": "\\b(_______[a-z][0-9_a-z]+)\\b",
"name": "entity.name.function.use.move"
},
{
"include": "#types"
},
{
"include": "#escaped_identifier"
},
{
"include": "#capitalized"
}
]
},
"vector": {
"match": "\\b(vector)\\b",
"name": "support.type.vector.move"
}
},
"scopeName": "source.move"
}