diff --git a/bolt/codegen.py b/bolt/codegen.py index bc1e84e..fd9538b 100644 --- a/bolt/codegen.py +++ b/bolt/codegen.py @@ -56,6 +56,7 @@ AstList, AstLookup, AstSlice, + AstTarget, AstTargetAttribute, AstTargetIdentifier, AstTargetItem, @@ -570,6 +571,42 @@ def continue_statement( acc.statement("continue") return [] + @rule(AstCommand, identifier="with:subcommand") + def with_statement( + self, + node: AstCommand, + acc: Accumulator, + ) -> Generator[AstNode, Optional[List[str]], Optional[List[str]]]: + clauses: List[str] = [] + bindings: List[Tuple[str, AstTarget]] = [] + + subcommand = cast(AstCommand, node.arguments[0]) + body: Optional[AstNode] = None + + while not body: + value = yield from visit_single(subcommand.arguments[0], required=True) + + if isinstance(target := subcommand.arguments[1], AstTarget): + tmp = f"_bolt_with{len(bindings)}" + clauses.append(f"{value} as {tmp}") + bindings.append((tmp, target)) + else: + clauses.append(value) + + last_arg = subcommand.arguments[-1] + if isinstance(last_arg, AstRoot): + body = last_arg + elif isinstance(last_arg, AstCommand): + subcommand = last_arg + + acc.statement(f"with {', '.join(clauses)}:", lineno=node) + with acc.block(): + for tmp, target in bindings: + yield from visit_binding(target, "=", tmp, acc) + yield from visit_body(body, acc) + + return [] + @rule(AstCommand, identifier="import:module") @rule(AstCommand, identifier="import:module:as:alias") @rule(AstCommand, identifier="from:module:import:subcommand") diff --git a/bolt/parse.py b/bolt/parse.py index 900bfca..791be60 100644 --- a/bolt/parse.py +++ b/bolt/parse.py @@ -7,7 +7,6 @@ "get_stream_branch_scope", "UndefinedIdentifier", "create_bolt_root_parser", - "ExecuteIfConditionConstraint", "BranchScopeManager", "check_final_expression", "InterpolationParser", @@ -21,6 +20,7 @@ "parse_function_root", "parse_del_target", "parse_identifier", + "TrailingCommaParser", "ImportLocationConstraint", "ImportStatementHandler", "parse_python_import", @@ -48,7 +48,6 @@ from difflib import get_close_matches from typing import Any, Dict, List, Optional, Set, Tuple, cast -from beet.core.utils import required_field from mecha import ( AlternativeParser, AstChildren, @@ -128,9 +127,7 @@ def get_bolt_parsers( "root": create_bolt_root_parser(parsers["root"]), "nested_root": create_bolt_root_parser(parsers["nested_root"]), "command": UndefinedIdentifierErrorHandler( - ImportStatementHandler( - GlobalNonlocalHandler(ExecuteIfConditionConstraint(parsers["command"])) - ) + ImportStatementHandler(GlobalNonlocalHandler(parsers["command"])) ), "command:argument:bolt:if_block": delegate("bolt:if_block"), "command:argument:bolt:elif_condition": delegate("bolt:elif_condition"), @@ -138,6 +135,8 @@ def get_bolt_parsers( "command:argument:bolt:else_block": delegate("bolt:else_block"), "command:argument:bolt:statement": delegate("bolt:statement"), "command:argument:bolt:assignment_target": delegate("bolt:assignment_target"), + "command:argument:bolt:with_expression": delegate("bolt:with_expression"), + "command:argument:bolt:with_target": delegate("bolt:with_target"), "command:argument:bolt:import": delegate("bolt:import"), "command:argument:bolt:import_name": delegate("bolt:import_name"), "command:argument:bolt:global_name": delegate("bolt:global_name"), @@ -178,13 +177,17 @@ def get_bolt_parsers( "bolt:del_target": parse_del_target, "bolt:interpolation": PrimaryParser(delegate("bolt:identifier")), "bolt:identifier": parse_identifier, + "bolt:with_expression": TrailingCommaParser(delegate("bolt:expression")), + "bolt:with_target": TrailingCommaParser( + AssignmentTargetParser(allow_undefined_identifiers=True) + ), "bolt:import": AlternativeParser( [ ImportLocationConstraint(parsers["resource_location_or_tag"]), parse_python_import, ] ), - "bolt:import_name": parse_import_name, + "bolt:import_name": TrailingCommaParser(parse_import_name), "bolt:global_name": parse_name_list, "bolt:nonlocal_name": parse_name_list, "bolt:expression": delegate("bolt:disjunction"), @@ -432,21 +435,6 @@ def create_bolt_root_parser(parser: Parser): ) -@dataclass -class ExecuteIfConditionConstraint: - """Constraint that prevents inlining if conditions as execute subcommands.""" - - parser: Parser - - def __call__(self, stream: TokenStream) -> Any: - if isinstance(node := self.parser(stream), AstCommand): - if node.identifier == "execute:if:condition:body": - exc = InvalidSyntax("Can't inline conditions as execute subcommands.") - raise set_location(exc, node) - - return node - - @dataclass class BranchScopeManager: """Parser that manages accessible identifiers for conditional branches.""" @@ -626,7 +614,7 @@ def parse_decorator(stream: TokenStream) -> Any: class DecoratorResolver: """Parser for resolving decorators.""" - parser: Parser = required_field() + parser: Parser def __call__(self, stream: TokenStream) -> AstRoot: node: AstRoot = self.parser(stream) @@ -931,6 +919,19 @@ def parse_identifier(stream: TokenStream) -> AstIdentifier: return set_location(AstIdentifier(value=token.value), token) +@dataclass +class TrailingCommaParser: + """Parser for discarding trailing comma.""" + + parser: Parser + + def __call__(self, stream: TokenStream) -> Any: + node = self.parser(stream) + with stream.syntax(comma=r","): + stream.get("comma") + return node + + @dataclass class ImportLocationConstraint: """Constraint for import location.""" @@ -996,9 +997,8 @@ def parse_python_import(stream: TokenStream) -> Any: def parse_import_name(stream: TokenStream) -> AstImportedIdentifier: """Parse import name.""" - with stream.syntax(name=IDENTIFIER_PATTERN, comma=r","): + with stream.syntax(name=IDENTIFIER_PATTERN): token = stream.expect("name") - stream.get("comma") return set_location(AstImportedIdentifier(value=token.value), token) @@ -1041,7 +1041,7 @@ def parse_name_list(stream: TokenStream) -> AstIdentifier: class FunctionRootBacktracker: """Parser for backtracking over function root nodes.""" - parser: Parser = required_field() + parser: Parser def __call__(self, stream: TokenStream) -> AstRoot: should_replace = False diff --git a/bolt/resources/commands.json b/bolt/resources/commands.json index 89f607c..c52e257 100644 --- a/bolt/resources/commands.json +++ b/bolt/resources/commands.json @@ -158,6 +158,40 @@ "type": "literal", "executable": true }, + "with": { + "type": "literal", + "children": { + "expression": { + "type": "argument", + "parser": "bolt:with_expression", + "redirect": ["with"], + "children": { + "as": { + "type": "literal", + "children": { + "target": { + "type": "argument", + "parser": "bolt:with_target", + "redirect": ["with"], + "children": { + "body": { + "type": "argument", + "parser": "mecha:nested_root", + "executable": true + } + } + } + } + }, + "body": { + "type": "argument", + "parser": "mecha:nested_root", + "executable": true + } + } + } + } + }, "import": { "type": "literal", "children": { diff --git a/examples/bolt_basic/src/data/demo/functions/foo.mcfunction b/examples/bolt_basic/src/data/demo/functions/foo.mcfunction index 4d20578..a59c614 100644 --- a/examples/bolt_basic/src/data/demo/functions/foo.mcfunction +++ b/examples/bolt_basic/src/data/demo/functions/foo.mcfunction @@ -381,15 +381,15 @@ x = 12 y = 23 z = 34 -tp @s f"~{x} ~{y} ~{z}" -tp @s f"~{x}" y f"~{z}" +setblock f"~{x} ~{y} ~{z}" stone +setblock f"~{x}" y f"~{z}" stone -tp @s x y z -tp @s ~x ~y ~z -tp @s ^x ^y ^z -tp @s -x -y -z -tp @s ~-x ~-y ~-z -tp @s ^-x ^-y ^-z +setblock x y z stone +setblock ~x ~y ~z stone +setblock ^x ^y ^z stone +setblock -x -y -z stone +setblock ~-x ~-y ~-z stone +setblock ^-x ^-y ^-z stone for i, x in enumerate("abc"): say f"{i} {x}" @@ -638,3 +638,16 @@ def testing_decorator(f): ]) or None def f(x): say f"inner {x}" + +from contextlib import suppress + +with suppress(ZeroDivisionError): + 1 / 0 + +from bolt import Runtime +runtime = ctx.inject(Runtime) + +with runtime.scope() as commands: + tellraw @p "hello" + +say commands[0] diff --git a/poetry.lock b/poetry.lock index 6fac960..fd89c2e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -22,7 +22,7 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "beet" -version = "0.67.0" +version = "0.68.1" description = "The Minecraft pack development kit" category = "main" optional = false @@ -314,16 +314,16 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [[package]] name = "lectern" -version = "0.21.2" +version = "0.22.0" description = "Literate Minecraft data packs and resource packs." category = "dev" optional = false python-versions = ">=3.8,<4.0" [package.dependencies] -beet = ">=0.60.0" -click = ">=8.1.2,<9.0.0" -markdown-it-py = ">=1.1" +beet = ">=0.68.1" +click = ">=8.1.3,<9.0.0" +markdown-it-py = ">=2.1.0,<3.0.0" [[package]] name = "markdown-it-py" @@ -364,15 +364,15 @@ python-versions = ">=3.7" [[package]] name = "mecha" -version = "0.52.2" +version = "0.54.1" description = "A powerful Minecraft command library" category = "main" optional = false python-versions = ">=3.8,<4.0" [package.dependencies] -beet = ">=0.67.0" -tokenstream = "1.4.1" +beet = ">=0.68.1" +tokenstream = "1.4.2" [[package]] name = "mypy-extensions" @@ -706,7 +706,7 @@ python-versions = ">=3.6" [[package]] name = "tokenstream" -version = "1.4.1" +version = "1.4.2" description = "A versatile token stream for handwritten parsers" category = "main" optional = false @@ -825,7 +825,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "0727ac01b0e41167696ac756a365d64f3146f93c7472abe1cebd87a072d0aa7b" +content-hash = "dac87c089627cdbfb400346ad7a112f10c6441d4f286f59ed318a523ae39b590" [metadata.files] atomicwrites = [ @@ -837,8 +837,8 @@ attrs = [ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] beet = [ - {file = "beet-0.67.0-py3-none-any.whl", hash = "sha256:4e44e7278be50ebd8dec697e411ccdc377a24308e21cdb197f071dfbe1e1cde7"}, - {file = "beet-0.67.0.tar.gz", hash = "sha256:f6796b7a8e8241aabbbf5b7e15403e87645055b4ec952bb9cfc0a5c0ba52d48d"}, + {file = "beet-0.68.1-py3-none-any.whl", hash = "sha256:49f865161831eab37202f5b74f99e97bafc0c8fc9375032a2bed93fff95e1aab"}, + {file = "beet-0.68.1.tar.gz", hash = "sha256:92fccb6448a64f02fb7c92d2cafa253afc9482b4b0f9bdf1de6344ae4205f05b"}, ] black = [ {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, @@ -1017,8 +1017,8 @@ keyring = [ {file = "keyring-23.5.0.tar.gz", hash = "sha256:9012508e141a80bd1c0b6778d5c610dd9f8c464d75ac6774248500503f972fb9"}, ] lectern = [ - {file = "lectern-0.21.2-py3-none-any.whl", hash = "sha256:ff395bd6ab5fc4851e7f17909f1a7f96f71a8e192529f26ff936ab202361e68d"}, - {file = "lectern-0.21.2.tar.gz", hash = "sha256:515a0bf602bdf90eca64416b05e79292f9137cb32e5a6ab9a1a9f82fa3ab99f0"}, + {file = "lectern-0.22.0-py3-none-any.whl", hash = "sha256:a6e50a770d8d31bfb4499bd6361973752286f0cd4f5d72df08953a464ea1e31b"}, + {file = "lectern-0.22.0.tar.gz", hash = "sha256:4c906ba45caf87021e2b1a0249b235e7bb1584c014c4d4f0f425678d21add874"}, ] markdown-it-py = [ {file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"}, @@ -1071,8 +1071,8 @@ mdurl = [ {file = "mdurl-0.1.1.tar.gz", hash = "sha256:f79c9709944df218a4cdb0fcc0b0c7ead2f44594e3e84dc566606f04ad749c20"}, ] mecha = [ - {file = "mecha-0.52.2-py3-none-any.whl", hash = "sha256:69a49ec9273699d340eb4d8e63395f885437753b3503bec0eba5312f7303c52b"}, - {file = "mecha-0.52.2.tar.gz", hash = "sha256:c16cb38435710d249ec9dd1b277e875c446d39b6b48a2e7cf4390e821449392e"}, + {file = "mecha-0.54.1-py3-none-any.whl", hash = "sha256:e3ab536a1d98fd550f9552113c1fc062706309fe8a46e070f09c633dc092dca8"}, + {file = "mecha-0.54.1.tar.gz", hash = "sha256:85100af58169db44d7ca653675f545307cd27dbf4940166cedc78163f6ada38d"}, ] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, @@ -1269,8 +1269,8 @@ smmap = [ {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, ] tokenstream = [ - {file = "tokenstream-1.4.1-py3-none-any.whl", hash = "sha256:66b42b059e1bda1b88dc54b63f4de935e1e8e2f1f746e06d5323e694d10d38fa"}, - {file = "tokenstream-1.4.1.tar.gz", hash = "sha256:a3e65dea39ca75a3cbe68880f325cd65a0b957f952137bc8bd2eeca8b4a44df7"}, + {file = "tokenstream-1.4.2-py3-none-any.whl", hash = "sha256:e4979949e3ca8ab68fe9e924005e668da5b262892c370daf043d767e8e509e4b"}, + {file = "tokenstream-1.4.2.tar.gz", hash = "sha256:f106b0bd0ae629847485e8ddfc9ac3c479c6c2d8c9db164f9b666e9fda6608cf"}, ] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, diff --git a/pyproject.toml b/pyproject.toml index c84d123..70f6635 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,8 +23,8 @@ include = ["bolt/py.typed"] [tool.poetry.dependencies] python = "^3.8" -beet = ">=0.67.0" -mecha = ">=0.52.2" +beet = ">=0.68.1" +mecha = ">=0.54.1" [tool.poetry.dev-dependencies] pytest = "^7.1.2" @@ -32,7 +32,7 @@ black = "^22.3.0" isort = "^5.10.1" python-semantic-release = "^7.28.1" pytest-insta = "^0.1.11" -lectern = ">=0.21.2" +lectern = ">=0.22.0" [tool.pytest.ini_options] addopts = "tests bolt --doctest-modules" diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..e9fedc8 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,14 @@ +import pytest +from beet import run_beet + + +@pytest.fixture(scope="session") +def ctx(): + with run_beet({"require": ["bolt"]}) as ctx: + yield ctx + + +@pytest.fixture(scope="session") +def ctx_sandbox(): + with run_beet({"require": ["bolt.contrib.sandbox"]}) as ctx: + yield ctx diff --git a/tests/resources/bolt_examples.mcfunction b/tests/resources/bolt_examples.mcfunction index 2ed4d0d..6549955 100644 --- a/tests/resources/bolt_examples.mcfunction +++ b/tests/resources/bolt_examples.mcfunction @@ -783,4 +783,20 @@ def testing_decorator(): @testing_decorator @testing_decorator(1) def f(): - pass \ No newline at end of file + pass +### +with open("README.md") as f: + tellraw @p f.readline() +### +with: + pass +### +with None: +### +with None as: +### +with None, None, None: + pass +### +with None as x, None, None as y: + pass diff --git a/tests/snapshots/bolt__parse_210__0.txt b/tests/snapshots/bolt__parse_210__0.txt index 2b33430..f9768f6 100644 --- a/tests/snapshots/bolt__parse_210__0.txt +++ b/tests/snapshots/bolt__parse_210__0.txt @@ -4,7 +4,8 @@ def testing_decorator(): @testing_decorator @testing_decorator(1) def f(): - pass--- + pass +--- location: SourceLocation(pos=0, lineno=1, colno=1) end_location: SourceLocation(pos=93, lineno=7, colno=9) diff --git a/tests/snapshots/bolt__parse_211__0.txt b/tests/snapshots/bolt__parse_211__0.txt new file mode 100644 index 0000000..b156850 --- /dev/null +++ b/tests/snapshots/bolt__parse_211__0.txt @@ -0,0 +1,72 @@ +with open("README.md") as f: + tellraw @p f.readline() +--- + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + commands: + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + identifier: 'with:subcommand' + arguments: + + location: SourceLocation(pos=5, lineno=1, colno=6) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + identifier: 'with:expression:as:target:body' + arguments: + + location: SourceLocation(pos=5, lineno=1, colno=6) + end_location: SourceLocation(pos=22, lineno=1, colno=23) + value: + + location: SourceLocation(pos=5, lineno=1, colno=6) + end_location: SourceLocation(pos=9, lineno=1, colno=10) + value: 'open' + arguments: + + location: SourceLocation(pos=10, lineno=1, colno=11) + end_location: SourceLocation(pos=21, lineno=1, colno=22) + value: 'README.md' + + location: SourceLocation(pos=26, lineno=1, colno=27) + end_location: SourceLocation(pos=27, lineno=1, colno=28) + value: 'f' + rebind: False + + location: SourceLocation(pos=33, lineno=2, colno=5) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + commands: + + location: SourceLocation(pos=33, lineno=2, colno=5) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + identifier: 'tellraw:targets:message' + arguments: + + location: SourceLocation(pos=41, lineno=2, colno=13) + end_location: SourceLocation(pos=43, lineno=2, colno=15) + variable: 'p' + arguments: + + + location: SourceLocation(pos=44, lineno=2, colno=16) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + prefix: None + unpack: None + converter: 'json' + value: + + location: SourceLocation(pos=44, lineno=2, colno=16) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + value: + + location: SourceLocation(pos=44, lineno=2, colno=16) + end_location: SourceLocation(pos=54, lineno=2, colno=26) + name: 'readline' + value: + + location: SourceLocation(pos=44, lineno=2, colno=16) + end_location: SourceLocation(pos=45, lineno=2, colno=17) + value: 'f' + arguments: + diff --git a/tests/snapshots/bolt__parse_211__1.txt b/tests/snapshots/bolt__parse_211__1.txt new file mode 100644 index 0000000..8f83f88 --- /dev/null +++ b/tests/snapshots/bolt__parse_211__1.txt @@ -0,0 +1,50 @@ +_bolt_lineno = [1, 12], [1, 2] +_bolt_helper_get_attribute = _bolt_runtime.helpers['get_attribute'] +_bolt_helper_interpolate_json = _bolt_runtime.helpers['interpolate_json'] +_bolt_helper_children = _bolt_runtime.helpers['children'] +_bolt_helper_replace = _bolt_runtime.helpers['replace'] +with _bolt_runtime.scope() as _bolt_var3: + _bolt_var0 = open + _bolt_var1 = 'README.md' + _bolt_var0 = _bolt_var0(_bolt_var1) + with _bolt_var0 as _bolt_with0: + f = _bolt_with0 + _bolt_var2 = f + _bolt_var2 = _bolt_helper_get_attribute(_bolt_var2, 'readline') + _bolt_var2 = _bolt_var2() + _bolt_var2 = _bolt_helper_interpolate_json(_bolt_var2, _bolt_refs[0]) + _bolt_runtime.commands.append(_bolt_helper_replace(_bolt_refs[2], arguments=_bolt_helper_children([_bolt_refs[1], _bolt_var2]))) +_bolt_var4 = _bolt_helper_replace(_bolt_refs[3], commands=_bolt_helper_children(_bolt_var3)) +--- +output = _bolt_var4 +--- +_bolt_refs[0] + + location: SourceLocation(pos=44, lineno=2, colno=16) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + prefix: None + unpack: None + converter: 'json' + value: + +_bolt_refs[1] + + location: SourceLocation(pos=41, lineno=2, colno=13) + end_location: SourceLocation(pos=43, lineno=2, colno=15) + variable: 'p' + arguments: + +_bolt_refs[2] + + location: SourceLocation(pos=33, lineno=2, colno=5) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + identifier: 'tellraw:targets:message' + arguments: + + +_bolt_refs[3] + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=56, lineno=2, colno=28) + commands: + diff --git a/tests/snapshots/bolt__parse_212__0.txt b/tests/snapshots/bolt__parse_212__0.txt new file mode 100644 index 0000000..e193b44 --- /dev/null +++ b/tests/snapshots/bolt__parse_212__0.txt @@ -0,0 +1,7 @@ +#>ERROR Expected bracket '[', curly '{', false, identifier, null, number or 3 other tokens but got invalid ':'. +# line 1, column 5 +# 1 | with: +# : ^ +# 2 | pass +with: + pass diff --git a/tests/snapshots/bolt__parse_213__0.txt b/tests/snapshots/bolt__parse_213__0.txt new file mode 100644 index 0000000..df5e8b2 --- /dev/null +++ b/tests/snapshots/bolt__parse_213__0.txt @@ -0,0 +1,5 @@ +#>ERROR Expected non-empty block. +# line 1, column 10 +# 1 | with None: +# : ^ +with None: diff --git a/tests/snapshots/bolt__parse_214__0.txt b/tests/snapshots/bolt__parse_214__0.txt new file mode 100644 index 0000000..7336195 --- /dev/null +++ b/tests/snapshots/bolt__parse_214__0.txt @@ -0,0 +1,5 @@ +#>ERROR Expected identifier but got invalid ':'. +# line 1, column 13 +# 1 | with None as: +# : ^ +with None as: diff --git a/tests/snapshots/bolt__parse_215__0.txt b/tests/snapshots/bolt__parse_215__0.txt new file mode 100644 index 0000000..87158f3 --- /dev/null +++ b/tests/snapshots/bolt__parse_215__0.txt @@ -0,0 +1,49 @@ +with None, None, None: + pass +--- + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=32, lineno=3, colno=1) + commands: + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=31, lineno=2, colno=9) + identifier: 'with:subcommand' + arguments: + + location: SourceLocation(pos=5, lineno=1, colno=6) + end_location: SourceLocation(pos=31, lineno=2, colno=9) + identifier: 'with:expression:subcommand' + arguments: + + location: SourceLocation(pos=5, lineno=1, colno=6) + end_location: SourceLocation(pos=9, lineno=1, colno=10) + value: None + + location: SourceLocation(pos=11, lineno=1, colno=12) + end_location: SourceLocation(pos=31, lineno=2, colno=9) + identifier: 'with:expression:subcommand' + arguments: + + location: SourceLocation(pos=11, lineno=1, colno=12) + end_location: SourceLocation(pos=15, lineno=1, colno=16) + value: None + + location: SourceLocation(pos=17, lineno=1, colno=18) + end_location: SourceLocation(pos=31, lineno=2, colno=9) + identifier: 'with:expression:body' + arguments: + + location: SourceLocation(pos=17, lineno=1, colno=18) + end_location: SourceLocation(pos=21, lineno=1, colno=22) + value: None + + location: SourceLocation(pos=27, lineno=2, colno=5) + end_location: SourceLocation(pos=31, lineno=2, colno=9) + commands: + + location: SourceLocation(pos=27, lineno=2, colno=5) + end_location: SourceLocation(pos=31, lineno=2, colno=9) + identifier: 'pass' + arguments: + diff --git a/tests/snapshots/bolt__parse_215__1.txt b/tests/snapshots/bolt__parse_215__1.txt new file mode 100644 index 0000000..1d4786a --- /dev/null +++ b/tests/snapshots/bolt__parse_215__1.txt @@ -0,0 +1,19 @@ +_bolt_lineno = [1], [1] +_bolt_helper_children = _bolt_runtime.helpers['children'] +_bolt_helper_replace = _bolt_runtime.helpers['replace'] +with _bolt_runtime.scope() as _bolt_var3: + _bolt_var0 = None + _bolt_var1 = None + _bolt_var2 = None + with _bolt_var0, _bolt_var1, _bolt_var2: + pass +_bolt_var4 = _bolt_helper_replace(_bolt_refs[0], commands=_bolt_helper_children(_bolt_var3)) +--- +output = _bolt_var4 +--- +_bolt_refs[0] + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=32, lineno=3, colno=1) + commands: + diff --git a/tests/snapshots/bolt__parse_216__0.txt b/tests/snapshots/bolt__parse_216__0.txt new file mode 100644 index 0000000..46ffeed --- /dev/null +++ b/tests/snapshots/bolt__parse_216__0.txt @@ -0,0 +1,59 @@ +with None as x, None, None as y: + pass +--- + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=42, lineno=3, colno=1) + commands: + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=41, lineno=2, colno=9) + identifier: 'with:subcommand' + arguments: + + location: SourceLocation(pos=5, lineno=1, colno=6) + end_location: SourceLocation(pos=41, lineno=2, colno=9) + identifier: 'with:expression:as:target:subcommand' + arguments: + + location: SourceLocation(pos=5, lineno=1, colno=6) + end_location: SourceLocation(pos=9, lineno=1, colno=10) + value: None + + location: SourceLocation(pos=13, lineno=1, colno=14) + end_location: SourceLocation(pos=14, lineno=1, colno=15) + value: 'x' + rebind: False + + location: SourceLocation(pos=16, lineno=1, colno=17) + end_location: SourceLocation(pos=41, lineno=2, colno=9) + identifier: 'with:expression:subcommand' + arguments: + + location: SourceLocation(pos=16, lineno=1, colno=17) + end_location: SourceLocation(pos=20, lineno=1, colno=21) + value: None + + location: SourceLocation(pos=22, lineno=1, colno=23) + end_location: SourceLocation(pos=41, lineno=2, colno=9) + identifier: 'with:expression:as:target:body' + arguments: + + location: SourceLocation(pos=22, lineno=1, colno=23) + end_location: SourceLocation(pos=26, lineno=1, colno=27) + value: None + + location: SourceLocation(pos=30, lineno=1, colno=31) + end_location: SourceLocation(pos=31, lineno=1, colno=32) + value: 'y' + rebind: False + + location: SourceLocation(pos=37, lineno=2, colno=5) + end_location: SourceLocation(pos=41, lineno=2, colno=9) + commands: + + location: SourceLocation(pos=37, lineno=2, colno=5) + end_location: SourceLocation(pos=41, lineno=2, colno=9) + identifier: 'pass' + arguments: + diff --git a/tests/snapshots/bolt__parse_216__1.txt b/tests/snapshots/bolt__parse_216__1.txt new file mode 100644 index 0000000..50a4436 --- /dev/null +++ b/tests/snapshots/bolt__parse_216__1.txt @@ -0,0 +1,21 @@ +_bolt_lineno = [1], [1] +_bolt_helper_children = _bolt_runtime.helpers['children'] +_bolt_helper_replace = _bolt_runtime.helpers['replace'] +with _bolt_runtime.scope() as _bolt_var3: + _bolt_var0 = None + _bolt_var1 = None + _bolt_var2 = None + with _bolt_var0 as _bolt_with0, _bolt_var1, _bolt_var2 as _bolt_with1: + x = _bolt_with0 + y = _bolt_with1 + pass +_bolt_var4 = _bolt_helper_replace(_bolt_refs[0], commands=_bolt_helper_children(_bolt_var3)) +--- +output = _bolt_var4 +--- +_bolt_refs[0] + + location: SourceLocation(pos=0, lineno=1, colno=1) + end_location: SourceLocation(pos=42, lineno=3, colno=1) + commands: + diff --git a/tests/snapshots/bolt__parse_98__0.txt b/tests/snapshots/bolt__parse_98__0.txt index 21de2a2..3fc75c2 100644 --- a/tests/snapshots/bolt__parse_98__0.txt +++ b/tests/snapshots/bolt__parse_98__0.txt @@ -1,8 +1,7 @@ -#>ERROR Can't inline conditions as execute subcommands. -# line 1, column 7 +#>ERROR Expected literal 'block', literal 'blocks', literal 'data', literal 'entity', literal 'predicate' or literal 'score' but got literal '"foo"'. +# line 1, column 10 # 1 | at @s if "foo" == "bar": -# : ^^^^^^^^^^^^^^^^^^ +# : ^^^^^ # 2 | say yolo -# : ^^^^^^^^ at @s if "foo" == "bar": say yolo diff --git a/tests/snapshots/bolt__parse_99__0.txt b/tests/snapshots/bolt__parse_99__0.txt index fc6c39b..7a5b94b 100644 --- a/tests/snapshots/bolt__parse_99__0.txt +++ b/tests/snapshots/bolt__parse_99__0.txt @@ -1,4 +1,4 @@ -#>ERROR Expected colon, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 123 other tokens but got literal 'for'. +#>ERROR Expected colon, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 122 other tokens but got literal 'for'. # line 1, column 7 # 1 | at @s for i in "foo": # : ^^^ diff --git a/tests/snapshots/examples__build_bolt_basic__0.pack.md b/tests/snapshots/examples__build_bolt_basic__0.pack.md index 1398700..5b507bf 100644 --- a/tests/snapshots/examples__build_bolt_basic__0.pack.md +++ b/tests/snapshots/examples__build_bolt_basic__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } @@ -198,14 +198,14 @@ execute at @s run particle minecraft:block minecraft:light_blue_concrete ~ ~1 ~ execute as @a[scores={foo=1..}] run scoreboard players remove @s foo 1 execute as @a[scores={bar=1..}] run scoreboard players remove @s bar 1 scoreboard players set @p tmp -8 -tp @s ~12 ~23 ~34 -tp @s ~12 23 ~34 -tp @s 12 23 34 -tp @s ~12 ~23 ~34 -tp @s ^12 ^23 ^34 -tp @s -12 -23 -34 -tp @s ~-12 ~-23 ~-34 -tp @s ^-12 ^-23 ^-34 +setblock ~12 ~23 ~34 stone +setblock ~12 23 ~34 stone +setblock 12 23 34 stone +setblock ~12 ~23 ~34 stone +setblock ^12 ^23 ^34 stone +setblock -12 -23 -34 stone +setblock ~-12 ~-23 ~-34 stone +setblock ^-12 ^-23 ^-34 stone say 0 a say 1 b say 2 c @@ -266,6 +266,7 @@ say inner dummy say dummy say dummy say dummy +say AstCommand(identifier='tellraw:targets:message', arguments=AstChildren((AstSelector(variable='p', arguments=AstChildren(())), AstJsonValue(value='hello')))) ``` `@function demo:import_a` @@ -638,7 +639,7 @@ say json loaded! ```json { "pack": { - "pack_format": 8, + "pack_format": 9, "description": "" } } diff --git a/tests/snapshots/examples__build_bolt_chicken__0.pack.md b/tests/snapshots/examples__build_bolt_chicken__0.pack.md index 341f524..4574e9c 100644 --- a/tests/snapshots/examples__build_bolt_chicken__0.pack.md +++ b/tests/snapshots/examples__build_bolt_chicken__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } diff --git a/tests/snapshots/examples__build_bolt_circular__0.pack.md b/tests/snapshots/examples__build_bolt_circular__0.pack.md index 77be4cb..5de9576 100644 --- a/tests/snapshots/examples__build_bolt_circular__0.pack.md +++ b/tests/snapshots/examples__build_bolt_circular__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } diff --git a/tests/snapshots/examples__build_bolt_debug__0.pack.md b/tests/snapshots/examples__build_bolt_debug__0.pack.md index 2932522..324d811 100644 --- a/tests/snapshots/examples__build_bolt_debug__0.pack.md +++ b/tests/snapshots/examples__build_bolt_debug__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } diff --git a/tests/snapshots/examples__build_bolt_flat__0.pack.md b/tests/snapshots/examples__build_bolt_flat__0.pack.md index 68ebbe0..50b6417 100644 --- a/tests/snapshots/examples__build_bolt_flat__0.pack.md +++ b/tests/snapshots/examples__build_bolt_flat__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } diff --git a/tests/snapshots/examples__build_bolt_generated__0.pack.md b/tests/snapshots/examples__build_bolt_generated__0.pack.md index a9fc9a9..243a4cb 100644 --- a/tests/snapshots/examples__build_bolt_generated__0.pack.md +++ b/tests/snapshots/examples__build_bolt_generated__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } diff --git a/tests/snapshots/examples__build_bolt_merge__0.pack.md b/tests/snapshots/examples__build_bolt_merge__0.pack.md index cfb90a6..a1c8524 100644 --- a/tests/snapshots/examples__build_bolt_merge__0.pack.md +++ b/tests/snapshots/examples__build_bolt_merge__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } diff --git a/tests/snapshots/examples__build_bolt_shadow_global__0.pack.md b/tests/snapshots/examples__build_bolt_shadow_global__0.pack.md index 9b3620f..d281a94 100644 --- a/tests/snapshots/examples__build_bolt_shadow_global__0.pack.md +++ b/tests/snapshots/examples__build_bolt_shadow_global__0.pack.md @@ -7,7 +7,7 @@ ```json { "pack": { - "pack_format": 9, + "pack_format": 10, "description": "" } } diff --git a/tests/snapshots/spec__prototypes__0.json b/tests/snapshots/spec__prototypes__0.json new file mode 100644 index 0000000..6ef8378 --- /dev/null +++ b/tests/snapshots/spec__prototypes__0.json @@ -0,0 +1,1810 @@ +[ + "advancement:grant:targets:everything", + "advancement:grant:targets:from:advancement", + "advancement:grant:targets:only:advancement", + "advancement:grant:targets:only:advancement:criterion", + "advancement:grant:targets:through:advancement", + "advancement:grant:targets:until:advancement", + "advancement:name:content", + "advancement:revoke:targets:everything", + "advancement:revoke:targets:from:advancement", + "advancement:revoke:targets:only:advancement", + "advancement:revoke:targets:only:advancement:criterion", + "advancement:revoke:targets:through:advancement", + "advancement:revoke:targets:until:advancement", + "align:axes:subcommand", + "anchored:anchor:subcommand", + "append:block_tag:name:content", + "append:entity_type_tag:name:content", + "append:fluid_tag:name:content", + "append:function:name:commands", + "append:function_tag:name:content", + "append:game_event_tag:name:content", + "append:item_tag:name:content", + "append:worldgen_biome_tag:name:content", + "append:worldgen_configured_carver_tag:name:content", + "append:worldgen_configured_structure_feature_tag:name:content", + "append:worldgen_placed_feature_tag:name:content", + "append:worldgen_structure_set_tag:name:content", + "as:targets:subcommand", + "at:targets:subcommand", + "attribute:target:attribute:base:get", + "attribute:target:attribute:base:get:scale", + "attribute:target:attribute:base:set:value", + "attribute:target:attribute:get", + "attribute:target:attribute:get:scale", + "attribute:target:attribute:modifier:add:uuid:name:value:add", + "attribute:target:attribute:modifier:add:uuid:name:value:multiply", + "attribute:target:attribute:modifier:add:uuid:name:value:multiply_base", + "attribute:target:attribute:modifier:remove:uuid", + "attribute:target:attribute:modifier:value:get:uuid", + "attribute:target:attribute:modifier:value:get:uuid:scale", + "ban-ip:target", + "ban-ip:target:reason", + "ban:targets", + "ban:targets:reason", + "banlist", + "banlist:ips", + "banlist:players", + "block_tag:name:content", + "blockstate:name:content", + "bossbar:add:id:name", + "bossbar:get:id:max", + "bossbar:get:id:players", + "bossbar:get:id:value", + "bossbar:get:id:visible", + "bossbar:list", + "bossbar:remove:id", + "bossbar:set:id:color:blue", + "bossbar:set:id:color:green", + "bossbar:set:id:color:pink", + "bossbar:set:id:color:purple", + "bossbar:set:id:color:red", + "bossbar:set:id:color:white", + "bossbar:set:id:color:yellow", + "bossbar:set:id:max:max", + "bossbar:set:id:name:name", + "bossbar:set:id:players", + "bossbar:set:id:players:targets", + "bossbar:set:id:style:notched_10", + "bossbar:set:id:style:notched_12", + "bossbar:set:id:style:notched_20", + "bossbar:set:id:style:notched_6", + "bossbar:set:id:style:progress", + "bossbar:set:id:value:value", + "bossbar:set:id:visible:visible", + "break", + "clear", + "clear:targets", + "clear:targets:item", + "clear:targets:item:maxCount", + "clone:begin:end:destination", + "clone:begin:end:destination:filtered:filter", + "clone:begin:end:destination:filtered:filter:force", + "clone:begin:end:destination:filtered:filter:move", + "clone:begin:end:destination:filtered:filter:normal", + "clone:begin:end:destination:masked", + "clone:begin:end:destination:masked:force", + "clone:begin:end:destination:masked:move", + "clone:begin:end:destination:masked:normal", + "clone:begin:end:destination:replace", + "clone:begin:end:destination:replace:force", + "clone:begin:end:destination:replace:move", + "clone:begin:end:destination:replace:normal", + "continue", + "data:get:block:targetPos", + "data:get:block:targetPos:path", + "data:get:block:targetPos:path:scale", + "data:get:entity:target", + "data:get:entity:target:path", + "data:get:entity:target:path:scale", + "data:get:storage:target", + "data:get:storage:target:path", + "data:get:storage:target:path:scale", + "data:merge:block:targetPos:nbt", + "data:merge:entity:target:nbt", + "data:merge:storage:target:nbt", + "data:modify:block:targetPos:targetPath:append:from:block:sourcePos", + "data:modify:block:targetPos:targetPath:append:from:block:sourcePos:sourcePath", + "data:modify:block:targetPos:targetPath:append:from:entity:source", + "data:modify:block:targetPos:targetPath:append:from:entity:source:sourcePath", + "data:modify:block:targetPos:targetPath:append:from:storage:source", + "data:modify:block:targetPos:targetPath:append:from:storage:source:sourcePath", + "data:modify:block:targetPos:targetPath:append:value:value", + "data:modify:block:targetPos:targetPath:insert:index:from:block:sourcePos", + "data:modify:block:targetPos:targetPath:insert:index:from:block:sourcePos:sourcePath", + "data:modify:block:targetPos:targetPath:insert:index:from:entity:source", + "data:modify:block:targetPos:targetPath:insert:index:from:entity:source:sourcePath", + "data:modify:block:targetPos:targetPath:insert:index:from:storage:source", + "data:modify:block:targetPos:targetPath:insert:index:from:storage:source:sourcePath", + "data:modify:block:targetPos:targetPath:insert:index:value:value", + "data:modify:block:targetPos:targetPath:merge:from:block:sourcePos", + "data:modify:block:targetPos:targetPath:merge:from:block:sourcePos:sourcePath", + "data:modify:block:targetPos:targetPath:merge:from:entity:source", + "data:modify:block:targetPos:targetPath:merge:from:entity:source:sourcePath", + "data:modify:block:targetPos:targetPath:merge:from:storage:source", + "data:modify:block:targetPos:targetPath:merge:from:storage:source:sourcePath", + "data:modify:block:targetPos:targetPath:merge:value:value", + "data:modify:block:targetPos:targetPath:prepend:from:block:sourcePos", + "data:modify:block:targetPos:targetPath:prepend:from:block:sourcePos:sourcePath", + "data:modify:block:targetPos:targetPath:prepend:from:entity:source", + "data:modify:block:targetPos:targetPath:prepend:from:entity:source:sourcePath", + "data:modify:block:targetPos:targetPath:prepend:from:storage:source", + "data:modify:block:targetPos:targetPath:prepend:from:storage:source:sourcePath", + "data:modify:block:targetPos:targetPath:prepend:value:value", + "data:modify:block:targetPos:targetPath:set:from:block:sourcePos", + "data:modify:block:targetPos:targetPath:set:from:block:sourcePos:sourcePath", + "data:modify:block:targetPos:targetPath:set:from:entity:source", + "data:modify:block:targetPos:targetPath:set:from:entity:source:sourcePath", + "data:modify:block:targetPos:targetPath:set:from:storage:source", + "data:modify:block:targetPos:targetPath:set:from:storage:source:sourcePath", + "data:modify:block:targetPos:targetPath:set:value:value", + "data:modify:entity:target:targetPath:append:from:block:sourcePos", + "data:modify:entity:target:targetPath:append:from:block:sourcePos:sourcePath", + "data:modify:entity:target:targetPath:append:from:entity:source", + "data:modify:entity:target:targetPath:append:from:entity:source:sourcePath", + "data:modify:entity:target:targetPath:append:from:storage:source", + "data:modify:entity:target:targetPath:append:from:storage:source:sourcePath", + "data:modify:entity:target:targetPath:append:value:value", + "data:modify:entity:target:targetPath:insert:index:from:block:sourcePos", + "data:modify:entity:target:targetPath:insert:index:from:block:sourcePos:sourcePath", + "data:modify:entity:target:targetPath:insert:index:from:entity:source", + "data:modify:entity:target:targetPath:insert:index:from:entity:source:sourcePath", + "data:modify:entity:target:targetPath:insert:index:from:storage:source", + "data:modify:entity:target:targetPath:insert:index:from:storage:source:sourcePath", + "data:modify:entity:target:targetPath:insert:index:value:value", + "data:modify:entity:target:targetPath:merge:from:block:sourcePos", + "data:modify:entity:target:targetPath:merge:from:block:sourcePos:sourcePath", + "data:modify:entity:target:targetPath:merge:from:entity:source", + "data:modify:entity:target:targetPath:merge:from:entity:source:sourcePath", + "data:modify:entity:target:targetPath:merge:from:storage:source", + "data:modify:entity:target:targetPath:merge:from:storage:source:sourcePath", + "data:modify:entity:target:targetPath:merge:value:value", + "data:modify:entity:target:targetPath:prepend:from:block:sourcePos", + "data:modify:entity:target:targetPath:prepend:from:block:sourcePos:sourcePath", + "data:modify:entity:target:targetPath:prepend:from:entity:source", + "data:modify:entity:target:targetPath:prepend:from:entity:source:sourcePath", + "data:modify:entity:target:targetPath:prepend:from:storage:source", + "data:modify:entity:target:targetPath:prepend:from:storage:source:sourcePath", + "data:modify:entity:target:targetPath:prepend:value:value", + "data:modify:entity:target:targetPath:set:from:block:sourcePos", + "data:modify:entity:target:targetPath:set:from:block:sourcePos:sourcePath", + "data:modify:entity:target:targetPath:set:from:entity:source", + "data:modify:entity:target:targetPath:set:from:entity:source:sourcePath", + "data:modify:entity:target:targetPath:set:from:storage:source", + "data:modify:entity:target:targetPath:set:from:storage:source:sourcePath", + "data:modify:entity:target:targetPath:set:value:value", + "data:modify:storage:target:targetPath:append:from:block:sourcePos", + "data:modify:storage:target:targetPath:append:from:block:sourcePos:sourcePath", + "data:modify:storage:target:targetPath:append:from:entity:source", + "data:modify:storage:target:targetPath:append:from:entity:source:sourcePath", + "data:modify:storage:target:targetPath:append:from:storage:source", + "data:modify:storage:target:targetPath:append:from:storage:source:sourcePath", + "data:modify:storage:target:targetPath:append:value:value", + "data:modify:storage:target:targetPath:insert:index:from:block:sourcePos", + "data:modify:storage:target:targetPath:insert:index:from:block:sourcePos:sourcePath", + "data:modify:storage:target:targetPath:insert:index:from:entity:source", + "data:modify:storage:target:targetPath:insert:index:from:entity:source:sourcePath", + "data:modify:storage:target:targetPath:insert:index:from:storage:source", + "data:modify:storage:target:targetPath:insert:index:from:storage:source:sourcePath", + "data:modify:storage:target:targetPath:insert:index:value:value", + "data:modify:storage:target:targetPath:merge:from:block:sourcePos", + "data:modify:storage:target:targetPath:merge:from:block:sourcePos:sourcePath", + "data:modify:storage:target:targetPath:merge:from:entity:source", + "data:modify:storage:target:targetPath:merge:from:entity:source:sourcePath", + "data:modify:storage:target:targetPath:merge:from:storage:source", + "data:modify:storage:target:targetPath:merge:from:storage:source:sourcePath", + "data:modify:storage:target:targetPath:merge:value:value", + "data:modify:storage:target:targetPath:prepend:from:block:sourcePos", + "data:modify:storage:target:targetPath:prepend:from:block:sourcePos:sourcePath", + "data:modify:storage:target:targetPath:prepend:from:entity:source", + "data:modify:storage:target:targetPath:prepend:from:entity:source:sourcePath", + "data:modify:storage:target:targetPath:prepend:from:storage:source", + "data:modify:storage:target:targetPath:prepend:from:storage:source:sourcePath", + "data:modify:storage:target:targetPath:prepend:value:value", + "data:modify:storage:target:targetPath:set:from:block:sourcePos", + "data:modify:storage:target:targetPath:set:from:block:sourcePos:sourcePath", + "data:modify:storage:target:targetPath:set:from:entity:source", + "data:modify:storage:target:targetPath:set:from:entity:source:sourcePath", + "data:modify:storage:target:targetPath:set:from:storage:source", + "data:modify:storage:target:targetPath:set:from:storage:source:sourcePath", + "data:modify:storage:target:targetPath:set:value:value", + "data:remove:block:targetPos:path", + "data:remove:entity:target:path", + "data:remove:storage:target:path", + "datapack:disable:name", + "datapack:enable:name", + "datapack:enable:name:after:existing", + "datapack:enable:name:before:existing", + "datapack:enable:name:first", + "datapack:enable:name:last", + "datapack:list", + "datapack:list:available", + "datapack:list:enabled", + "debug:function:name", + "debug:start", + "debug:stop", + "def:function:body", + "defaultgamemode:adventure", + "defaultgamemode:creative", + "defaultgamemode:spectator", + "defaultgamemode:survival", + "del", + "del:target", + "deop:targets", + "difficulty", + "difficulty:easy", + "difficulty:hard", + "difficulty:normal", + "difficulty:peaceful", + "dimension:name:content", + "dimension_type:name:content", + "effect:clear", + "effect:clear:targets", + "effect:clear:targets:effect", + "effect:give:targets:effect", + "effect:give:targets:effect:seconds", + "effect:give:targets:effect:seconds:amplifier", + "effect:give:targets:effect:seconds:amplifier:hideParticles", + "elif:condition:body", + "else:body", + "enchant:targets:enchantment", + "enchant:targets:enchantment:level", + "entity_type_tag:name:content", + "execute:advancement:grant:targets:everything", + "execute:advancement:grant:targets:from:advancement", + "execute:advancement:grant:targets:only:advancement", + "execute:advancement:grant:targets:only:advancement:criterion", + "execute:advancement:grant:targets:through:advancement", + "execute:advancement:grant:targets:until:advancement", + "execute:advancement:name:content", + "execute:advancement:revoke:targets:everything", + "execute:advancement:revoke:targets:from:advancement", + "execute:advancement:revoke:targets:only:advancement", + "execute:advancement:revoke:targets:only:advancement:criterion", + "execute:advancement:revoke:targets:through:advancement", + "execute:advancement:revoke:targets:until:advancement", + "execute:align:axes:subcommand", + "execute:anchored:anchor:subcommand", + "execute:append:block_tag:name:content", + "execute:append:entity_type_tag:name:content", + "execute:append:fluid_tag:name:content", + "execute:append:function:name:commands", + "execute:append:function_tag:name:content", + "execute:append:game_event_tag:name:content", + "execute:append:item_tag:name:content", + "execute:append:worldgen_biome_tag:name:content", + "execute:append:worldgen_configured_carver_tag:name:content", + "execute:append:worldgen_configured_structure_feature_tag:name:content", + "execute:append:worldgen_placed_feature_tag:name:content", + "execute:append:worldgen_structure_set_tag:name:content", + "execute:as:targets:subcommand", + "execute:at:targets:subcommand", + "execute:attribute:target:attribute:base:get", + "execute:attribute:target:attribute:base:get:scale", + "execute:attribute:target:attribute:base:set:value", + "execute:attribute:target:attribute:get", + "execute:attribute:target:attribute:get:scale", + "execute:attribute:target:attribute:modifier:add:uuid:name:value:add", + "execute:attribute:target:attribute:modifier:add:uuid:name:value:multiply", + "execute:attribute:target:attribute:modifier:add:uuid:name:value:multiply_base", + "execute:attribute:target:attribute:modifier:remove:uuid", + "execute:attribute:target:attribute:modifier:value:get:uuid", + "execute:attribute:target:attribute:modifier:value:get:uuid:scale", + "execute:ban-ip:target", + "execute:ban-ip:target:reason", + "execute:ban:targets", + "execute:ban:targets:reason", + "execute:banlist:ips", + "execute:banlist:players", + "execute:block_tag:name:content", + "execute:blockstate:name:content", + "execute:bossbar:add:id:name", + "execute:bossbar:get:id:max", + "execute:bossbar:get:id:players", + "execute:bossbar:get:id:value", + "execute:bossbar:get:id:visible", + "execute:bossbar:list", + "execute:bossbar:remove:id", + "execute:bossbar:set:id:color:blue", + "execute:bossbar:set:id:color:green", + "execute:bossbar:set:id:color:pink", + "execute:bossbar:set:id:color:purple", + "execute:bossbar:set:id:color:red", + "execute:bossbar:set:id:color:white", + "execute:bossbar:set:id:color:yellow", + "execute:bossbar:set:id:max:max", + "execute:bossbar:set:id:name:name", + "execute:bossbar:set:id:players", + "execute:bossbar:set:id:players:targets", + "execute:bossbar:set:id:style:notched_10", + "execute:bossbar:set:id:style:notched_12", + "execute:bossbar:set:id:style:notched_20", + "execute:bossbar:set:id:style:notched_6", + "execute:bossbar:set:id:style:progress", + "execute:bossbar:set:id:value:value", + "execute:bossbar:set:id:visible:visible", + "execute:clear:targets", + "execute:clear:targets:item", + "execute:clear:targets:item:maxCount", + "execute:clone:begin:end:destination", + "execute:clone:begin:end:destination:filtered:filter", + "execute:clone:begin:end:destination:filtered:filter:force", + "execute:clone:begin:end:destination:filtered:filter:move", + "execute:clone:begin:end:destination:filtered:filter:normal", + "execute:clone:begin:end:destination:masked", + "execute:clone:begin:end:destination:masked:force", + "execute:clone:begin:end:destination:masked:move", + "execute:clone:begin:end:destination:masked:normal", + "execute:clone:begin:end:destination:replace", + "execute:clone:begin:end:destination:replace:force", + "execute:clone:begin:end:destination:replace:move", + "execute:clone:begin:end:destination:replace:normal", + "execute:commands", + "execute:data:get:block:targetPos", + "execute:data:get:block:targetPos:path", + "execute:data:get:block:targetPos:path:scale", + "execute:data:get:entity:target", + "execute:data:get:entity:target:path", + "execute:data:get:entity:target:path:scale", + "execute:data:get:storage:target", + "execute:data:get:storage:target:path", + "execute:data:get:storage:target:path:scale", + "execute:data:merge:block:targetPos:nbt", + "execute:data:merge:entity:target:nbt", + "execute:data:merge:storage:target:nbt", + "execute:data:modify:block:targetPos:targetPath:append:from:block:sourcePos", + "execute:data:modify:block:targetPos:targetPath:append:from:block:sourcePos:sourcePath", + "execute:data:modify:block:targetPos:targetPath:append:from:entity:source", + "execute:data:modify:block:targetPos:targetPath:append:from:entity:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:append:from:storage:source", + "execute:data:modify:block:targetPos:targetPath:append:from:storage:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:append:value:value", + "execute:data:modify:block:targetPos:targetPath:insert:index:from:block:sourcePos", + "execute:data:modify:block:targetPos:targetPath:insert:index:from:block:sourcePos:sourcePath", + "execute:data:modify:block:targetPos:targetPath:insert:index:from:entity:source", + "execute:data:modify:block:targetPos:targetPath:insert:index:from:entity:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:insert:index:from:storage:source", + "execute:data:modify:block:targetPos:targetPath:insert:index:from:storage:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:insert:index:value:value", + "execute:data:modify:block:targetPos:targetPath:merge:from:block:sourcePos", + "execute:data:modify:block:targetPos:targetPath:merge:from:block:sourcePos:sourcePath", + "execute:data:modify:block:targetPos:targetPath:merge:from:entity:source", + "execute:data:modify:block:targetPos:targetPath:merge:from:entity:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:merge:from:storage:source", + "execute:data:modify:block:targetPos:targetPath:merge:from:storage:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:merge:value:value", + "execute:data:modify:block:targetPos:targetPath:prepend:from:block:sourcePos", + "execute:data:modify:block:targetPos:targetPath:prepend:from:block:sourcePos:sourcePath", + "execute:data:modify:block:targetPos:targetPath:prepend:from:entity:source", + "execute:data:modify:block:targetPos:targetPath:prepend:from:entity:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:prepend:from:storage:source", + "execute:data:modify:block:targetPos:targetPath:prepend:from:storage:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:prepend:value:value", + "execute:data:modify:block:targetPos:targetPath:set:from:block:sourcePos", + "execute:data:modify:block:targetPos:targetPath:set:from:block:sourcePos:sourcePath", + "execute:data:modify:block:targetPos:targetPath:set:from:entity:source", + "execute:data:modify:block:targetPos:targetPath:set:from:entity:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:set:from:storage:source", + "execute:data:modify:block:targetPos:targetPath:set:from:storage:source:sourcePath", + "execute:data:modify:block:targetPos:targetPath:set:value:value", + "execute:data:modify:entity:target:targetPath:append:from:block:sourcePos", + "execute:data:modify:entity:target:targetPath:append:from:block:sourcePos:sourcePath", + "execute:data:modify:entity:target:targetPath:append:from:entity:source", + "execute:data:modify:entity:target:targetPath:append:from:entity:source:sourcePath", + "execute:data:modify:entity:target:targetPath:append:from:storage:source", + "execute:data:modify:entity:target:targetPath:append:from:storage:source:sourcePath", + "execute:data:modify:entity:target:targetPath:append:value:value", + "execute:data:modify:entity:target:targetPath:insert:index:from:block:sourcePos", + "execute:data:modify:entity:target:targetPath:insert:index:from:block:sourcePos:sourcePath", + "execute:data:modify:entity:target:targetPath:insert:index:from:entity:source", + "execute:data:modify:entity:target:targetPath:insert:index:from:entity:source:sourcePath", + "execute:data:modify:entity:target:targetPath:insert:index:from:storage:source", + "execute:data:modify:entity:target:targetPath:insert:index:from:storage:source:sourcePath", + "execute:data:modify:entity:target:targetPath:insert:index:value:value", + "execute:data:modify:entity:target:targetPath:merge:from:block:sourcePos", + "execute:data:modify:entity:target:targetPath:merge:from:block:sourcePos:sourcePath", + "execute:data:modify:entity:target:targetPath:merge:from:entity:source", + "execute:data:modify:entity:target:targetPath:merge:from:entity:source:sourcePath", + "execute:data:modify:entity:target:targetPath:merge:from:storage:source", + "execute:data:modify:entity:target:targetPath:merge:from:storage:source:sourcePath", + "execute:data:modify:entity:target:targetPath:merge:value:value", + "execute:data:modify:entity:target:targetPath:prepend:from:block:sourcePos", + "execute:data:modify:entity:target:targetPath:prepend:from:block:sourcePos:sourcePath", + "execute:data:modify:entity:target:targetPath:prepend:from:entity:source", + "execute:data:modify:entity:target:targetPath:prepend:from:entity:source:sourcePath", + "execute:data:modify:entity:target:targetPath:prepend:from:storage:source", + "execute:data:modify:entity:target:targetPath:prepend:from:storage:source:sourcePath", + "execute:data:modify:entity:target:targetPath:prepend:value:value", + "execute:data:modify:entity:target:targetPath:set:from:block:sourcePos", + "execute:data:modify:entity:target:targetPath:set:from:block:sourcePos:sourcePath", + "execute:data:modify:entity:target:targetPath:set:from:entity:source", + "execute:data:modify:entity:target:targetPath:set:from:entity:source:sourcePath", + "execute:data:modify:entity:target:targetPath:set:from:storage:source", + "execute:data:modify:entity:target:targetPath:set:from:storage:source:sourcePath", + "execute:data:modify:entity:target:targetPath:set:value:value", + "execute:data:modify:storage:target:targetPath:append:from:block:sourcePos", + "execute:data:modify:storage:target:targetPath:append:from:block:sourcePos:sourcePath", + "execute:data:modify:storage:target:targetPath:append:from:entity:source", + "execute:data:modify:storage:target:targetPath:append:from:entity:source:sourcePath", + "execute:data:modify:storage:target:targetPath:append:from:storage:source", + "execute:data:modify:storage:target:targetPath:append:from:storage:source:sourcePath", + "execute:data:modify:storage:target:targetPath:append:value:value", + "execute:data:modify:storage:target:targetPath:insert:index:from:block:sourcePos", + "execute:data:modify:storage:target:targetPath:insert:index:from:block:sourcePos:sourcePath", + "execute:data:modify:storage:target:targetPath:insert:index:from:entity:source", + "execute:data:modify:storage:target:targetPath:insert:index:from:entity:source:sourcePath", + "execute:data:modify:storage:target:targetPath:insert:index:from:storage:source", + "execute:data:modify:storage:target:targetPath:insert:index:from:storage:source:sourcePath", + "execute:data:modify:storage:target:targetPath:insert:index:value:value", + "execute:data:modify:storage:target:targetPath:merge:from:block:sourcePos", + "execute:data:modify:storage:target:targetPath:merge:from:block:sourcePos:sourcePath", + "execute:data:modify:storage:target:targetPath:merge:from:entity:source", + "execute:data:modify:storage:target:targetPath:merge:from:entity:source:sourcePath", + "execute:data:modify:storage:target:targetPath:merge:from:storage:source", + "execute:data:modify:storage:target:targetPath:merge:from:storage:source:sourcePath", + "execute:data:modify:storage:target:targetPath:merge:value:value", + "execute:data:modify:storage:target:targetPath:prepend:from:block:sourcePos", + "execute:data:modify:storage:target:targetPath:prepend:from:block:sourcePos:sourcePath", + "execute:data:modify:storage:target:targetPath:prepend:from:entity:source", + "execute:data:modify:storage:target:targetPath:prepend:from:entity:source:sourcePath", + "execute:data:modify:storage:target:targetPath:prepend:from:storage:source", + "execute:data:modify:storage:target:targetPath:prepend:from:storage:source:sourcePath", + "execute:data:modify:storage:target:targetPath:prepend:value:value", + "execute:data:modify:storage:target:targetPath:set:from:block:sourcePos", + "execute:data:modify:storage:target:targetPath:set:from:block:sourcePos:sourcePath", + "execute:data:modify:storage:target:targetPath:set:from:entity:source", + "execute:data:modify:storage:target:targetPath:set:from:entity:source:sourcePath", + "execute:data:modify:storage:target:targetPath:set:from:storage:source", + "execute:data:modify:storage:target:targetPath:set:from:storage:source:sourcePath", + "execute:data:modify:storage:target:targetPath:set:value:value", + "execute:data:remove:block:targetPos:path", + "execute:data:remove:entity:target:path", + "execute:data:remove:storage:target:path", + "execute:datapack:disable:name", + "execute:datapack:enable:name", + "execute:datapack:enable:name:after:existing", + "execute:datapack:enable:name:before:existing", + "execute:datapack:enable:name:first", + "execute:datapack:enable:name:last", + "execute:datapack:list", + "execute:datapack:list:available", + "execute:datapack:list:enabled", + "execute:debug:function:name", + "execute:debug:start", + "execute:debug:stop", + "execute:defaultgamemode:adventure", + "execute:defaultgamemode:creative", + "execute:defaultgamemode:spectator", + "execute:defaultgamemode:survival", + "execute:deop:targets", + "execute:difficulty:easy", + "execute:difficulty:hard", + "execute:difficulty:normal", + "execute:difficulty:peaceful", + "execute:dimension:name:content", + "execute:dimension_type:name:content", + "execute:effect:clear", + "execute:effect:clear:targets", + "execute:effect:clear:targets:effect", + "execute:effect:give:targets:effect", + "execute:effect:give:targets:effect:seconds", + "execute:effect:give:targets:effect:seconds:amplifier", + "execute:effect:give:targets:effect:seconds:amplifier:hideParticles", + "execute:enchant:targets:enchantment", + "execute:enchant:targets:enchantment:level", + "execute:entity_type_tag:name:content", + "execute:expand:commands", + "execute:experience:add:targets:amount", + "execute:experience:add:targets:amount:levels", + "execute:experience:add:targets:amount:points", + "execute:experience:query:targets:levels", + "execute:experience:query:targets:points", + "execute:experience:set:targets:amount", + "execute:experience:set:targets:amount:levels", + "execute:experience:set:targets:amount:points", + "execute:facing:entity:targets:anchor:subcommand", + "execute:facing:pos:subcommand", + "execute:fill:from:to:block", + "execute:fill:from:to:block:destroy", + "execute:fill:from:to:block:hollow", + "execute:fill:from:to:block:keep", + "execute:fill:from:to:block:outline", + "execute:fill:from:to:block:replace", + "execute:fill:from:to:block:replace:filter", + "execute:fluid_tag:name:content", + "execute:font:name:content", + "execute:forceload:add:from", + "execute:forceload:add:from:to", + "execute:forceload:query", + "execute:forceload:query:pos", + "execute:forceload:remove:all", + "execute:forceload:remove:from", + "execute:forceload:remove:from:to", + "execute:function:name", + "execute:function:name:commands", + "execute:function:tag:name", + "execute:function_tag:name:content", + "execute:game_event_tag:name:content", + "execute:gamemode:adventure", + "execute:gamemode:adventure:target", + "execute:gamemode:creative", + "execute:gamemode:creative:target", + "execute:gamemode:spectator", + "execute:gamemode:spectator:target", + "execute:gamemode:survival", + "execute:gamemode:survival:target", + "execute:gamerule:announceAdvancements", + "execute:gamerule:announceAdvancements:value", + "execute:gamerule:commandBlockOutput", + "execute:gamerule:commandBlockOutput:value", + "execute:gamerule:disableElytraMovementCheck", + "execute:gamerule:disableElytraMovementCheck:value", + "execute:gamerule:disableRaids", + "execute:gamerule:disableRaids:value", + "execute:gamerule:doDaylightCycle", + "execute:gamerule:doDaylightCycle:value", + "execute:gamerule:doEntityDrops", + "execute:gamerule:doEntityDrops:value", + "execute:gamerule:doFireTick", + "execute:gamerule:doFireTick:value", + "execute:gamerule:doImmediateRespawn", + "execute:gamerule:doImmediateRespawn:value", + "execute:gamerule:doInsomnia", + "execute:gamerule:doInsomnia:value", + "execute:gamerule:doLimitedCrafting", + "execute:gamerule:doLimitedCrafting:value", + "execute:gamerule:doMobLoot", + "execute:gamerule:doMobLoot:value", + "execute:gamerule:doMobSpawning", + "execute:gamerule:doMobSpawning:value", + "execute:gamerule:doPatrolSpawning", + "execute:gamerule:doPatrolSpawning:value", + "execute:gamerule:doTileDrops", + "execute:gamerule:doTileDrops:value", + "execute:gamerule:doTraderSpawning", + "execute:gamerule:doTraderSpawning:value", + "execute:gamerule:doWardenSpawning", + "execute:gamerule:doWardenSpawning:value", + "execute:gamerule:doWeatherCycle", + "execute:gamerule:doWeatherCycle:value", + "execute:gamerule:drowningDamage", + "execute:gamerule:drowningDamage:value", + "execute:gamerule:fallDamage", + "execute:gamerule:fallDamage:value", + "execute:gamerule:fireDamage", + "execute:gamerule:fireDamage:value", + "execute:gamerule:forgiveDeadPlayers", + "execute:gamerule:forgiveDeadPlayers:value", + "execute:gamerule:freezeDamage", + "execute:gamerule:freezeDamage:value", + "execute:gamerule:keepInventory", + "execute:gamerule:keepInventory:value", + "execute:gamerule:logAdminCommands", + "execute:gamerule:logAdminCommands:value", + "execute:gamerule:maxCommandChainLength", + "execute:gamerule:maxCommandChainLength:value", + "execute:gamerule:maxEntityCramming", + "execute:gamerule:maxEntityCramming:value", + "execute:gamerule:mobGriefing", + "execute:gamerule:mobGriefing:value", + "execute:gamerule:naturalRegeneration", + "execute:gamerule:naturalRegeneration:value", + "execute:gamerule:playersSleepingPercentage", + "execute:gamerule:playersSleepingPercentage:value", + "execute:gamerule:randomTickSpeed", + "execute:gamerule:randomTickSpeed:value", + "execute:gamerule:reducedDebugInfo", + "execute:gamerule:reducedDebugInfo:value", + "execute:gamerule:sendCommandFeedback", + "execute:gamerule:sendCommandFeedback:value", + "execute:gamerule:showDeathMessages", + "execute:gamerule:showDeathMessages:value", + "execute:gamerule:spawnRadius", + "execute:gamerule:spawnRadius:value", + "execute:gamerule:spectatorsGenerateChunks", + "execute:gamerule:spectatorsGenerateChunks:value", + "execute:gamerule:universalAnger", + "execute:gamerule:universalAnger:value", + "execute:give:targets:item", + "execute:give:targets:item:count", + "execute:help:command", + "execute:if:block:pos:block", + "execute:if:block:pos:block:subcommand", + "execute:if:blocks:start:end:destination:all", + "execute:if:blocks:start:end:destination:all:subcommand", + "execute:if:blocks:start:end:destination:masked", + "execute:if:blocks:start:end:destination:masked:subcommand", + "execute:if:data:block:sourcePos:path", + "execute:if:data:block:sourcePos:path:subcommand", + "execute:if:data:entity:source:path", + "execute:if:data:entity:source:path:subcommand", + "execute:if:data:storage:source:path", + "execute:if:data:storage:source:path:subcommand", + "execute:if:entity:entities", + "execute:if:entity:entities:subcommand", + "execute:if:predicate:predicate", + "execute:if:predicate:predicate:subcommand", + "execute:if:score:target:targetObjective:<:source:sourceObjective", + "execute:if:score:target:targetObjective:<:source:sourceObjective:subcommand", + "execute:if:score:target:targetObjective:<=:source:sourceObjective", + "execute:if:score:target:targetObjective:<=:source:sourceObjective:subcommand", + "execute:if:score:target:targetObjective:=:source:sourceObjective", + "execute:if:score:target:targetObjective:=:source:sourceObjective:subcommand", + "execute:if:score:target:targetObjective:>:source:sourceObjective", + "execute:if:score:target:targetObjective:>:source:sourceObjective:subcommand", + "execute:if:score:target:targetObjective:>=:source:sourceObjective", + "execute:if:score:target:targetObjective:>=:source:sourceObjective:subcommand", + "execute:if:score:target:targetObjective:matches:range", + "execute:if:score:target:targetObjective:matches:range:subcommand", + "execute:in:dimension:subcommand", + "execute:item:modify:block:pos:slot:modifier", + "execute:item:modify:entity:targets:slot:modifier", + "execute:item:replace:block:pos:slot:from:block:source:sourceSlot", + "execute:item:replace:block:pos:slot:from:block:source:sourceSlot:modifier", + "execute:item:replace:block:pos:slot:from:entity:source:sourceSlot", + "execute:item:replace:block:pos:slot:from:entity:source:sourceSlot:modifier", + "execute:item:replace:block:pos:slot:with:item", + "execute:item:replace:block:pos:slot:with:item:count", + "execute:item:replace:entity:targets:slot:from:block:source:sourceSlot", + "execute:item:replace:entity:targets:slot:from:block:source:sourceSlot:modifier", + "execute:item:replace:entity:targets:slot:from:entity:source:sourceSlot", + "execute:item:replace:entity:targets:slot:from:entity:source:sourceSlot:modifier", + "execute:item:replace:entity:targets:slot:with:item", + "execute:item:replace:entity:targets:slot:with:item:count", + "execute:item_modifier:name:content", + "execute:item_tag:name:content", + "execute:jfr:start", + "execute:jfr:stop", + "execute:kick:targets", + "execute:kick:targets:reason", + "execute:kill:targets", + "execute:language:name:content", + "execute:list:uuids", + "execute:locate:biome:biome", + "execute:locate:poi:poi", + "execute:locate:structure:structure", + "execute:loot:give:players:fish:loot_table:pos", + "execute:loot:give:players:fish:loot_table:pos:mainhand", + "execute:loot:give:players:fish:loot_table:pos:offhand", + "execute:loot:give:players:fish:loot_table:pos:tool", + "execute:loot:give:players:kill:target", + "execute:loot:give:players:loot:loot_table", + "execute:loot:give:players:mine:pos", + "execute:loot:give:players:mine:pos:mainhand", + "execute:loot:give:players:mine:pos:offhand", + "execute:loot:give:players:mine:pos:tool", + "execute:loot:insert:targetPos:fish:loot_table:pos", + "execute:loot:insert:targetPos:fish:loot_table:pos:mainhand", + "execute:loot:insert:targetPos:fish:loot_table:pos:offhand", + "execute:loot:insert:targetPos:fish:loot_table:pos:tool", + "execute:loot:insert:targetPos:kill:target", + "execute:loot:insert:targetPos:loot:loot_table", + "execute:loot:insert:targetPos:mine:pos", + "execute:loot:insert:targetPos:mine:pos:mainhand", + "execute:loot:insert:targetPos:mine:pos:offhand", + "execute:loot:insert:targetPos:mine:pos:tool", + "execute:loot:replace:block:targetPos:slot:count:fish:loot_table:pos", + "execute:loot:replace:block:targetPos:slot:count:fish:loot_table:pos:mainhand", + "execute:loot:replace:block:targetPos:slot:count:fish:loot_table:pos:offhand", + "execute:loot:replace:block:targetPos:slot:count:fish:loot_table:pos:tool", + "execute:loot:replace:block:targetPos:slot:count:kill:target", + "execute:loot:replace:block:targetPos:slot:count:loot:loot_table", + "execute:loot:replace:block:targetPos:slot:count:mine:pos", + "execute:loot:replace:block:targetPos:slot:count:mine:pos:mainhand", + "execute:loot:replace:block:targetPos:slot:count:mine:pos:offhand", + "execute:loot:replace:block:targetPos:slot:count:mine:pos:tool", + "execute:loot:replace:block:targetPos:slot:fish:loot_table:pos", + "execute:loot:replace:block:targetPos:slot:fish:loot_table:pos:mainhand", + "execute:loot:replace:block:targetPos:slot:fish:loot_table:pos:offhand", + "execute:loot:replace:block:targetPos:slot:fish:loot_table:pos:tool", + "execute:loot:replace:block:targetPos:slot:kill:target", + "execute:loot:replace:block:targetPos:slot:loot:loot_table", + "execute:loot:replace:block:targetPos:slot:mine:pos", + "execute:loot:replace:block:targetPos:slot:mine:pos:mainhand", + "execute:loot:replace:block:targetPos:slot:mine:pos:offhand", + "execute:loot:replace:block:targetPos:slot:mine:pos:tool", + "execute:loot:replace:entity:entities:slot:count:fish:loot_table:pos", + "execute:loot:replace:entity:entities:slot:count:fish:loot_table:pos:mainhand", + "execute:loot:replace:entity:entities:slot:count:fish:loot_table:pos:offhand", + "execute:loot:replace:entity:entities:slot:count:fish:loot_table:pos:tool", + "execute:loot:replace:entity:entities:slot:count:kill:target", + "execute:loot:replace:entity:entities:slot:count:loot:loot_table", + "execute:loot:replace:entity:entities:slot:count:mine:pos", + "execute:loot:replace:entity:entities:slot:count:mine:pos:mainhand", + "execute:loot:replace:entity:entities:slot:count:mine:pos:offhand", + "execute:loot:replace:entity:entities:slot:count:mine:pos:tool", + "execute:loot:replace:entity:entities:slot:fish:loot_table:pos", + "execute:loot:replace:entity:entities:slot:fish:loot_table:pos:mainhand", + "execute:loot:replace:entity:entities:slot:fish:loot_table:pos:offhand", + "execute:loot:replace:entity:entities:slot:fish:loot_table:pos:tool", + "execute:loot:replace:entity:entities:slot:kill:target", + "execute:loot:replace:entity:entities:slot:loot:loot_table", + "execute:loot:replace:entity:entities:slot:mine:pos", + "execute:loot:replace:entity:entities:slot:mine:pos:mainhand", + "execute:loot:replace:entity:entities:slot:mine:pos:offhand", + "execute:loot:replace:entity:entities:slot:mine:pos:tool", + "execute:loot:spawn:targetPos:fish:loot_table:pos", + "execute:loot:spawn:targetPos:fish:loot_table:pos:mainhand", + "execute:loot:spawn:targetPos:fish:loot_table:pos:offhand", + "execute:loot:spawn:targetPos:fish:loot_table:pos:tool", + "execute:loot:spawn:targetPos:kill:target", + "execute:loot:spawn:targetPos:loot:loot_table", + "execute:loot:spawn:targetPos:mine:pos", + "execute:loot:spawn:targetPos:mine:pos:mainhand", + "execute:loot:spawn:targetPos:mine:pos:offhand", + "execute:loot:spawn:targetPos:mine:pos:tool", + "execute:loot_table:name:content", + "execute:me:action", + "execute:merge:advancement:name:content", + "execute:merge:block_tag:name:content", + "execute:merge:blockstate:name:content", + "execute:merge:dimension:name:content", + "execute:merge:dimension_type:name:content", + "execute:merge:entity_type_tag:name:content", + "execute:merge:fluid_tag:name:content", + "execute:merge:font:name:content", + "execute:merge:function_tag:name:content", + "execute:merge:game_event_tag:name:content", + "execute:merge:item_modifier:name:content", + "execute:merge:item_tag:name:content", + "execute:merge:language:name:content", + "execute:merge:loot_table:name:content", + "execute:merge:model:name:content", + "execute:merge:particle_file:name:content", + "execute:merge:predicate:name:content", + "execute:merge:recipe:name:content", + "execute:merge:shader:name:content", + "execute:merge:shader_post:name:content", + "execute:merge:texture_mcmeta:name:content", + "execute:merge:worldgen_biome:name:content", + "execute:merge:worldgen_biome_tag:name:content", + "execute:merge:worldgen_configured_carver:name:content", + "execute:merge:worldgen_configured_carver_tag:name:content", + "execute:merge:worldgen_configured_feature:name:content", + "execute:merge:worldgen_configured_structure_feature:name:content", + "execute:merge:worldgen_configured_structure_feature_tag:name:content", + "execute:merge:worldgen_configured_surface_builder:name:content", + "execute:merge:worldgen_density_function:name:content", + "execute:merge:worldgen_noise:name:content", + "execute:merge:worldgen_noise_settings:name:content", + "execute:merge:worldgen_placed_feature:name:content", + "execute:merge:worldgen_placed_feature_tag:name:content", + "execute:merge:worldgen_processor_list:name:content", + "execute:merge:worldgen_structure_set:name:content", + "execute:merge:worldgen_structure_set_tag:name:content", + "execute:merge:worldgen_template_pool:name:content", + "execute:model:name:content", + "execute:msg:targets:message", + "execute:op:targets", + "execute:pardon-ip:target", + "execute:pardon:targets", + "execute:particle:name", + "execute:particle:name:pos", + "execute:particle:name:pos:delta:speed:count", + "execute:particle:name:pos:delta:speed:count:force", + "execute:particle:name:pos:delta:speed:count:force:viewers", + "execute:particle:name:pos:delta:speed:count:normal", + "execute:particle:name:pos:delta:speed:count:normal:viewers", + "execute:particle_file:name:content", + "execute:perf:start", + "execute:perf:stop", + "execute:place:feature:feature", + "execute:place:feature:feature:pos", + "execute:place:jigsaw:pool:target:max_depth", + "execute:place:jigsaw:pool:target:max_depth:position", + "execute:place:structure:structure", + "execute:place:structure:structure:pos", + "execute:place:template:template", + "execute:place:template:template:pos", + "execute:place:template:template:pos:rotation", + "execute:place:template:template:pos:rotation:mirror", + "execute:place:template:template:pos:rotation:mirror:integrity", + "execute:place:template:template:pos:rotation:mirror:integrity:seed", + "execute:playsound:sound:ambient:targets", + "execute:playsound:sound:ambient:targets:pos", + "execute:playsound:sound:ambient:targets:pos:volume", + "execute:playsound:sound:ambient:targets:pos:volume:pitch", + "execute:playsound:sound:ambient:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:block:targets", + "execute:playsound:sound:block:targets:pos", + "execute:playsound:sound:block:targets:pos:volume", + "execute:playsound:sound:block:targets:pos:volume:pitch", + "execute:playsound:sound:block:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:hostile:targets", + "execute:playsound:sound:hostile:targets:pos", + "execute:playsound:sound:hostile:targets:pos:volume", + "execute:playsound:sound:hostile:targets:pos:volume:pitch", + "execute:playsound:sound:hostile:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:master:targets", + "execute:playsound:sound:master:targets:pos", + "execute:playsound:sound:master:targets:pos:volume", + "execute:playsound:sound:master:targets:pos:volume:pitch", + "execute:playsound:sound:master:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:music:targets", + "execute:playsound:sound:music:targets:pos", + "execute:playsound:sound:music:targets:pos:volume", + "execute:playsound:sound:music:targets:pos:volume:pitch", + "execute:playsound:sound:music:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:neutral:targets", + "execute:playsound:sound:neutral:targets:pos", + "execute:playsound:sound:neutral:targets:pos:volume", + "execute:playsound:sound:neutral:targets:pos:volume:pitch", + "execute:playsound:sound:neutral:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:player:targets", + "execute:playsound:sound:player:targets:pos", + "execute:playsound:sound:player:targets:pos:volume", + "execute:playsound:sound:player:targets:pos:volume:pitch", + "execute:playsound:sound:player:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:record:targets", + "execute:playsound:sound:record:targets:pos", + "execute:playsound:sound:record:targets:pos:volume", + "execute:playsound:sound:record:targets:pos:volume:pitch", + "execute:playsound:sound:record:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:voice:targets", + "execute:playsound:sound:voice:targets:pos", + "execute:playsound:sound:voice:targets:pos:volume", + "execute:playsound:sound:voice:targets:pos:volume:pitch", + "execute:playsound:sound:voice:targets:pos:volume:pitch:minVolume", + "execute:playsound:sound:weather:targets", + "execute:playsound:sound:weather:targets:pos", + "execute:playsound:sound:weather:targets:pos:volume", + "execute:playsound:sound:weather:targets:pos:volume:pitch", + "execute:playsound:sound:weather:targets:pos:volume:pitch:minVolume", + "execute:positioned:as:targets:subcommand", + "execute:positioned:pos:subcommand", + "execute:predicate:name:content", + "execute:prepend:block_tag:name:content", + "execute:prepend:entity_type_tag:name:content", + "execute:prepend:fluid_tag:name:content", + "execute:prepend:function:name:commands", + "execute:prepend:function_tag:name:content", + "execute:prepend:game_event_tag:name:content", + "execute:prepend:item_tag:name:content", + "execute:prepend:worldgen_biome_tag:name:content", + "execute:prepend:worldgen_configured_carver_tag:name:content", + "execute:prepend:worldgen_configured_structure_feature_tag:name:content", + "execute:prepend:worldgen_placed_feature_tag:name:content", + "execute:prepend:worldgen_structure_set_tag:name:content", + "execute:publish:port", + "execute:recipe:give:targets:*", + "execute:recipe:give:targets:recipe", + "execute:recipe:name:content", + "execute:recipe:take:targets:*", + "execute:recipe:take:targets:recipe", + "execute:rotated:as:targets:subcommand", + "execute:rotated:rot:subcommand", + "execute:run:subcommand", + "execute:save-all:flush", + "execute:say:message", + "execute:schedule:clear:function", + "execute:schedule:function:function:time", + "execute:schedule:function:function:time:append", + "execute:schedule:function:function:time:append:commands", + "execute:schedule:function:function:time:commands", + "execute:schedule:function:function:time:replace", + "execute:schedule:function:function:time:replace:commands", + "execute:scoreboard:objectives:add:objective:criteria", + "execute:scoreboard:objectives:add:objective:criteria:displayName", + "execute:scoreboard:objectives:list", + "execute:scoreboard:objectives:modify:objective:displayname:displayName", + "execute:scoreboard:objectives:modify:objective:rendertype:hearts", + "execute:scoreboard:objectives:modify:objective:rendertype:integer", + "execute:scoreboard:objectives:remove:objective", + "execute:scoreboard:objectives:setdisplay:slot", + "execute:scoreboard:objectives:setdisplay:slot:objective", + "execute:scoreboard:players:add:targets:objective:score", + "execute:scoreboard:players:enable:targets:objective", + "execute:scoreboard:players:get:target:objective", + "execute:scoreboard:players:list", + "execute:scoreboard:players:list:target", + "execute:scoreboard:players:operation:targets:targetObjective:operation:source:sourceObjective", + "execute:scoreboard:players:remove:targets:objective:score", + "execute:scoreboard:players:reset:targets", + "execute:scoreboard:players:reset:targets:objective", + "execute:scoreboard:players:set:targets:objective:score", + "execute:setblock:pos:block", + "execute:setblock:pos:block:destroy", + "execute:setblock:pos:block:keep", + "execute:setblock:pos:block:replace", + "execute:setidletimeout:minutes", + "execute:setworldspawn:pos", + "execute:setworldspawn:pos:angle", + "execute:shader:name:content", + "execute:shader_post:name:content", + "execute:spawnpoint:targets", + "execute:spawnpoint:targets:pos", + "execute:spawnpoint:targets:pos:angle", + "execute:spectate:target", + "execute:spectate:target:player", + "execute:spreadplayers:center:spreadDistance:maxRange:respectTeams:targets", + "execute:spreadplayers:center:spreadDistance:maxRange:under:maxHeight:respectTeams:targets", + "execute:stopsound:targets", + "execute:stopsound:targets:*:sound", + "execute:stopsound:targets:ambient", + "execute:stopsound:targets:ambient:sound", + "execute:stopsound:targets:block", + "execute:stopsound:targets:block:sound", + "execute:stopsound:targets:hostile", + "execute:stopsound:targets:hostile:sound", + "execute:stopsound:targets:master", + "execute:stopsound:targets:master:sound", + "execute:stopsound:targets:music", + "execute:stopsound:targets:music:sound", + "execute:stopsound:targets:neutral", + "execute:stopsound:targets:neutral:sound", + "execute:stopsound:targets:player", + "execute:stopsound:targets:player:sound", + "execute:stopsound:targets:record", + "execute:stopsound:targets:record:sound", + "execute:stopsound:targets:voice", + "execute:stopsound:targets:voice:sound", + "execute:stopsound:targets:weather", + "execute:stopsound:targets:weather:sound", + "execute:store:result:block:targetPos:path:byte:scale:subcommand", + "execute:store:result:block:targetPos:path:double:scale:subcommand", + "execute:store:result:block:targetPos:path:float:scale:subcommand", + "execute:store:result:block:targetPos:path:int:scale:subcommand", + "execute:store:result:block:targetPos:path:long:scale:subcommand", + "execute:store:result:block:targetPos:path:short:scale:subcommand", + "execute:store:result:bossbar:id:max:subcommand", + "execute:store:result:bossbar:id:value:subcommand", + "execute:store:result:entity:target:path:byte:scale:subcommand", + "execute:store:result:entity:target:path:double:scale:subcommand", + "execute:store:result:entity:target:path:float:scale:subcommand", + "execute:store:result:entity:target:path:int:scale:subcommand", + "execute:store:result:entity:target:path:long:scale:subcommand", + "execute:store:result:entity:target:path:short:scale:subcommand", + "execute:store:result:score:targets:objective:subcommand", + "execute:store:result:storage:target:path:byte:scale:subcommand", + "execute:store:result:storage:target:path:double:scale:subcommand", + "execute:store:result:storage:target:path:float:scale:subcommand", + "execute:store:result:storage:target:path:int:scale:subcommand", + "execute:store:result:storage:target:path:long:scale:subcommand", + "execute:store:result:storage:target:path:short:scale:subcommand", + "execute:store:success:block:targetPos:path:byte:scale:subcommand", + "execute:store:success:block:targetPos:path:double:scale:subcommand", + "execute:store:success:block:targetPos:path:float:scale:subcommand", + "execute:store:success:block:targetPos:path:int:scale:subcommand", + "execute:store:success:block:targetPos:path:long:scale:subcommand", + "execute:store:success:block:targetPos:path:short:scale:subcommand", + "execute:store:success:bossbar:id:max:subcommand", + "execute:store:success:bossbar:id:value:subcommand", + "execute:store:success:entity:target:path:byte:scale:subcommand", + "execute:store:success:entity:target:path:double:scale:subcommand", + "execute:store:success:entity:target:path:float:scale:subcommand", + "execute:store:success:entity:target:path:int:scale:subcommand", + "execute:store:success:entity:target:path:long:scale:subcommand", + "execute:store:success:entity:target:path:short:scale:subcommand", + "execute:store:success:score:targets:objective:subcommand", + "execute:store:success:storage:target:path:byte:scale:subcommand", + "execute:store:success:storage:target:path:double:scale:subcommand", + "execute:store:success:storage:target:path:float:scale:subcommand", + "execute:store:success:storage:target:path:int:scale:subcommand", + "execute:store:success:storage:target:path:long:scale:subcommand", + "execute:store:success:storage:target:path:short:scale:subcommand", + "execute:subcommand", + "execute:summon:entity", + "execute:summon:entity:pos", + "execute:summon:entity:pos:nbt", + "execute:tag:targets:add:name", + "execute:tag:targets:list", + "execute:tag:targets:remove:name", + "execute:team:add:team", + "execute:team:add:team:displayName", + "execute:team:empty:team", + "execute:team:join:team", + "execute:team:join:team:members", + "execute:team:leave:members", + "execute:team:list", + "execute:team:list:team", + "execute:team:modify:team:collisionRule:always", + "execute:team:modify:team:collisionRule:never", + "execute:team:modify:team:collisionRule:pushOtherTeams", + "execute:team:modify:team:collisionRule:pushOwnTeam", + "execute:team:modify:team:color:value", + "execute:team:modify:team:deathMessageVisibility:always", + "execute:team:modify:team:deathMessageVisibility:hideForOtherTeams", + "execute:team:modify:team:deathMessageVisibility:hideForOwnTeam", + "execute:team:modify:team:deathMessageVisibility:never", + "execute:team:modify:team:displayName:displayName", + "execute:team:modify:team:friendlyFire:allowed", + "execute:team:modify:team:nametagVisibility:always", + "execute:team:modify:team:nametagVisibility:hideForOtherTeams", + "execute:team:modify:team:nametagVisibility:hideForOwnTeam", + "execute:team:modify:team:nametagVisibility:never", + "execute:team:modify:team:prefix:prefix", + "execute:team:modify:team:seeFriendlyInvisibles:allowed", + "execute:team:modify:team:suffix:suffix", + "execute:team:remove:team", + "execute:teammsg:message", + "execute:teleport:destination", + "execute:teleport:location", + "execute:teleport:targets:destination", + "execute:teleport:targets:location", + "execute:teleport:targets:location:facing:entity:facingEntity", + "execute:teleport:targets:location:facing:entity:facingEntity:facingAnchor", + "execute:teleport:targets:location:facing:facingLocation", + "execute:teleport:targets:location:rotation", + "execute:tell:targets:message", + "execute:tellraw:targets:message", + "execute:texture_mcmeta:name:content", + "execute:time:add:time", + "execute:time:query:day", + "execute:time:query:daytime", + "execute:time:query:gametime", + "execute:time:set:day", + "execute:time:set:midnight", + "execute:time:set:night", + "execute:time:set:noon", + "execute:time:set:time", + "execute:title:targets:actionbar:title", + "execute:title:targets:clear", + "execute:title:targets:reset", + "execute:title:targets:subtitle:title", + "execute:title:targets:times:fadeIn:stay:fadeOut", + "execute:title:targets:title:title", + "execute:tm:message", + "execute:tp:destination", + "execute:tp:location", + "execute:tp:targets:destination", + "execute:tp:targets:location", + "execute:tp:targets:location:facing:entity:facingEntity", + "execute:tp:targets:location:facing:entity:facingEntity:facingAnchor", + "execute:tp:targets:location:facing:facingLocation", + "execute:tp:targets:location:rotation", + "execute:trigger:objective", + "execute:trigger:objective:add:value", + "execute:trigger:objective:set:value", + "execute:unless:block:pos:block", + "execute:unless:block:pos:block:subcommand", + "execute:unless:blocks:start:end:destination:all", + "execute:unless:blocks:start:end:destination:all:subcommand", + "execute:unless:blocks:start:end:destination:masked", + "execute:unless:blocks:start:end:destination:masked:subcommand", + "execute:unless:data:block:sourcePos:path", + "execute:unless:data:block:sourcePos:path:subcommand", + "execute:unless:data:entity:source:path", + "execute:unless:data:entity:source:path:subcommand", + "execute:unless:data:storage:source:path", + "execute:unless:data:storage:source:path:subcommand", + "execute:unless:entity:entities", + "execute:unless:entity:entities:subcommand", + "execute:unless:predicate:predicate", + "execute:unless:predicate:predicate:subcommand", + "execute:unless:score:target:targetObjective:<:source:sourceObjective", + "execute:unless:score:target:targetObjective:<:source:sourceObjective:subcommand", + "execute:unless:score:target:targetObjective:<=:source:sourceObjective", + "execute:unless:score:target:targetObjective:<=:source:sourceObjective:subcommand", + "execute:unless:score:target:targetObjective:=:source:sourceObjective", + "execute:unless:score:target:targetObjective:=:source:sourceObjective:subcommand", + "execute:unless:score:target:targetObjective:>:source:sourceObjective", + "execute:unless:score:target:targetObjective:>:source:sourceObjective:subcommand", + "execute:unless:score:target:targetObjective:>=:source:sourceObjective", + "execute:unless:score:target:targetObjective:>=:source:sourceObjective:subcommand", + "execute:unless:score:target:targetObjective:matches:range", + "execute:unless:score:target:targetObjective:matches:range:subcommand", + "execute:w:targets:message", + "execute:weather:clear", + "execute:weather:clear:duration", + "execute:weather:rain", + "execute:weather:rain:duration", + "execute:weather:thunder", + "execute:weather:thunder:duration", + "execute:whitelist:add:targets", + "execute:whitelist:list", + "execute:whitelist:off", + "execute:whitelist:on", + "execute:whitelist:reload", + "execute:whitelist:remove:targets", + "execute:worldborder:add:distance", + "execute:worldborder:add:distance:time", + "execute:worldborder:center:pos", + "execute:worldborder:damage:amount:damagePerBlock", + "execute:worldborder:damage:buffer:distance", + "execute:worldborder:get", + "execute:worldborder:set:distance", + "execute:worldborder:set:distance:time", + "execute:worldborder:warning:distance:distance", + "execute:worldborder:warning:time:time", + "execute:worldgen_biome:name:content", + "execute:worldgen_biome_tag:name:content", + "execute:worldgen_configured_carver:name:content", + "execute:worldgen_configured_carver_tag:name:content", + "execute:worldgen_configured_feature:name:content", + "execute:worldgen_configured_structure_feature:name:content", + "execute:worldgen_configured_structure_feature_tag:name:content", + "execute:worldgen_configured_surface_builder:name:content", + "execute:worldgen_density_function:name:content", + "execute:worldgen_noise:name:content", + "execute:worldgen_noise_settings:name:content", + "execute:worldgen_placed_feature:name:content", + "execute:worldgen_placed_feature_tag:name:content", + "execute:worldgen_processor_list:name:content", + "execute:worldgen_structure_set:name:content", + "execute:worldgen_structure_set_tag:name:content", + "execute:worldgen_template_pool:name:content", + "execute:xp:add:targets:amount", + "execute:xp:add:targets:amount:levels", + "execute:xp:add:targets:amount:points", + "execute:xp:query:targets:levels", + "execute:xp:query:targets:points", + "execute:xp:set:targets:amount", + "execute:xp:set:targets:amount:levels", + "execute:xp:set:targets:amount:points", + "expand:commands", + "experience:add:targets:amount", + "experience:add:targets:amount:levels", + "experience:add:targets:amount:points", + "experience:query:targets:levels", + "experience:query:targets:points", + "experience:set:targets:amount", + "experience:set:targets:amount:levels", + "experience:set:targets:amount:points", + "facing:entity:targets:anchor:subcommand", + "facing:pos:subcommand", + "fill:from:to:block", + "fill:from:to:block:destroy", + "fill:from:to:block:hollow", + "fill:from:to:block:keep", + "fill:from:to:block:outline", + "fill:from:to:block:replace", + "fill:from:to:block:replace:filter", + "fluid_tag:name:content", + "font:name:content", + "for:target:in:iterable:body", + "forceload:add:from", + "forceload:add:from:to", + "forceload:query", + "forceload:query:pos", + "forceload:remove:all", + "forceload:remove:from", + "forceload:remove:from:to", + "from:module:import:name", + "from:module:import:name:subcommand", + "from:module:import:subcommand", + "function:name", + "function:name:commands", + "function:tag:name", + "function_tag:name:content", + "game_event_tag:name:content", + "gamemode:adventure", + "gamemode:adventure:target", + "gamemode:creative", + "gamemode:creative:target", + "gamemode:spectator", + "gamemode:spectator:target", + "gamemode:survival", + "gamemode:survival:target", + "gamerule:announceAdvancements", + "gamerule:announceAdvancements:value", + "gamerule:commandBlockOutput", + "gamerule:commandBlockOutput:value", + "gamerule:disableElytraMovementCheck", + "gamerule:disableElytraMovementCheck:value", + "gamerule:disableRaids", + "gamerule:disableRaids:value", + "gamerule:doDaylightCycle", + "gamerule:doDaylightCycle:value", + "gamerule:doEntityDrops", + "gamerule:doEntityDrops:value", + "gamerule:doFireTick", + "gamerule:doFireTick:value", + "gamerule:doImmediateRespawn", + "gamerule:doImmediateRespawn:value", + "gamerule:doInsomnia", + "gamerule:doInsomnia:value", + "gamerule:doLimitedCrafting", + "gamerule:doLimitedCrafting:value", + "gamerule:doMobLoot", + "gamerule:doMobLoot:value", + "gamerule:doMobSpawning", + "gamerule:doMobSpawning:value", + "gamerule:doPatrolSpawning", + "gamerule:doPatrolSpawning:value", + "gamerule:doTileDrops", + "gamerule:doTileDrops:value", + "gamerule:doTraderSpawning", + "gamerule:doTraderSpawning:value", + "gamerule:doWardenSpawning", + "gamerule:doWardenSpawning:value", + "gamerule:doWeatherCycle", + "gamerule:doWeatherCycle:value", + "gamerule:drowningDamage", + "gamerule:drowningDamage:value", + "gamerule:fallDamage", + "gamerule:fallDamage:value", + "gamerule:fireDamage", + "gamerule:fireDamage:value", + "gamerule:forgiveDeadPlayers", + "gamerule:forgiveDeadPlayers:value", + "gamerule:freezeDamage", + "gamerule:freezeDamage:value", + "gamerule:keepInventory", + "gamerule:keepInventory:value", + "gamerule:logAdminCommands", + "gamerule:logAdminCommands:value", + "gamerule:maxCommandChainLength", + "gamerule:maxCommandChainLength:value", + "gamerule:maxEntityCramming", + "gamerule:maxEntityCramming:value", + "gamerule:mobGriefing", + "gamerule:mobGriefing:value", + "gamerule:naturalRegeneration", + "gamerule:naturalRegeneration:value", + "gamerule:playersSleepingPercentage", + "gamerule:playersSleepingPercentage:value", + "gamerule:randomTickSpeed", + "gamerule:randomTickSpeed:value", + "gamerule:reducedDebugInfo", + "gamerule:reducedDebugInfo:value", + "gamerule:sendCommandFeedback", + "gamerule:sendCommandFeedback:value", + "gamerule:showDeathMessages", + "gamerule:showDeathMessages:value", + "gamerule:spawnRadius", + "gamerule:spawnRadius:value", + "gamerule:spectatorsGenerateChunks", + "gamerule:spectatorsGenerateChunks:value", + "gamerule:universalAnger", + "gamerule:universalAnger:value", + "give:targets:item", + "give:targets:item:count", + "global:name", + "global:name:subcommand", + "global:subcommand", + "help", + "help:command", + "if:block:pos:block", + "if:block:pos:block:subcommand", + "if:blocks:start:end:destination:all", + "if:blocks:start:end:destination:all:subcommand", + "if:blocks:start:end:destination:masked", + "if:blocks:start:end:destination:masked:subcommand", + "if:condition:body", + "if:data:block:sourcePos:path", + "if:data:block:sourcePos:path:subcommand", + "if:data:entity:source:path", + "if:data:entity:source:path:subcommand", + "if:data:storage:source:path", + "if:data:storage:source:path:subcommand", + "if:entity:entities", + "if:entity:entities:subcommand", + "if:predicate:predicate", + "if:predicate:predicate:subcommand", + "if:score:target:targetObjective:<:source:sourceObjective", + "if:score:target:targetObjective:<:source:sourceObjective:subcommand", + "if:score:target:targetObjective:<=:source:sourceObjective", + "if:score:target:targetObjective:<=:source:sourceObjective:subcommand", + "if:score:target:targetObjective:=:source:sourceObjective", + "if:score:target:targetObjective:=:source:sourceObjective:subcommand", + "if:score:target:targetObjective:>:source:sourceObjective", + "if:score:target:targetObjective:>:source:sourceObjective:subcommand", + "if:score:target:targetObjective:>=:source:sourceObjective", + "if:score:target:targetObjective:>=:source:sourceObjective:subcommand", + "if:score:target:targetObjective:matches:range", + "if:score:target:targetObjective:matches:range:subcommand", + "import:module", + "import:module:as:alias", + "in:dimension:subcommand", + "item:modify:block:pos:slot:modifier", + "item:modify:entity:targets:slot:modifier", + "item:replace:block:pos:slot:from:block:source:sourceSlot", + "item:replace:block:pos:slot:from:block:source:sourceSlot:modifier", + "item:replace:block:pos:slot:from:entity:source:sourceSlot", + "item:replace:block:pos:slot:from:entity:source:sourceSlot:modifier", + "item:replace:block:pos:slot:with:item", + "item:replace:block:pos:slot:with:item:count", + "item:replace:entity:targets:slot:from:block:source:sourceSlot", + "item:replace:entity:targets:slot:from:block:source:sourceSlot:modifier", + "item:replace:entity:targets:slot:from:entity:source:sourceSlot", + "item:replace:entity:targets:slot:from:entity:source:sourceSlot:modifier", + "item:replace:entity:targets:slot:with:item", + "item:replace:entity:targets:slot:with:item:count", + "item_modifier:name:content", + "item_tag:name:content", + "jfr:start", + "jfr:stop", + "kick:targets", + "kick:targets:reason", + "kill", + "kill:targets", + "language:name:content", + "list", + "list:uuids", + "locate:biome:biome", + "locate:poi:poi", + "locate:structure:structure", + "loot:give:players:fish:loot_table:pos", + "loot:give:players:fish:loot_table:pos:mainhand", + "loot:give:players:fish:loot_table:pos:offhand", + "loot:give:players:fish:loot_table:pos:tool", + "loot:give:players:kill:target", + "loot:give:players:loot:loot_table", + "loot:give:players:mine:pos", + "loot:give:players:mine:pos:mainhand", + "loot:give:players:mine:pos:offhand", + "loot:give:players:mine:pos:tool", + "loot:insert:targetPos:fish:loot_table:pos", + "loot:insert:targetPos:fish:loot_table:pos:mainhand", + "loot:insert:targetPos:fish:loot_table:pos:offhand", + "loot:insert:targetPos:fish:loot_table:pos:tool", + "loot:insert:targetPos:kill:target", + "loot:insert:targetPos:loot:loot_table", + "loot:insert:targetPos:mine:pos", + "loot:insert:targetPos:mine:pos:mainhand", + "loot:insert:targetPos:mine:pos:offhand", + "loot:insert:targetPos:mine:pos:tool", + "loot:replace:block:targetPos:slot:count:fish:loot_table:pos", + "loot:replace:block:targetPos:slot:count:fish:loot_table:pos:mainhand", + "loot:replace:block:targetPos:slot:count:fish:loot_table:pos:offhand", + "loot:replace:block:targetPos:slot:count:fish:loot_table:pos:tool", + "loot:replace:block:targetPos:slot:count:kill:target", + "loot:replace:block:targetPos:slot:count:loot:loot_table", + "loot:replace:block:targetPos:slot:count:mine:pos", + "loot:replace:block:targetPos:slot:count:mine:pos:mainhand", + "loot:replace:block:targetPos:slot:count:mine:pos:offhand", + "loot:replace:block:targetPos:slot:count:mine:pos:tool", + "loot:replace:block:targetPos:slot:fish:loot_table:pos", + "loot:replace:block:targetPos:slot:fish:loot_table:pos:mainhand", + "loot:replace:block:targetPos:slot:fish:loot_table:pos:offhand", + "loot:replace:block:targetPos:slot:fish:loot_table:pos:tool", + "loot:replace:block:targetPos:slot:kill:target", + "loot:replace:block:targetPos:slot:loot:loot_table", + "loot:replace:block:targetPos:slot:mine:pos", + "loot:replace:block:targetPos:slot:mine:pos:mainhand", + "loot:replace:block:targetPos:slot:mine:pos:offhand", + "loot:replace:block:targetPos:slot:mine:pos:tool", + "loot:replace:entity:entities:slot:count:fish:loot_table:pos", + "loot:replace:entity:entities:slot:count:fish:loot_table:pos:mainhand", + "loot:replace:entity:entities:slot:count:fish:loot_table:pos:offhand", + "loot:replace:entity:entities:slot:count:fish:loot_table:pos:tool", + "loot:replace:entity:entities:slot:count:kill:target", + "loot:replace:entity:entities:slot:count:loot:loot_table", + "loot:replace:entity:entities:slot:count:mine:pos", + "loot:replace:entity:entities:slot:count:mine:pos:mainhand", + "loot:replace:entity:entities:slot:count:mine:pos:offhand", + "loot:replace:entity:entities:slot:count:mine:pos:tool", + "loot:replace:entity:entities:slot:fish:loot_table:pos", + "loot:replace:entity:entities:slot:fish:loot_table:pos:mainhand", + "loot:replace:entity:entities:slot:fish:loot_table:pos:offhand", + "loot:replace:entity:entities:slot:fish:loot_table:pos:tool", + "loot:replace:entity:entities:slot:kill:target", + "loot:replace:entity:entities:slot:loot:loot_table", + "loot:replace:entity:entities:slot:mine:pos", + "loot:replace:entity:entities:slot:mine:pos:mainhand", + "loot:replace:entity:entities:slot:mine:pos:offhand", + "loot:replace:entity:entities:slot:mine:pos:tool", + "loot:spawn:targetPos:fish:loot_table:pos", + "loot:spawn:targetPos:fish:loot_table:pos:mainhand", + "loot:spawn:targetPos:fish:loot_table:pos:offhand", + "loot:spawn:targetPos:fish:loot_table:pos:tool", + "loot:spawn:targetPos:kill:target", + "loot:spawn:targetPos:loot:loot_table", + "loot:spawn:targetPos:mine:pos", + "loot:spawn:targetPos:mine:pos:mainhand", + "loot:spawn:targetPos:mine:pos:offhand", + "loot:spawn:targetPos:mine:pos:tool", + "loot_table:name:content", + "me:action", + "merge:advancement:name:content", + "merge:block_tag:name:content", + "merge:blockstate:name:content", + "merge:dimension:name:content", + "merge:dimension_type:name:content", + "merge:entity_type_tag:name:content", + "merge:fluid_tag:name:content", + "merge:font:name:content", + "merge:function_tag:name:content", + "merge:game_event_tag:name:content", + "merge:item_modifier:name:content", + "merge:item_tag:name:content", + "merge:language:name:content", + "merge:loot_table:name:content", + "merge:model:name:content", + "merge:particle_file:name:content", + "merge:predicate:name:content", + "merge:recipe:name:content", + "merge:shader:name:content", + "merge:shader_post:name:content", + "merge:texture_mcmeta:name:content", + "merge:worldgen_biome:name:content", + "merge:worldgen_biome_tag:name:content", + "merge:worldgen_configured_carver:name:content", + "merge:worldgen_configured_carver_tag:name:content", + "merge:worldgen_configured_feature:name:content", + "merge:worldgen_configured_structure_feature:name:content", + "merge:worldgen_configured_structure_feature_tag:name:content", + "merge:worldgen_configured_surface_builder:name:content", + "merge:worldgen_density_function:name:content", + "merge:worldgen_noise:name:content", + "merge:worldgen_noise_settings:name:content", + "merge:worldgen_placed_feature:name:content", + "merge:worldgen_placed_feature_tag:name:content", + "merge:worldgen_processor_list:name:content", + "merge:worldgen_structure_set:name:content", + "merge:worldgen_structure_set_tag:name:content", + "merge:worldgen_template_pool:name:content", + "model:name:content", + "msg:targets:message", + "nonlocal:name", + "nonlocal:name:subcommand", + "nonlocal:subcommand", + "op:targets", + "pardon-ip:target", + "pardon:targets", + "particle:name", + "particle:name:pos", + "particle:name:pos:delta:speed:count", + "particle:name:pos:delta:speed:count:force", + "particle:name:pos:delta:speed:count:force:viewers", + "particle:name:pos:delta:speed:count:normal", + "particle:name:pos:delta:speed:count:normal:viewers", + "particle_file:name:content", + "pass", + "perf:start", + "perf:stop", + "place:feature:feature", + "place:feature:feature:pos", + "place:jigsaw:pool:target:max_depth", + "place:jigsaw:pool:target:max_depth:position", + "place:structure:structure", + "place:structure:structure:pos", + "place:template:template", + "place:template:template:pos", + "place:template:template:pos:rotation", + "place:template:template:pos:rotation:mirror", + "place:template:template:pos:rotation:mirror:integrity", + "place:template:template:pos:rotation:mirror:integrity:seed", + "playsound:sound:ambient:targets", + "playsound:sound:ambient:targets:pos", + "playsound:sound:ambient:targets:pos:volume", + "playsound:sound:ambient:targets:pos:volume:pitch", + "playsound:sound:ambient:targets:pos:volume:pitch:minVolume", + "playsound:sound:block:targets", + "playsound:sound:block:targets:pos", + "playsound:sound:block:targets:pos:volume", + "playsound:sound:block:targets:pos:volume:pitch", + "playsound:sound:block:targets:pos:volume:pitch:minVolume", + "playsound:sound:hostile:targets", + "playsound:sound:hostile:targets:pos", + "playsound:sound:hostile:targets:pos:volume", + "playsound:sound:hostile:targets:pos:volume:pitch", + "playsound:sound:hostile:targets:pos:volume:pitch:minVolume", + "playsound:sound:master:targets", + "playsound:sound:master:targets:pos", + "playsound:sound:master:targets:pos:volume", + "playsound:sound:master:targets:pos:volume:pitch", + "playsound:sound:master:targets:pos:volume:pitch:minVolume", + "playsound:sound:music:targets", + "playsound:sound:music:targets:pos", + "playsound:sound:music:targets:pos:volume", + "playsound:sound:music:targets:pos:volume:pitch", + "playsound:sound:music:targets:pos:volume:pitch:minVolume", + "playsound:sound:neutral:targets", + "playsound:sound:neutral:targets:pos", + "playsound:sound:neutral:targets:pos:volume", + "playsound:sound:neutral:targets:pos:volume:pitch", + "playsound:sound:neutral:targets:pos:volume:pitch:minVolume", + "playsound:sound:player:targets", + "playsound:sound:player:targets:pos", + "playsound:sound:player:targets:pos:volume", + "playsound:sound:player:targets:pos:volume:pitch", + "playsound:sound:player:targets:pos:volume:pitch:minVolume", + "playsound:sound:record:targets", + "playsound:sound:record:targets:pos", + "playsound:sound:record:targets:pos:volume", + "playsound:sound:record:targets:pos:volume:pitch", + "playsound:sound:record:targets:pos:volume:pitch:minVolume", + "playsound:sound:voice:targets", + "playsound:sound:voice:targets:pos", + "playsound:sound:voice:targets:pos:volume", + "playsound:sound:voice:targets:pos:volume:pitch", + "playsound:sound:voice:targets:pos:volume:pitch:minVolume", + "playsound:sound:weather:targets", + "playsound:sound:weather:targets:pos", + "playsound:sound:weather:targets:pos:volume", + "playsound:sound:weather:targets:pos:volume:pitch", + "playsound:sound:weather:targets:pos:volume:pitch:minVolume", + "positioned:as:targets:subcommand", + "positioned:pos:subcommand", + "predicate:name:content", + "prepend:block_tag:name:content", + "prepend:entity_type_tag:name:content", + "prepend:fluid_tag:name:content", + "prepend:function:name:commands", + "prepend:function_tag:name:content", + "prepend:game_event_tag:name:content", + "prepend:item_tag:name:content", + "prepend:worldgen_biome_tag:name:content", + "prepend:worldgen_configured_carver_tag:name:content", + "prepend:worldgen_configured_structure_feature_tag:name:content", + "prepend:worldgen_placed_feature_tag:name:content", + "prepend:worldgen_structure_set_tag:name:content", + "publish", + "publish:port", + "recipe:give:targets:*", + "recipe:give:targets:recipe", + "recipe:name:content", + "recipe:take:targets:*", + "recipe:take:targets:recipe", + "reload", + "return", + "return:value", + "rotated:as:targets:subcommand", + "rotated:rot:subcommand", + "save-all", + "save-all:flush", + "save-off", + "save-on", + "say:message", + "schedule:clear:function", + "schedule:function:function:time", + "schedule:function:function:time:append", + "schedule:function:function:time:append:commands", + "schedule:function:function:time:commands", + "schedule:function:function:time:replace", + "schedule:function:function:time:replace:commands", + "scoreboard:objectives:add:objective:criteria", + "scoreboard:objectives:add:objective:criteria:displayName", + "scoreboard:objectives:list", + "scoreboard:objectives:modify:objective:displayname:displayName", + "scoreboard:objectives:modify:objective:rendertype:hearts", + "scoreboard:objectives:modify:objective:rendertype:integer", + "scoreboard:objectives:remove:objective", + "scoreboard:objectives:setdisplay:slot", + "scoreboard:objectives:setdisplay:slot:objective", + "scoreboard:players:add:targets:objective:score", + "scoreboard:players:enable:targets:objective", + "scoreboard:players:get:target:objective", + "scoreboard:players:list", + "scoreboard:players:list:target", + "scoreboard:players:operation:targets:targetObjective:operation:source:sourceObjective", + "scoreboard:players:remove:targets:objective:score", + "scoreboard:players:reset:targets", + "scoreboard:players:reset:targets:objective", + "scoreboard:players:set:targets:objective:score", + "seed", + "setblock:pos:block", + "setblock:pos:block:destroy", + "setblock:pos:block:keep", + "setblock:pos:block:replace", + "setidletimeout:minutes", + "setworldspawn", + "setworldspawn:pos", + "setworldspawn:pos:angle", + "shader:name:content", + "shader_post:name:content", + "spawnpoint", + "spawnpoint:targets", + "spawnpoint:targets:pos", + "spawnpoint:targets:pos:angle", + "spectate", + "spectate:target", + "spectate:target:player", + "spreadplayers:center:spreadDistance:maxRange:respectTeams:targets", + "spreadplayers:center:spreadDistance:maxRange:under:maxHeight:respectTeams:targets", + "statement", + "stop", + "stopsound:targets", + "stopsound:targets:*:sound", + "stopsound:targets:ambient", + "stopsound:targets:ambient:sound", + "stopsound:targets:block", + "stopsound:targets:block:sound", + "stopsound:targets:hostile", + "stopsound:targets:hostile:sound", + "stopsound:targets:master", + "stopsound:targets:master:sound", + "stopsound:targets:music", + "stopsound:targets:music:sound", + "stopsound:targets:neutral", + "stopsound:targets:neutral:sound", + "stopsound:targets:player", + "stopsound:targets:player:sound", + "stopsound:targets:record", + "stopsound:targets:record:sound", + "stopsound:targets:voice", + "stopsound:targets:voice:sound", + "stopsound:targets:weather", + "stopsound:targets:weather:sound", + "store:result:block:targetPos:path:byte:scale:subcommand", + "store:result:block:targetPos:path:double:scale:subcommand", + "store:result:block:targetPos:path:float:scale:subcommand", + "store:result:block:targetPos:path:int:scale:subcommand", + "store:result:block:targetPos:path:long:scale:subcommand", + "store:result:block:targetPos:path:short:scale:subcommand", + "store:result:bossbar:id:max:subcommand", + "store:result:bossbar:id:value:subcommand", + "store:result:entity:target:path:byte:scale:subcommand", + "store:result:entity:target:path:double:scale:subcommand", + "store:result:entity:target:path:float:scale:subcommand", + "store:result:entity:target:path:int:scale:subcommand", + "store:result:entity:target:path:long:scale:subcommand", + "store:result:entity:target:path:short:scale:subcommand", + "store:result:score:targets:objective:subcommand", + "store:result:storage:target:path:byte:scale:subcommand", + "store:result:storage:target:path:double:scale:subcommand", + "store:result:storage:target:path:float:scale:subcommand", + "store:result:storage:target:path:int:scale:subcommand", + "store:result:storage:target:path:long:scale:subcommand", + "store:result:storage:target:path:short:scale:subcommand", + "store:success:block:targetPos:path:byte:scale:subcommand", + "store:success:block:targetPos:path:double:scale:subcommand", + "store:success:block:targetPos:path:float:scale:subcommand", + "store:success:block:targetPos:path:int:scale:subcommand", + "store:success:block:targetPos:path:long:scale:subcommand", + "store:success:block:targetPos:path:short:scale:subcommand", + "store:success:bossbar:id:max:subcommand", + "store:success:bossbar:id:value:subcommand", + "store:success:entity:target:path:byte:scale:subcommand", + "store:success:entity:target:path:double:scale:subcommand", + "store:success:entity:target:path:float:scale:subcommand", + "store:success:entity:target:path:int:scale:subcommand", + "store:success:entity:target:path:long:scale:subcommand", + "store:success:entity:target:path:short:scale:subcommand", + "store:success:score:targets:objective:subcommand", + "store:success:storage:target:path:byte:scale:subcommand", + "store:success:storage:target:path:double:scale:subcommand", + "store:success:storage:target:path:float:scale:subcommand", + "store:success:storage:target:path:int:scale:subcommand", + "store:success:storage:target:path:long:scale:subcommand", + "store:success:storage:target:path:short:scale:subcommand", + "summon:entity", + "summon:entity:pos", + "summon:entity:pos:nbt", + "tag:targets:add:name", + "tag:targets:list", + "tag:targets:remove:name", + "team:add:team", + "team:add:team:displayName", + "team:empty:team", + "team:join:team", + "team:join:team:members", + "team:leave:members", + "team:list", + "team:list:team", + "team:modify:team:collisionRule:always", + "team:modify:team:collisionRule:never", + "team:modify:team:collisionRule:pushOtherTeams", + "team:modify:team:collisionRule:pushOwnTeam", + "team:modify:team:color:value", + "team:modify:team:deathMessageVisibility:always", + "team:modify:team:deathMessageVisibility:hideForOtherTeams", + "team:modify:team:deathMessageVisibility:hideForOwnTeam", + "team:modify:team:deathMessageVisibility:never", + "team:modify:team:displayName:displayName", + "team:modify:team:friendlyFire:allowed", + "team:modify:team:nametagVisibility:always", + "team:modify:team:nametagVisibility:hideForOtherTeams", + "team:modify:team:nametagVisibility:hideForOwnTeam", + "team:modify:team:nametagVisibility:never", + "team:modify:team:prefix:prefix", + "team:modify:team:seeFriendlyInvisibles:allowed", + "team:modify:team:suffix:suffix", + "team:remove:team", + "teammsg:message", + "teleport:destination", + "teleport:location", + "teleport:targets:destination", + "teleport:targets:location", + "teleport:targets:location:facing:entity:facingEntity", + "teleport:targets:location:facing:entity:facingEntity:facingAnchor", + "teleport:targets:location:facing:facingLocation", + "teleport:targets:location:rotation", + "tell:targets:message", + "tellraw:targets:message", + "texture_mcmeta:name:content", + "time:add:time", + "time:query:day", + "time:query:daytime", + "time:query:gametime", + "time:set:day", + "time:set:midnight", + "time:set:night", + "time:set:noon", + "time:set:time", + "title:targets:actionbar:title", + "title:targets:clear", + "title:targets:reset", + "title:targets:subtitle:title", + "title:targets:times:fadeIn:stay:fadeOut", + "title:targets:title:title", + "tm:message", + "tp:destination", + "tp:location", + "tp:targets:destination", + "tp:targets:location", + "tp:targets:location:facing:entity:facingEntity", + "tp:targets:location:facing:entity:facingEntity:facingAnchor", + "tp:targets:location:facing:facingLocation", + "tp:targets:location:rotation", + "trigger:objective", + "trigger:objective:add:value", + "trigger:objective:set:value", + "unless:block:pos:block", + "unless:block:pos:block:subcommand", + "unless:blocks:start:end:destination:all", + "unless:blocks:start:end:destination:all:subcommand", + "unless:blocks:start:end:destination:masked", + "unless:blocks:start:end:destination:masked:subcommand", + "unless:data:block:sourcePos:path", + "unless:data:block:sourcePos:path:subcommand", + "unless:data:entity:source:path", + "unless:data:entity:source:path:subcommand", + "unless:data:storage:source:path", + "unless:data:storage:source:path:subcommand", + "unless:entity:entities", + "unless:entity:entities:subcommand", + "unless:predicate:predicate", + "unless:predicate:predicate:subcommand", + "unless:score:target:targetObjective:<:source:sourceObjective", + "unless:score:target:targetObjective:<:source:sourceObjective:subcommand", + "unless:score:target:targetObjective:<=:source:sourceObjective", + "unless:score:target:targetObjective:<=:source:sourceObjective:subcommand", + "unless:score:target:targetObjective:=:source:sourceObjective", + "unless:score:target:targetObjective:=:source:sourceObjective:subcommand", + "unless:score:target:targetObjective:>:source:sourceObjective", + "unless:score:target:targetObjective:>:source:sourceObjective:subcommand", + "unless:score:target:targetObjective:>=:source:sourceObjective", + "unless:score:target:targetObjective:>=:source:sourceObjective:subcommand", + "unless:score:target:targetObjective:matches:range", + "unless:score:target:targetObjective:matches:range:subcommand", + "w:targets:message", + "weather:clear", + "weather:clear:duration", + "weather:rain", + "weather:rain:duration", + "weather:thunder", + "weather:thunder:duration", + "while:condition:body", + "whitelist:add:targets", + "whitelist:list", + "whitelist:off", + "whitelist:on", + "whitelist:reload", + "whitelist:remove:targets", + "with:expression:as:target:body", + "with:expression:as:target:subcommand", + "with:expression:body", + "with:expression:subcommand", + "with:subcommand", + "worldborder:add:distance", + "worldborder:add:distance:time", + "worldborder:center:pos", + "worldborder:damage:amount:damagePerBlock", + "worldborder:damage:buffer:distance", + "worldborder:get", + "worldborder:set:distance", + "worldborder:set:distance:time", + "worldborder:warning:distance:distance", + "worldborder:warning:time:time", + "worldgen_biome:name:content", + "worldgen_biome_tag:name:content", + "worldgen_configured_carver:name:content", + "worldgen_configured_carver_tag:name:content", + "worldgen_configured_feature:name:content", + "worldgen_configured_structure_feature:name:content", + "worldgen_configured_structure_feature_tag:name:content", + "worldgen_configured_surface_builder:name:content", + "worldgen_density_function:name:content", + "worldgen_noise:name:content", + "worldgen_noise_settings:name:content", + "worldgen_placed_feature:name:content", + "worldgen_placed_feature_tag:name:content", + "worldgen_processor_list:name:content", + "worldgen_structure_set:name:content", + "worldgen_structure_set_tag:name:content", + "worldgen_template_pool:name:content", + "xp:add:targets:amount", + "xp:add:targets:amount:levels", + "xp:add:targets:amount:points", + "xp:query:targets:levels", + "xp:query:targets:points", + "xp:set:targets:amount", + "xp:set:targets:amount:levels", + "xp:set:targets:amount:points", + "yield", + "yield:from:value", + "yield:value" +] diff --git a/tests/test_bolt.py b/tests/test_bolt.py index b285d90..f90e608 100644 --- a/tests/test_bolt.py +++ b/tests/test_bolt.py @@ -1,7 +1,7 @@ from pathlib import Path import pytest -from beet import Context, Function, run_beet +from beet import Context, Function from mecha import AstNode, CompilationDatabase, CompilationUnit, DiagnosticError, Mecha from mecha.contrib.annotate_diagnostics import annotate_diagnostics from pytest_insta import SnapshotFixture @@ -16,20 +16,14 @@ ] -@pytest.fixture(scope="session") -def ctx_bolt(): - with run_beet({"require": ["bolt"]}) as ctx: - yield ctx - - @pytest.mark.parametrize( "source", params := BOLT_EXAMPLES, ids=range(len(params)), ) -def test_parse(snapshot: SnapshotFixture, ctx_bolt: Context, source: Function): - mc = ctx_bolt.inject(Mecha) - runtime = ctx_bolt.inject(Runtime) +def test_parse(snapshot: SnapshotFixture, ctx: Context, source: Function): + mc = ctx.inject(Mecha) + runtime = ctx.inject(Runtime) ast = None diagnostics = None diff --git a/tests/test_sandbox.py b/tests/test_sandbox.py index f69442b..440633f 100644 --- a/tests/test_sandbox.py +++ b/tests/test_sandbox.py @@ -1,7 +1,7 @@ from pathlib import Path import pytest -from beet import Context, Function, run_beet +from beet import Context, Function from beet.core.utils import format_exc from mecha import CompilationError, DiagnosticError, Mecha from pytest_insta import SnapshotFixture @@ -14,12 +14,6 @@ ] -@pytest.fixture(scope="session") -def ctx_sandbox(): - with run_beet({"require": ["bolt.contrib.sandbox"]}) as ctx: - yield ctx - - @pytest.mark.parametrize( "source", params := SANDBOX_EXAMPLES, diff --git a/tests/test_spec.py b/tests/test_spec.py new file mode 100644 index 0000000..3a31307 --- /dev/null +++ b/tests/test_spec.py @@ -0,0 +1,8 @@ +from beet import Context +from mecha import Mecha +from pytest_insta import SnapshotFixture + + +def test_prototypes(snapshot: SnapshotFixture, ctx: Context): + mc = ctx.inject(Mecha) + assert snapshot("json") == list(sorted(mc.spec.prototypes))