{
  "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"
}
