minecraft-datapack-language 16.0.12__tar.gz → 16.0.14__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. {minecraft_datapack_language-16.0.12/minecraft_datapack_language.egg-info → minecraft_datapack_language-16.0.14}/PKG-INFO +1 -1
  2. minecraft_datapack_language-16.0.14/docs/_data/version.yml +3 -0
  3. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/downloads.md +3 -1
  4. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/_version.py +3 -3
  5. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/mdl_compiler.py +68 -22
  6. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/mdl_lexer.py +8 -0
  7. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14/minecraft_datapack_language.egg-info}/PKG-INFO +1 -1
  8. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/run_all_tests.py +37 -11
  9. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_compiler_fixes.py +12 -3
  10. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_examples.py +2 -2
  11. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_macros.py +2 -0
  12. minecraft_datapack_language-16.0.12/docs/_data/version.yml +0 -3
  13. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.cursor/rules/aispec.mdc +0 -0
  14. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.github/actions/mdl-compile/action.yml +0 -0
  15. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.github/workflows/ci.yml +0 -0
  16. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.github/workflows/docs.yml +0 -0
  17. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.github/workflows/pypi.yml +0 -0
  18. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.github/workflows/release.yml +0 -0
  19. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.github/workflows/update-website-version.yml +0 -0
  20. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.gitignore +0 -0
  21. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/minecraft/tags/function/load.json +0 -0
  22. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/test1/function/load.mcfunction +0 -0
  23. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/test1/function/load1.mcfunction +0 -0
  24. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/test1/function/main.mcfunction +0 -0
  25. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/test1/function/main__else_1.mcfunction +0 -0
  26. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/test1/function/main__if_1.mcfunction +0 -0
  27. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/test1/function/testfunc.mcfunction +0 -0
  28. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/data/test1/function/testfunc__while_1.mcfunction +0 -0
  29. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1/pack.mcmeta +0 -0
  30. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/minecraft/tags/function/load.json +0 -0
  31. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/test1/function/load.mcfunction +0 -0
  32. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/test1/function/load1.mcfunction +0 -0
  33. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/test1/function/main.mcfunction +0 -0
  34. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/test1/function/main__else_1.mcfunction +0 -0
  35. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/test1/function/main__if_1.mcfunction +0 -0
  36. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/test1/function/testfunc.mcfunction +0 -0
  37. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/data/test1/function/testfunc__while_1.mcfunction +0 -0
  38. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.mdl-out-test1-confirm/pack.mcmeta +0 -0
  39. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.tmp_compile_bwe.py +0 -0
  40. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.tmp_compile_bwe2.py +0 -0
  41. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.tmp_compile_bwe3.py +0 -0
  42. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/.tmp_verify_loops.py +0 -0
  43. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/COMPILER_FIXES_SUMMARY.md +0 -0
  44. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/CONDITIONALS_IMPLEMENTATION.md +0 -0
  45. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/LICENSE +0 -0
  46. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/Makefile +0 -0
  47. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/README.md +0 -0
  48. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/advancements/diamond_sword.json +0 -0
  49. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/advancements/first_spell.json +0 -0
  50. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/advancements/other_advancement.json +0 -0
  51. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/advancements/test_advancement.json +0 -0
  52. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/comprehensive_error_test.mdl +0 -0
  53. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/complex_scopes/function/main_else_8.mcfunction +0 -0
  54. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/complex_scopes/function/main_if_8.mcfunction +0 -0
  55. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_basic_if_if_2.mcfunction +0 -0
  56. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_basic_if_if_3.mcfunction +0 -0
  57. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_basic_if_if_4.mcfunction +0 -0
  58. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_complex_if_if_2.mcfunction +0 -0
  59. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_complex_if_if_3.mcfunction +0 -0
  60. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_complex_if_if_4.mcfunction +0 -0
  61. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_complex_if_if_5.mcfunction +0 -0
  62. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_complex_expressions_if_2.mcfunction +0 -0
  63. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_complex_expressions_if_4.mcfunction +0 -0
  64. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_variable_substitution_if_2.mcfunction +0 -0
  65. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_with_raw_if_2.mcfunction +0 -0
  66. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_with_scopes_if_5.mcfunction +0 -0
  67. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_with_tellraw_else_2.mcfunction +0 -0
  68. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_with_tellraw_if_2.mcfunction +0 -0
  69. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_control_with_tellraw_if_4.mcfunction +0 -0
  70. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_if_else_else_2.mcfunction +0 -0
  71. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_if_else_else_3.mcfunction +0 -0
  72. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_if_else_else_4.mcfunction +0 -0
  73. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_if_else_if_2.mcfunction +0 -0
  74. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_if_else_if_3.mcfunction +0 -0
  75. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_if_else_if_4.mcfunction +0 -0
  76. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_else_2.mcfunction +0 -0
  77. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_else_3.mcfunction +0 -0
  78. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_else_3_else_0.mcfunction +0 -0
  79. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_else_3_if_0.mcfunction +0 -0
  80. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_2.mcfunction +0 -0
  81. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  82. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  83. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_else_0.mcfunction +0 -0
  84. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_2_if_0_if_0.mcfunction +0 -0
  85. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_3.mcfunction +0 -0
  86. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_3_else_0.mcfunction +0 -0
  87. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/comprehensive_control_test/function/test_nested_if_if_3_if_0.mcfunction +0 -0
  88. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/control_test/function/main_if_0.mcfunction +0 -0
  89. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/control_test/function/main_while_1.mcfunction +0 -0
  90. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/control_test/function/main_while_body_1.mcfunction +0 -0
  91. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/if_test/function/main_else_1.mcfunction +0 -0
  92. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/if_test/function/main_if_1.mcfunction +0 -0
  93. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/conditional_demo_else_3.mcfunction +0 -0
  94. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/conditional_demo_if_3.mcfunction +0 -0
  95. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/conditional_demo_if_3_else_0.mcfunction +0 -0
  96. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/conditional_demo_if_3_if_0.mcfunction +0 -0
  97. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/conditional_demo_if_3_if_0_else_0.mcfunction +0 -0
  98. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/conditional_demo_if_3_if_0_if_0.mcfunction +0 -0
  99. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/countdown_while_1.mcfunction +0 -0
  100. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/countdown_while_body_1.mcfunction +0 -0
  101. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/increase_tick_per_player_if_1.mcfunction +0 -0
  102. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/increase_tick_per_player_if_1_if_0.mcfunction +0 -0
  103. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/loop_demo_while_2.mcfunction +0 -0
  104. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/loop_demo_while_body_2.mcfunction +0 -0
  105. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/loop_demo_while_body_2_else_0.mcfunction +0 -0
  106. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/loop_demo_while_body_2_if_0.mcfunction +0 -0
  107. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/loop_demo_while_body_2_if_2.mcfunction +0 -0
  108. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_else_0.mcfunction +0 -0
  109. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_else_1.mcfunction +0 -0
  110. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_else_5.mcfunction +0 -0
  111. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_if_0.mcfunction +0 -0
  112. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_if_1.mcfunction +0 -0
  113. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_if_5.mcfunction +0 -0
  114. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_0.mcfunction +0 -0
  115. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_1.mcfunction +0 -0
  116. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_2.mcfunction +0 -0
  117. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_6.mcfunction +0 -0
  118. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_7.mcfunction +0 -0
  119. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_body_0.mcfunction +0 -0
  120. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_body_1.mcfunction +0 -0
  121. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_body_2.mcfunction +0 -0
  122. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_body_6.mcfunction +0 -0
  123. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/main_while_body_7.mcfunction +0 -0
  124. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/scoreboard_demo_while_3.mcfunction +0 -0
  125. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/scoreboard_demo_while_body_3.mcfunction +0 -0
  126. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/scoreboard_demo_while_body_3_if_1.mcfunction +0 -0
  127. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/start_game_if_1.mcfunction +0 -0
  128. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/start_game_if_5.mcfunction +0 -0
  129. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/start_game_while_4.mcfunction +0 -0
  130. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/start_game_while_body_4.mcfunction +0 -0
  131. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_basic_if_if_1.mcfunction +0 -0
  132. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_basic_if_if_2.mcfunction +0 -0
  133. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_basic_if_if_3.mcfunction +0 -0
  134. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_basic_while_while_2.mcfunction +0 -0
  135. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_basic_while_while_4.mcfunction +0 -0
  136. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_basic_while_while_body_2.mcfunction +0 -0
  137. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_basic_while_while_body_4.mcfunction +0 -0
  138. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_if_if_1.mcfunction +0 -0
  139. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_if_if_2.mcfunction +0 -0
  140. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_if_if_3.mcfunction +0 -0
  141. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_if_if_4.mcfunction +0 -0
  142. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_nested_control_while_2.mcfunction +0 -0
  143. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_nested_control_while_body_2.mcfunction +0 -0
  144. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_nested_control_while_body_2_else_1.mcfunction +0 -0
  145. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_nested_control_while_body_2_else_1_if_1.mcfunction +0 -0
  146. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_nested_control_while_body_2_if_1.mcfunction +0 -0
  147. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_nested_control_while_body_2_if_1_if_1.mcfunction +0 -0
  148. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_nested_control_while_body_2_if_2.mcfunction +0 -0
  149. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_scope_scenarios_if_1.mcfunction +0 -0
  150. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_scope_scenarios_if_2.mcfunction +0 -0
  151. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_scope_scenarios_if_3.mcfunction +0 -0
  152. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_scope_scenarios_if_4.mcfunction +0 -0
  153. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_while_while_3.mcfunction +0 -0
  154. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_while_while_6.mcfunction +0 -0
  155. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_while_while_body_3.mcfunction +0 -0
  156. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_complex_while_while_body_6.mcfunction +0 -0
  157. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_complex_expressions_if_1.mcfunction +0 -0
  158. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_complex_expressions_if_3.mcfunction +0 -0
  159. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_complex_expressions_while_2.mcfunction +0 -0
  160. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_complex_expressions_while_body_2.mcfunction +0 -0
  161. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_error_handling_if_1.mcfunction +0 -0
  162. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_error_handling_if_2.mcfunction +0 -0
  163. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_error_handling_while_3.mcfunction +0 -0
  164. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_error_handling_while_body_3.mcfunction +0 -0
  165. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_performance_while_2.mcfunction +0 -0
  166. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_performance_while_4.mcfunction +0 -0
  167. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_performance_while_body_2.mcfunction +0 -0
  168. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_performance_while_body_2_if_1.mcfunction +0 -0
  169. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_performance_while_body_4.mcfunction +0 -0
  170. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_performance_while_body_4_while_2.mcfunction +0 -0
  171. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_performance_while_body_4_while_body_2.mcfunction +0 -0
  172. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_scoped_functions_if_1.mcfunction +0 -0
  173. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_scoped_functions_if_3.mcfunction +0 -0
  174. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_scoped_functions_while_2.mcfunction +0 -0
  175. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_scoped_functions_while_body_2.mcfunction +0 -0
  176. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_variable_substitution_if_1.mcfunction +0 -0
  177. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_variable_substitution_if_3.mcfunction +0 -0
  178. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_variable_substitution_while_2.mcfunction +0 -0
  179. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_variable_substitution_while_body_2.mcfunction +0 -0
  180. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_assignments_if_1.mcfunction +0 -0
  181. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_assignments_if_3.mcfunction +0 -0
  182. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_assignments_while_2.mcfunction +0 -0
  183. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_assignments_while_body_2.mcfunction +0 -0
  184. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_functions_if_1.mcfunction +0 -0
  185. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_functions_if_3.mcfunction +0 -0
  186. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_functions_while_2.mcfunction +0 -0
  187. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_functions_while_body_2.mcfunction +0 -0
  188. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_raw_if_1.mcfunction +0 -0
  189. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_raw_while_2.mcfunction +0 -0
  190. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_raw_while_body_2.mcfunction +0 -0
  191. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_scopes_if_1.mcfunction +0 -0
  192. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_scopes_if_2.mcfunction +0 -0
  193. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_scopes_if_3.mcfunction +0 -0
  194. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_scopes_if_4.mcfunction +0 -0
  195. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_tellraw_else_1.mcfunction +0 -0
  196. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_tellraw_if_1.mcfunction +0 -0
  197. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_tellraw_if_3.mcfunction +0 -0
  198. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_tellraw_while_2.mcfunction +0 -0
  199. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_control_with_tellraw_while_body_2.mcfunction +0 -0
  200. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_if_else_else_1.mcfunction +0 -0
  201. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_if_else_else_2.mcfunction +0 -0
  202. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_if_else_else_3.mcfunction +0 -0
  203. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_if_else_if_1.mcfunction +0 -0
  204. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_if_else_if_2.mcfunction +0 -0
  205. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_if_else_if_3.mcfunction +0 -0
  206. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_main_while_0.mcfunction +0 -0
  207. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_main_while_body_0.mcfunction +0 -0
  208. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_else_1.mcfunction +0 -0
  209. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_else_2.mcfunction +0 -0
  210. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_else_2_else_0.mcfunction +0 -0
  211. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_else_2_if_0.mcfunction +0 -0
  212. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_1.mcfunction +0 -0
  213. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_1_else_0.mcfunction +0 -0
  214. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_1_if_0.mcfunction +0 -0
  215. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_1_if_0_else_0.mcfunction +0 -0
  216. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_1_if_0_if_0.mcfunction +0 -0
  217. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_2.mcfunction +0 -0
  218. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_2_else_0.mcfunction +0 -0
  219. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_nested_if_if_2_if_0.mcfunction +0 -0
  220. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_conditionals_if_1.mcfunction +0 -0
  221. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_conditionals_if_2.mcfunction +0 -0
  222. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_conditionals_if_3.mcfunction +0 -0
  223. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_conditionals_while_4.mcfunction +0 -0
  224. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_conditionals_while_5.mcfunction +0 -0
  225. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_conditionals_while_body_4.mcfunction +0 -0
  226. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_conditionals_while_body_5.mcfunction +0 -0
  227. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_interactions_if_1.mcfunction +0 -0
  228. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_interactions_if_2.mcfunction +0 -0
  229. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_scope_interactions_if_3.mcfunction +0 -0
  230. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_while_break_while_2.mcfunction +0 -0
  231. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_while_break_while_body_2.mcfunction +0 -0
  232. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_while_break_while_body_2_if_1.mcfunction +0 -0
  233. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/test_while_break_while_body_2_if_2.mcfunction +0 -0
  234. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/tick_if_1.mcfunction +0 -0
  235. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/tick_if_2.mcfunction +0 -0
  236. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/tick_if_2_while_1.mcfunction +0 -0
  237. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/tick_if_2_while_body_1.mcfunction +0 -0
  238. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/weapon_effects_else_1.mcfunction +0 -0
  239. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test/function/weapon_effects_if_1.mcfunction +0 -0
  240. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test_final_template_fixed/function/main_else_8.mcfunction +0 -0
  241. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/test_final_template_fixed/function/main_if_8.mcfunction +0 -0
  242. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/while_test/function/main_while_0.mcfunction +0 -0
  243. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/data/while_test/function/main_while_body_0.mcfunction +0 -0
  244. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/dist.zip +0 -0
  245. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/.env +0 -0
  246. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/404.html +0 -0
  247. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/Gemfile +0 -0
  248. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/README.md +0 -0
  249. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_config.yml +0 -0
  250. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/cli-reference.md +0 -0
  251. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/contributing.md +0 -0
  252. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/docs-hub.md +0 -0
  253. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/documentation.md +0 -0
  254. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/examples.md +0 -0
  255. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/getting-started.md +0 -0
  256. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/language-reference.md +0 -0
  257. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/multi-file-projects.md +0 -0
  258. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/python-bindings.md +0 -0
  259. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_docs/vscode-extension.md +0 -0
  260. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_includes/head-custom.html +0 -0
  261. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_includes/navigation.html +0 -0
  262. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_layouts/default.html +0 -0
  263. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_layouts/page.html +0 -0
  264. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_plugins/test_version.rb +0 -0
  265. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/_plugins/version_reader.rb +0 -0
  266. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/assets/css/style.css +0 -0
  267. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/docs.md +0 -0
  268. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/favicon-16.png +0 -0
  269. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/favicon-32.png +0 -0
  270. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/favicon-48.png +0 -0
  271. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/favicon-64.png +0 -0
  272. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/icon-1024.png +0 -0
  273. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/icon-128.png +0 -0
  274. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/icon-256.png +0 -0
  275. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/icon-512.png +0 -0
  276. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/icons/icon-64.png +0 -0
  277. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/docs/index.md +0 -0
  278. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/examples/hello_world.mdl +0 -0
  279. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/examples/macros_example.mdl +0 -0
  280. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/examples/scope_examples.mdl +0 -0
  281. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/examples/simple_counter.mdl +0 -0
  282. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/favicon-16.png +0 -0
  283. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/favicon-32.png +0 -0
  284. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/favicon-48.png +0 -0
  285. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/favicon-64.png +0 -0
  286. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/icon-1024.png +0 -0
  287. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/icon-128.png +0 -0
  288. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/icon-256.png +0 -0
  289. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/icon-512.png +0 -0
  290. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/icons/icon-64.png +0 -0
  291. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/item_modifiers/diamond_sword.json +0 -0
  292. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/item_modifiers/enchant_tool.json +0 -0
  293. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/item_modifiers/test_item_modifier.json +0 -0
  294. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/loot_tables/diamond_sword.json +0 -0
  295. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/loot_tables/epic_loot.json +0 -0
  296. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/loot_tables/main_loot.json +0 -0
  297. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/loot_tables/test_loot.json +0 -0
  298. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/mdllocal.sh +0 -0
  299. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/__init__.py +0 -0
  300. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/ast_nodes.py +0 -0
  301. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/cli.py +0 -0
  302. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/dir_map.py +0 -0
  303. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/mdl_errors.py +0 -0
  304. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/mdl_linter.py +0 -0
  305. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/mdl_parser.py +0 -0
  306. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/python_api.py +0 -0
  307. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language/utils.py +0 -0
  308. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language.egg-info/SOURCES.txt +0 -0
  309. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language.egg-info/dependency_links.txt +0 -0
  310. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language.egg-info/entry_points.txt +0 -0
  311. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language.egg-info/requires.txt +0 -0
  312. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/minecraft_datapack_language.egg-info/top_level.txt +0 -0
  313. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/multi_scope_example.mdl +0 -0
  314. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/my_awesome_pack/README.md +0 -0
  315. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/my_awesome_pack/minecraft_datapack_language.mdl +0 -0
  316. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/predicates/diamond_sword.json +0 -0
  317. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/predicates/has_mana.json +0 -0
  318. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/predicates/other_predicate.json +0 -0
  319. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/predicates/test_predicate.json +0 -0
  320. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/pyproject.toml +0 -0
  321. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/pytest.ini +0 -0
  322. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/custom_pickaxe.json +0 -0
  323. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/diamond_sword.json +0 -0
  324. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/first.json +0 -0
  325. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/inlet.json +0 -0
  326. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/main_recipe.json +0 -0
  327. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/outlet.json +0 -0
  328. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/pipe.json +0 -0
  329. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/second.json +0 -0
  330. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/test_recipe.json +0 -0
  331. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/recipes/wrench.json +0 -0
  332. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scope_demo.mdl +0 -0
  333. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scoreboard_test.mdl +0 -0
  334. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/UpdateMDL.sh +0 -0
  335. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/bootstrap.ps1 +0 -0
  336. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/bootstrap.sh +0 -0
  337. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/build_pkg.ps1 +0 -0
  338. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/build_pkg.sh +0 -0
  339. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/dev_build.ps1 +0 -0
  340. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/dev_build.sh +0 -0
  341. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/dev_setup.ps1 +0 -0
  342. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/dev_setup.sh +0 -0
  343. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/git-bash/bootstrap-gitbash.sh +0 -0
  344. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/git-bash/build_pkg-gitbash.sh +0 -0
  345. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/git-bash/test_cli-gitbash.sh +0 -0
  346. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/release.sh +0 -0
  347. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/test_cli.ps1 +0 -0
  348. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/test_cli.sh +0 -0
  349. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/test_dev.ps1 +0 -0
  350. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/test_dev.sh +0 -0
  351. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/update_docs.sh +0 -0
  352. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/scripts/update_version_info.sh +0 -0
  353. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/setup.cfg +0 -0
  354. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/structures/diamond_sword.json +0 -0
  355. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/structures/test_structure.json +0 -0
  356. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/structures/workshop.json +0 -0
  357. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tellraw_variables_test.mdl +0 -0
  358. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/temp_output/data/minecraft/tags/function/load.json +0 -0
  359. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/temp_output/data/test/function/helper.mcfunction +0 -0
  360. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/temp_output/data/test/function/load.mcfunction +0 -0
  361. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/temp_output/data/test/function/main.mcfunction +0 -0
  362. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/temp_output/pack.mcmeta +0 -0
  363. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/test_all_registry.mdl +0 -0
  364. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/test_complex_scenarios.mdl +0 -0
  365. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/test_comprehensive_fixes.mdl +0 -0
  366. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/test_if_else_while.mdl +0 -0
  367. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/test_project/complex_test.mdl +0 -0
  368. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/test_simple.mdl +0 -0
  369. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/__init__.py +0 -0
  370. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_cli.py +0 -0
  371. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_codegen_naming_and_logic.py +0 -0
  372. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_complex_scenarios.py +0 -0
  373. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_comprehensive_end_to_end.py +0 -0
  374. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_python_api.py +0 -0
  375. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_python_bindings.py +0 -0
  376. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_scheduledwhile.py +0 -0
  377. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tests/test_user_regression_test1.py +0 -0
  378. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tmp_local_cli_out.zip +0 -0
  379. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tmp_test1.mdl +0 -0
  380. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tmp_test1.mdl~ +0 -0
  381. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/tmp_test1_confirm.mdl +0 -0
  382. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/README.md +0 -0
  383. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/favicon-16.png +0 -0
  384. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/favicon-32.png +0 -0
  385. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/favicon-48.png +0 -0
  386. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/favicon-64.png +0 -0
  387. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/icon-1024.png +0 -0
  388. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/icon-128.png +0 -0
  389. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/icon-256.png +0 -0
  390. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/icons/icon-512.png +0 -0
  391. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/language-configuration.json +0 -0
  392. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/package-lock.json +0 -0
  393. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/package.json +0 -0
  394. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/snippets/mdl.json +0 -0
  395. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/src/extension.ts +0 -0
  396. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/syntaxes/mdl.tmLanguage.json +0 -0
  397. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/themes/mdl-color-theme.json +0 -0
  398. {minecraft_datapack_language-16.0.12 → minecraft_datapack_language-16.0.14}/vscode-extension/tsconfig.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 16.0.12
3
+ Version: 16.0.14
4
4
  Summary: Compile MDL language with explicit scoping into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
5
5
  Project-URL: Homepage, https://www.mcmdl.com
6
6
  Project-URL: Documentation, https://www.mcmdl.com/docs
@@ -0,0 +1,3 @@
1
+ current: "16.0.13"
2
+ tag: "v16.0.13"
3
+ updated_at: "2025-09-09T06:19:59Z"
@@ -350,17 +350,19 @@ MDL is open source software licensed under the MIT License. See the [LICENSE](ht
350
350
  }
351
351
 
352
352
  [data-theme="dark"] .install-code {
353
- background: #21262d;
353
+ background: #191d23 !important;
354
354
  border-color: #30363d;
355
355
  }
356
356
 
357
357
  .install-code code {
358
358
  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
359
359
  color: #24292e;
360
+ border: 0;
360
361
  }
361
362
 
362
363
  [data-theme="dark"] .install-code code {
363
364
  color: #e6edf3;
365
+ background: inherit !important;
364
366
  }
365
367
 
366
368
  .releases-section {
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '16.0.12'
32
- __version_tuple__ = version_tuple = (16, 0, 12)
31
+ __version__ = version = '16.0.14'
32
+ __version_tuple__ = version_tuple = (16, 0, 14)
33
33
 
34
- __commit_id__ = commit_id = 'gd830ed025'
34
+ __commit_id__ = commit_id = 'g4a67b89f7'
@@ -187,7 +187,10 @@ class MDLCompiler:
187
187
  if macro_re.search(line):
188
188
  stripped = line.lstrip()
189
189
  if not stripped.startswith('$'):
190
- return '$' + line
190
+ # Insert '$' immediately after indentation so there is no space after '$'
191
+ leading_ws_len = len(line) - len(stripped)
192
+ leading_ws = line[:leading_ws_len]
193
+ return f"{leading_ws}${stripped}"
191
194
  return line
192
195
  if '\n' in text:
193
196
  return '\n'.join(process_line(ln) for ln in text.split('\n'))
@@ -832,12 +835,49 @@ class MDLCompiler:
832
835
  # Default: generic expression string, no inversion
833
836
  invert_then = False
834
837
 
838
+ # Helpers local to this method to keep concerns contained
839
+ def unwrap(e: Any) -> Any:
840
+ while isinstance(e, ParenthesizedExpression):
841
+ e = e.expression
842
+ return e
843
+
844
+ def norm_op(op_in: Any) -> Optional[str]:
845
+ # Return one of: '>', '>=', '<', '<=', '==', '!=' or None
846
+ if op_in == TokenType.GREATER or op_in == ">":
847
+ return ">"
848
+ if op_in == TokenType.GREATER_EQUAL or op_in == ">=":
849
+ return ">="
850
+ if op_in == TokenType.LESS or op_in == "<":
851
+ return "<"
852
+ if op_in == TokenType.LESS_EQUAL or op_in == "<=":
853
+ return "<="
854
+ if op_in == TokenType.EQUAL or op_in == "==" or op_in == "EQUAL":
855
+ return "=="
856
+ if op_in == TokenType.NOT_EQUAL or op_in == "!=" or op_in == "NOT_EQUAL":
857
+ return "!="
858
+ # Accept python bindings string names as well
859
+ if isinstance(op_in, str):
860
+ upper = op_in.upper()
861
+ if upper == "GREATER":
862
+ return ">"
863
+ if upper == "GREATER_EQUAL":
864
+ return ">="
865
+ if upper == "LESS":
866
+ return "<"
867
+ if upper == "LESS_EQUAL":
868
+ return "<="
869
+ if upper == "EQUAL":
870
+ return "=="
871
+ if upper == "NOT_EQUAL":
872
+ return "!="
873
+ return None
874
+
835
875
  if isinstance(expression, BinaryExpression):
836
- left = expression.left
837
- right = expression.right
838
- op = expression.operator
876
+ left = unwrap(expression.left)
877
+ right = unwrap(expression.right)
878
+ op_sym = norm_op(expression.operator)
839
879
  # Variable vs literal
840
- if isinstance(left, VariableSubstitution) and isinstance(right, LiteralExpression) and isinstance(right.value, (int, float)):
880
+ if op_sym and isinstance(left, VariableSubstitution) and isinstance(right, LiteralExpression) and isinstance(right.value, (int, float)):
841
881
  objective = self.variables.get(left.name, left.name)
842
882
  scope = left.scope.strip("<>")
843
883
  # Normalize number
@@ -847,41 +887,47 @@ class MDLCompiler:
847
887
  v = None
848
888
  if v is not None:
849
889
  n = int(v) if float(v).is_integer() else v
850
- if op == TokenType.GREATER:
890
+ if op_sym == ">":
851
891
  rng = f"{int(n)+1}.." if isinstance(n, int) else f"{v+1}.."
852
892
  return (f"score {scope} {objective} matches {rng}", False)
853
- if op == TokenType.GREATER_EQUAL:
893
+ if op_sym == ">=":
854
894
  rng = f"{int(n)}.."
855
895
  return (f"score {scope} {objective} matches {rng}", False)
856
- if op == TokenType.LESS:
896
+ if op_sym == "<":
857
897
  rng = f"..{int(n)-1}"
858
898
  return (f"score {scope} {objective} matches {rng}", False)
859
- if op == TokenType.LESS_EQUAL:
899
+ if op_sym == "<=":
860
900
  rng = f"..{int(n)}"
861
901
  return (f"score {scope} {objective} matches {rng}", False)
862
- if op == TokenType.EQUAL:
902
+ if op_sym == "==":
863
903
  rng = f"{int(n)}"
864
904
  return (f"score {scope} {objective} matches {rng}", False)
865
- if op == TokenType.NOT_EQUAL:
905
+ if op_sym == "!=":
866
906
  rng = f"{int(n)}"
867
907
  return (f"score {scope} {objective} matches {rng}", True)
908
+ # Literal vs variable (swap sides)
909
+ if op_sym and isinstance(left, LiteralExpression) and isinstance(left.value, (int, float)) and isinstance(right, VariableSubstitution):
910
+ # Swap by inverting the operator appropriately, then reuse logic
911
+ invert_map = {
912
+ ">": "<",
913
+ ">=": "<=",
914
+ "<": ">",
915
+ "<=": ">=",
916
+ "==": "==",
917
+ "!=": "!="
918
+ }
919
+ swapped = BinaryExpression(left=right, operator=invert_map.get(op_sym, op_sym), right=left)
920
+ return self._build_condition(swapped)
868
921
  # Variable vs variable
869
- if isinstance(left, VariableSubstitution) and isinstance(right, VariableSubstitution):
922
+ if op_sym and isinstance(left, VariableSubstitution) and isinstance(right, VariableSubstitution):
870
923
  lobj = self.variables.get(left.name, left.name)
871
924
  lscope = left.scope.strip("<>")
872
925
  robj = self.variables.get(right.name, right.name)
873
926
  rscope = right.scope.strip("<>")
874
- if op in (TokenType.GREATER, TokenType.GREATER_EQUAL, TokenType.LESS, TokenType.LESS_EQUAL, TokenType.EQUAL):
875
- comp_map = {
876
- TokenType.GREATER: ">",
877
- TokenType.GREATER_EQUAL: ">=",
878
- TokenType.LESS: "<",
879
- TokenType.LESS_EQUAL: "<=",
880
- TokenType.EQUAL: "="
881
- }
882
- comp = comp_map[op]
927
+ if op_sym in (">", ">=", "<", "<=", "=="):
928
+ comp = op_sym if op_sym != "==" else "="
883
929
  return (f"score {lscope} {lobj} {comp} {rscope} {robj}", False)
884
- if op == TokenType.NOT_EQUAL:
930
+ if op_sym == "!=":
885
931
  # Use equals with inversion
886
932
  return (f"score {lscope} {lobj} = {rscope} {robj}", True)
887
933
 
@@ -357,6 +357,14 @@ class MDLLexer:
357
357
  if (self.source[self.current:self.current + 5] == 'raw!$'):
358
358
  # Found the end marker - extract the content
359
359
  raw_content = self.source[content_start:self.current]
360
+ # Trim leading/trailing whitespace on each line within the raw block
361
+ try:
362
+ lines = raw_content.split('\n')
363
+ trimmed_lines = [ln.strip() for ln in lines]
364
+ raw_content = '\n'.join(trimmed_lines)
365
+ except Exception:
366
+ # If anything goes wrong, fall back to original content
367
+ pass
360
368
 
361
369
  # Generate a single RAW_CONTENT token with all the content
362
370
  self.tokens.append(Token(TokenType.RAW_CONTENT, raw_content, self.line, self.column))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: minecraft-datapack-language
3
- Version: 16.0.12
3
+ Version: 16.0.14
4
4
  Summary: Compile MDL language with explicit scoping into a Minecraft datapack (1.21+ ready). Features variables, control flow, error handling, and VS Code extension.
5
5
  Project-URL: Homepage, https://www.mcmdl.com
6
6
  Project-URL: Documentation, https://www.mcmdl.com/docs
@@ -12,7 +12,11 @@ from pathlib import Path
12
12
 
13
13
 
14
14
  def run_test_suite(name, command, description=""):
15
- """Run a test suite and return results."""
15
+ """Run a test suite and return results.
16
+
17
+ If command is a list, execute without a shell to avoid shell expansions.
18
+ If command is a string, execute via the shell (backward compatible).
19
+ """
16
20
  print(f"\n{'='*60}")
17
21
  print(f"Running {name}")
18
22
  if description:
@@ -22,7 +26,8 @@ def run_test_suite(name, command, description=""):
22
26
  start_time = time.time()
23
27
 
24
28
  try:
25
- result = subprocess.run(command, shell=True, capture_output=True, text=True)
29
+ use_shell = isinstance(command, str)
30
+ result = subprocess.run(command, shell=use_shell, capture_output=True, text=True)
26
31
  duration = time.time() - start_time
27
32
 
28
33
  if result.returncode == 0:
@@ -64,11 +69,16 @@ def main():
64
69
  has_cov = importlib.util.find_spec("pytest_cov") is not None
65
70
  except Exception:
66
71
  has_cov = False
67
- base_cmd = "python -m pytest tests/ -v"
68
- cov_args = " --cov=minecraft_datapack_language --cov-report=term-missing --cov-report=html:htmlcov" if has_cov else ""
72
+ base_cmd = [sys.executable, "-m", "pytest", "tests/", "-v"]
73
+ if has_cov:
74
+ base_cmd += [
75
+ "--cov=minecraft_datapack_language",
76
+ "--cov-report=term-missing",
77
+ "--cov-report=html:htmlcov",
78
+ ]
69
79
  pytest_result = run_test_suite(
70
80
  "Pytest Suite",
71
- f"{base_cmd}{cov_args}",
81
+ base_cmd,
72
82
  "Comprehensive pytest suite" + (" with coverage" if has_cov else "")
73
83
  )
74
84
  results.append(("Pytest", pytest_result))
@@ -87,7 +97,7 @@ def main():
87
97
  if test_path.exists():
88
98
  result = run_test_suite(
89
99
  f"Pytest {test_file}",
90
- f"python -m pytest -q tests/{test_file}",
100
+ [sys.executable, "-m", "pytest", "-q", f"tests/{test_file}"],
91
101
  description
92
102
  )
93
103
  results.append((test_file, result))
@@ -100,7 +110,11 @@ def main():
100
110
  # Test complex scenarios
101
111
  complex_result = run_test_suite(
102
112
  "Complex Scenarios Compilation",
103
- "python -c \"from minecraft_datapack_language.mdl_parser import MDLParser; from minecraft_datapack_language.mdl_compiler import MDLCompiler; import tempfile; from pathlib import Path; source = '''pack \\\"test\\\" \\\"Test pack\\\" 82; namespace \\\"test\\\"; var num counter<@s> = 0; var num health<@s> = 20; var num bonus<@s> = 5; function test:complex_math<@s> { counter<@s> = ($counter<@s>$ + $health<@s>$) * $bonus<@s>$; }'''; parser = MDLParser(); ast = parser.parse(source); compiler = MDLCompiler('temp_output'); compiler.compile(ast); print('Complex expressions compilation successful')\"",
113
+ [
114
+ sys.executable,
115
+ "-c",
116
+ "from minecraft_datapack_language.mdl_parser import MDLParser; from minecraft_datapack_language.mdl_compiler import MDLCompiler; import tempfile; from pathlib import Path; source = '''pack \"test\" \"Test pack\" 82; namespace \"test\"; var num counter<@s> = 0; var num health<@s> = 20; var num bonus<@s> = 5; function test:complex_math<@s> { counter<@s> = ($counter<@s>$ + $health<@s>$) * $bonus<@s>$; }'''; parser = MDLParser(); ast = parser.parse(source); compiler = MDLCompiler('temp_output'); compiler.compile(ast); print('Complex expressions compilation successful')",
117
+ ],
104
118
  "Test complex mathematical expressions compilation"
105
119
  )
106
120
  results.append(("Complex Expressions", complex_result))
@@ -108,7 +122,11 @@ def main():
108
122
  # Test control flow
109
123
  control_result = run_test_suite(
110
124
  "Control Flow Compilation",
111
- "python -c \"from minecraft_datapack_language.mdl_parser import MDLParser; from minecraft_datapack_language.mdl_compiler import MDLCompiler; import tempfile; from pathlib import Path; source = '''pack \\\"test\\\" \\\"Test pack\\\" 82; namespace \\\"test\\\"; var num health<@s> = 20; function test:health_check<@s> { if $health<@s>$ < 10 { say \\\"Health is low!\\\"; } else { say \\\"Health is good!\\\"; } }'''; parser = MDLParser(); ast = parser.parse(source); compiler = MDLCompiler('temp_output'); compiler.compile(ast); print('Control flow compilation successful')\"",
125
+ [
126
+ sys.executable,
127
+ "-c",
128
+ "from minecraft_datapack_language.mdl_parser import MDLParser; from minecraft_datapack_language.mdl_compiler import MDLCompiler; import tempfile; from pathlib import Path; source = '''pack \"test\" \"Test pack\" 82; namespace \"test\"; var num health<@s> = 20; function test:health_check<@s> { if $health<@s>$ < 10 { say \"Health is low!\"; } else { say \"Health is good!\"; } }'''; parser = MDLParser(); ast = parser.parse(source); compiler = MDLCompiler('temp_output'); compiler.compile(ast); print('Control flow compilation successful')",
129
+ ],
112
130
  "Test if/else control flow compilation"
113
131
  )
114
132
  results.append(("Control Flow", control_result))
@@ -116,7 +134,11 @@ def main():
116
134
  # Test function execution
117
135
  function_result = run_test_suite(
118
136
  "Function Execution Compilation",
119
- "python -c \"from minecraft_datapack_language.mdl_parser import MDLParser; from minecraft_datapack_language.mdl_compiler import MDLCompiler; import tempfile; from pathlib import Path; source = '''pack \\\"test\\\" \\\"Test pack\\\" 82; namespace \\\"test\\\"; function test:helper<@s> { say \\\"Helper function!\\\"; } function test:main<@s> { exec test:helper<@s>; }'''; parser = MDLParser(); ast = parser.parse(source); compiler = MDLCompiler('temp_output'); compiler.compile(ast); print('Function execution compilation successful')\"",
137
+ [
138
+ sys.executable,
139
+ "-c",
140
+ "from minecraft_datapack_language.mdl_parser import MDLParser; from minecraft_datapack_language.mdl_compiler import MDLCompiler; import tempfile; from pathlib import Path; source = '''pack \"test\" \"Test pack\" 82; namespace \"test\"; function test:helper<@s> { say \"Helper function!\"; } function test:main<@s> { exec test:helper<@s>; }'''; parser = MDLParser(); ast = parser.parse(source); compiler = MDLCompiler('temp_output'); compiler.compile(ast); print('Function execution compilation successful')",
141
+ ],
120
142
  "Test function execution with scopes"
121
143
  )
122
144
  results.append(("Function Execution", function_result))
@@ -125,7 +147,11 @@ def main():
125
147
  print("\nTesting Python bindings...")
126
148
  api_result = run_test_suite(
127
149
  "Python Bindings Basic",
128
- "python -c \"from minecraft_datapack_language import Pack; import tempfile, shutil; from pathlib import Path; td=tempfile.mkdtemp(); p=Pack('Test','Test pack',82); ns=p.namespace('test'); ns.function('hello','say Hello World!'); p.build(td); output=Path(td)/'data'/'test'/'function'/'hello.mcfunction'; assert output.exists(); print('Python API test successful'); shutil.rmtree(td)\"",
150
+ [
151
+ sys.executable,
152
+ "-c",
153
+ "from minecraft_datapack_language import Pack; import tempfile, shutil; from pathlib import Path; td=tempfile.mkdtemp(); p=Pack('Test','Test pack',82); ns=p.namespace('test'); ns.function('hello','say Hello World!'); p.build(td); output=Path(td)/'data'/'test'/'function'/'hello.mcfunction'; assert output.exists(); print('Python API test successful'); shutil.rmtree(td)",
154
+ ],
129
155
  "Test basic Python bindings functionality"
130
156
  )
131
157
  results.append(("Python Bindings", api_result))
@@ -134,7 +160,7 @@ def main():
134
160
  print("\nTesting CLI...")
135
161
  cli_result = run_test_suite(
136
162
  "CLI Help",
137
- "python -m minecraft_datapack_language.cli --help",
163
+ [sys.executable, "-m", "minecraft_datapack_language.cli", "--help"],
138
164
  "Test CLI help command"
139
165
  )
140
166
  results.append(("CLI Help", cli_result))
@@ -14,6 +14,7 @@ sys.path.insert(0, str(Path(__file__).parent))
14
14
 
15
15
  from minecraft_datapack_language.mdl_compiler import MDLCompiler
16
16
  from minecraft_datapack_language.mdl_parser import MDLParser
17
+ from minecraft_datapack_language.mdl_parser import MDLParser
17
18
 
18
19
  def test_complex_expressions():
19
20
  """Test that complex expressions compile correctly."""
@@ -34,7 +35,7 @@ function test:complex_math<@s> {
34
35
 
35
36
  with tempfile.TemporaryDirectory() as temp_dir:
36
37
  # Parse and compile
37
- parser = MDLParser()
38
+ parser = MDLParser("<test>")
38
39
  ast = parser.parse(source)
39
40
 
40
41
  compiler = MDLCompiler(temp_dir)
@@ -77,6 +78,9 @@ function test:control_test<@s> {
77
78
 
78
79
  while $counter<@s>$ < 10 {
79
80
  counter<@s> = $counter<@s>$ + 1;
81
+ $!raw
82
+ say Hello
83
+ raw!$
80
84
  }
81
85
  }
82
86
  """
@@ -92,15 +96,20 @@ function test:control_test<@s> {
92
96
  # Check output
93
97
  output_file = Path(temp_dir) / "data" / "test" / "function" / "control_test.mcfunction"
94
98
  assert output_file.exists(), "Output file should exist"
95
-
99
+
96
100
  content = output_file.read_text()
97
101
  print(f"Generated content:\n{content}")
98
-
102
+
99
103
  # Verify it contains proper control flow
100
104
  assert "execute if score" in content, "Should generate execute if commands"
101
105
  assert "execute unless score" in content, "Should generate execute unless commands"
102
106
  # While body is emitted as a generated function call with parent-name prefix
103
107
  assert "__while_" in content, "Should generate while loop functions"
108
+ # Raw block lines should be trimmed per line within generated function files
109
+ mcfuncs = list((Path(temp_dir) / "data" / "test").rglob("*.mcfunction"))
110
+ combined = "\n".join(p.read_text() for p in mcfuncs)
111
+ assert "\nsay Hello" in combined
112
+ assert "\n say" not in combined
104
113
 
105
114
  print("✅ Control flow test passed!")
106
115
 
@@ -34,8 +34,8 @@ def test_build_macros_example(tmp_path: Path):
34
34
  greeter = target_files[0].read_text()
35
35
  runner = runner_files[0].read_text()
36
36
 
37
- # Macro line should be present as raw
38
- assert '$say "Hello $(name)"' in greeter
37
+ # Macro line should be present as raw and no space after '$'
38
+ assert '$say "Hello $(name)"' in greeter and '$ say' not in greeter
39
39
  # Both exec forms should be emitted
40
40
  assert 'function macros_ex:greeter {name:"Casey"}' in runner
41
41
  assert 'function macros_ex:greeter with storage macros_ex:ctx player.profile' in runner
@@ -50,6 +50,8 @@ def test_function_macros_exec_and_macro_lines():
50
50
 
51
51
  # Macro line should be preserved verbatim
52
52
  assert "$say \"Hello $(name)\"" in target_content
53
+ # Ensure there is no whitespace between '$' and the command token anywhere
54
+ assert "$ say" not in target_content
53
55
  # Exec with inline JSON compound
54
56
  assert "function macro:target {name:\"purple elephant\"}" in caller_content
55
57
  # Exec with data source 'with' clause
@@ -1,3 +0,0 @@
1
- current: "16.0.11"
2
- tag: "v16.0.11"
3
- updated_at: "2025-09-09T03:58:29Z"