zoo-kcl 0.3.103__tar.gz → 0.3.104__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.

Potentially problematic release.


This version of zoo-kcl might be problematic. Click here for more details.

Files changed (262) hide show
  1. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/Cargo.lock +14 -14
  2. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/Cargo.toml +5 -4
  3. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/PKG-INFO +1 -1
  4. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-api/Cargo.toml +1 -1
  5. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/Cargo.toml +1 -1
  6. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/src/example_tests.rs +1 -0
  7. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-directory-test-macro/Cargo.toml +1 -1
  8. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-error/Cargo.toml +1 -1
  9. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-error/src/lib.rs +12 -0
  10. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/Cargo.toml +1 -1
  11. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/annotations.rs +35 -2
  12. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/artifact.rs +36 -0
  13. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/exec_ast.rs +178 -32
  14. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/fn_call.rs +49 -13
  15. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/kcl_value.rs +15 -4
  16. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/memory.rs +5 -2
  17. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/state.rs +4 -1
  18. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lib.rs +9 -0
  19. zoo_kcl-0.3.104/kcl-lib/src/lint/mod.rs +4 -0
  20. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lint/rule.rs +49 -8
  21. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/ast/types/mod.rs +98 -1
  22. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/simulation_tests.rs +21 -0
  23. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/chamfer.rs +66 -9
  24. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/gdt.rs +14 -1
  25. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/mod.rs +33 -42
  26. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/appearance.kcl +1 -1
  27. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/array.kcl +6 -6
  28. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/gdt.kcl +3 -3
  29. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/hole.kcl +23 -14
  30. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/math.kcl +24 -23
  31. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/prelude.kcl +5 -5
  32. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/sketch.kcl +56 -56
  33. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/sketch2.kcl +5 -5
  34. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/solid.kcl +48 -12
  35. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/transform.kcl +4 -4
  36. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/units.kcl +8 -0
  37. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/vector.kcl +8 -0
  38. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-python-bindings/Cargo.toml +1 -1
  39. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-python-bindings/kcl.pyi +14 -0
  40. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-python-bindings/src/lib.rs +40 -0
  41. zoo_kcl-0.3.103/kcl-lib/src/lint/mod.rs +0 -4
  42. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-api/src/lib.rs +0 -0
  43. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-api/src/sketch.rs +0 -0
  44. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/src/lib.rs +0 -0
  45. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/args_with_lifetime.gen +0 -0
  46. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/args_with_refs.gen +0 -0
  47. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/array.gen +0 -0
  48. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/box.gen +0 -0
  49. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/doc_comment_with_code.gen +0 -0
  50. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/lineTo.gen +0 -0
  51. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/min.gen +0 -0
  52. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/option.gen +0 -0
  53. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/option_input_format.gen +0 -0
  54. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/return_vec_box_sketch.gen +0 -0
  55. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/return_vec_sketch.gen +0 -0
  56. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/show.gen +0 -0
  57. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-derive-docs/tests/test_args_with_exec_state.gen +0 -0
  58. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-directory-test-macro/src/lib.rs +0 -0
  59. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-error/src/source_range.rs +0 -0
  60. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/README.md +0 -0
  61. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/clippy.toml +0 -0
  62. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/common.kcl +0 -0
  63. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/coredump/local.rs +0 -0
  64. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/coredump/mod.rs +0 -0
  65. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/coredump/wasm.rs +0 -0
  66. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/gen_std_tests.rs +0 -0
  67. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/kcl_doc.rs +0 -0
  68. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/mod.rs +0 -0
  69. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/templates/const.hbs +0 -0
  70. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/templates/function.hbs +0 -0
  71. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/templates/index.hbs +0 -0
  72. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/templates/kclType.hbs +0 -0
  73. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/docs/templates/module.hbs +0 -0
  74. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/engine/async_tasks/mod.rs +0 -0
  75. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/engine/async_tasks/tasks.rs +0 -0
  76. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/engine/async_tasks/tasks_wasm.rs +0 -0
  77. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/engine/conn.rs +0 -0
  78. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/engine/conn_mock.rs +0 -0
  79. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/engine/conn_wasm.rs +0 -0
  80. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/engine/mod.rs +0 -0
  81. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/errors.rs +0 -0
  82. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/artifact/mermaid_tests.rs +0 -0
  83. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/cache.rs +0 -0
  84. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/cad_op.rs +0 -0
  85. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/geometry.rs +0 -0
  86. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/id_generator.rs +0 -0
  87. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/import.rs +0 -0
  88. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/import_graph.rs +0 -0
  89. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/mod.rs +0 -0
  90. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/modeling.rs +0 -0
  91. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/typed_path.rs +0 -0
  92. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/execution/types.rs +0 -0
  93. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/fmt.rs +0 -0
  94. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/fs/local.rs +0 -0
  95. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/fs/mod.rs +0 -0
  96. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/fs/wasm.rs +0 -0
  97. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lint/checks/camel_case.rs +0 -0
  98. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lint/checks/default_plane.rs +0 -0
  99. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lint/checks/mod.rs +0 -0
  100. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lint/checks/offset_plane.rs +0 -0
  101. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/log.rs +0 -0
  102. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/backend.rs +0 -0
  103. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/copilot/cache.rs +0 -0
  104. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/copilot/mod.rs +0 -0
  105. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/copilot/types.rs +0 -0
  106. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/kcl/custom_notifications.rs +0 -0
  107. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/kcl/hover.rs +0 -0
  108. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/kcl/mod.rs +0 -0
  109. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/mod.rs +0 -0
  110. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/test_util.rs +0 -0
  111. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/tests.rs +0 -0
  112. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/lsp/util.rs +0 -0
  113. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/main.rs +0 -0
  114. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/modules.rs +0 -0
  115. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/ast/digest.rs +0 -0
  116. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/ast/mod.rs +0 -0
  117. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/ast/types/condition.rs +0 -0
  118. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/ast/types/literal_value.rs +0 -0
  119. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/ast/types/none.rs +0 -0
  120. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/ast/types/path.rs +0 -0
  121. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/math.rs +0 -0
  122. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/mod.rs +0 -0
  123. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/parser.rs +0 -0
  124. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__a.snap +0 -0
  125. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__b.snap +0 -0
  126. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__c.snap +0 -0
  127. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__d.snap +0 -0
  128. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__e.snap +0 -0
  129. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__f.snap +0 -0
  130. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__g.snap +0 -0
  131. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__h.snap +0 -0
  132. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__i.snap +0 -0
  133. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__j.snap +0 -0
  134. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__k.snap +0 -0
  135. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap +0 -0
  136. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aa.snap +0 -0
  137. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ab.snap +0 -0
  138. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ac.snap +0 -0
  139. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ad.snap +0 -0
  140. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ae.snap +0 -0
  141. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap +0 -0
  142. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap +0 -0
  143. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap +0 -0
  144. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap +0 -0
  145. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap +0 -0
  146. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ak.snap +0 -0
  147. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap +0 -0
  148. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap +0 -0
  149. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ar.snap +0 -0
  150. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__array_ranges.snap +0 -0
  151. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap +0 -0
  152. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__au.snap +0 -0
  153. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap +0 -0
  154. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aw.snap +0 -0
  155. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ax.snap +0 -0
  156. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ay.snap +0 -0
  157. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__az.snap +0 -0
  158. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap +0 -0
  159. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bb.snap +0 -0
  160. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bc.snap +0 -0
  161. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bd.snap +0 -0
  162. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__be.snap +0 -0
  163. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bf.snap +0 -0
  164. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bg.snap +0 -0
  165. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bh.snap +0 -0
  166. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bi.snap +0 -0
  167. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bj.snap +0 -0
  168. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bk.snap +0 -0
  169. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bl.snap +0 -0
  170. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bm.snap +0 -0
  171. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bn.snap +0 -0
  172. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap +0 -0
  173. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap +0 -0
  174. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d2.snap +0 -0
  175. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__e.snap +0 -0
  176. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__f.snap +0 -0
  177. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__g.snap +0 -0
  178. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__h.snap +0 -0
  179. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__i.snap +0 -0
  180. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__j.snap +0 -0
  181. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__k.snap +0 -0
  182. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_all_named.snap +0 -0
  183. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_call_in_pipe.snap +0 -0
  184. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_call_multiline.snap +0 -0
  185. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_call_multiline_with_comments.snap +0 -0
  186. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_all_labeled.snap +0 -0
  187. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_first_unlabeled.snap +0 -0
  188. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_with_default_and_type.snap +0 -0
  189. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_decl_with_default_no_type.snap +0 -0
  190. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_in_binary_op.snap +0 -0
  191. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_unnamed_first.snap +0 -0
  192. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__l.snap +0 -0
  193. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__m.snap +0 -0
  194. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__n.snap +0 -0
  195. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__o.snap +0 -0
  196. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__p.snap +0 -0
  197. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__q.snap +0 -0
  198. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__r.snap +0 -0
  199. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__s.snap +0 -0
  200. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__space_between_expr_and_array.snap +0 -0
  201. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__space_between_unary_and_operand.snap +0 -0
  202. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__t.snap +0 -0
  203. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__u.snap +0 -0
  204. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__v.snap +0 -0
  205. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__w.snap +0 -0
  206. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__x.snap +0 -0
  207. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap +0 -0
  208. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap +0 -0
  209. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/token/mod.rs +0 -0
  210. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/token/snapshots/kcl_lib__parsing__token__tokeniser__tests__program2.snap +0 -0
  211. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/parsing/token/tokeniser.rs +0 -0
  212. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/project/mod.rs +0 -0
  213. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/settings/generate_settings_docs.rs +0 -0
  214. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/settings/mod.rs +0 -0
  215. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/settings/templates/settings.hbs +0 -0
  216. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/settings/types/mod.rs +0 -0
  217. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/settings/types/project.rs +0 -0
  218. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/simulation_tests/kcl_samples.rs +0 -0
  219. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/appearance.rs +0 -0
  220. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/args.rs +0 -0
  221. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/array.rs +0 -0
  222. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/assert.rs +0 -0
  223. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/axis_or_reference.rs +0 -0
  224. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/clone.rs +0 -0
  225. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/constraints.rs +0 -0
  226. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/csg.rs +0 -0
  227. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/edge.rs +0 -0
  228. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/extrude.rs +0 -0
  229. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/fillet.rs +0 -0
  230. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/helix.rs +0 -0
  231. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/loft.rs +0 -0
  232. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/math.rs +0 -0
  233. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/mirror.rs +0 -0
  234. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/patterns.rs +0 -0
  235. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/planes.rs +0 -0
  236. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/revolve.rs +0 -0
  237. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/segment.rs +0 -0
  238. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/shapes.rs +0 -0
  239. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/shell.rs +0 -0
  240. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/sketch.rs +0 -0
  241. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/sweep.rs +0 -0
  242. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/transform.rs +0 -0
  243. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/std/utils.rs +0 -0
  244. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/test_server.rs +0 -0
  245. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/thread/local.rs +0 -0
  246. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/thread/mod.rs +0 -0
  247. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/thread/wasm.rs +0 -0
  248. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/unparser.rs +0 -0
  249. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/variant_name.rs +0 -0
  250. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/walk/ast_node.rs +0 -0
  251. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/walk/ast_visitor.rs +0 -0
  252. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/walk/ast_walk.rs +0 -0
  253. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/walk/mod.rs +0 -0
  254. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/src/wasm/mod.rs +0 -0
  255. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/sweep.kcl +0 -0
  256. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/turns.kcl +0 -0
  257. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-lib/std/types.kcl +0 -0
  258. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-python-bindings/README.md +0 -0
  259. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-python-bindings/justfile +0 -0
  260. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-python-bindings/src/bin/stub_gen.rs +0 -0
  261. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/kcl-python-bindings/src/bridge.rs +0 -0
  262. {zoo_kcl-0.3.103 → zoo_kcl-0.3.104}/pyproject.toml +0 -0
@@ -2231,7 +2231,7 @@ dependencies = [
2231
2231
 
2232
2232
  [[package]]
2233
2233
  name = "kcl-api"
2234
- version = "0.1.103"
2234
+ version = "0.1.104"
2235
2235
  dependencies = [
2236
2236
  "indexmap 2.11.4",
2237
2237
  "kcl-error",
@@ -2242,7 +2242,7 @@ dependencies = [
2242
2242
 
2243
2243
  [[package]]
2244
2244
  name = "kcl-bumper"
2245
- version = "0.1.103"
2245
+ version = "0.1.104"
2246
2246
  dependencies = [
2247
2247
  "anyhow",
2248
2248
  "clap",
@@ -2253,7 +2253,7 @@ dependencies = [
2253
2253
 
2254
2254
  [[package]]
2255
2255
  name = "kcl-derive-docs"
2256
- version = "0.1.103"
2256
+ version = "0.1.104"
2257
2257
  dependencies = [
2258
2258
  "proc-macro2",
2259
2259
  "quote",
@@ -2262,7 +2262,7 @@ dependencies = [
2262
2262
 
2263
2263
  [[package]]
2264
2264
  name = "kcl-directory-test-macro"
2265
- version = "0.1.103"
2265
+ version = "0.1.104"
2266
2266
  dependencies = [
2267
2267
  "convert_case",
2268
2268
  "proc-macro2",
@@ -2272,7 +2272,7 @@ dependencies = [
2272
2272
 
2273
2273
  [[package]]
2274
2274
  name = "kcl-error"
2275
- version = "0.1.103"
2275
+ version = "0.1.104"
2276
2276
  dependencies = [
2277
2277
  "miette",
2278
2278
  "serde",
@@ -2297,7 +2297,7 @@ dependencies = [
2297
2297
 
2298
2298
  [[package]]
2299
2299
  name = "kcl-language-server"
2300
- version = "0.2.103"
2300
+ version = "0.2.104"
2301
2301
  dependencies = [
2302
2302
  "anyhow",
2303
2303
  "clap",
@@ -2318,7 +2318,7 @@ dependencies = [
2318
2318
 
2319
2319
  [[package]]
2320
2320
  name = "kcl-language-server-release"
2321
- version = "0.1.103"
2321
+ version = "0.1.104"
2322
2322
  dependencies = [
2323
2323
  "anyhow",
2324
2324
  "clap",
@@ -2338,7 +2338,7 @@ dependencies = [
2338
2338
 
2339
2339
  [[package]]
2340
2340
  name = "kcl-lib"
2341
- version = "0.2.103"
2341
+ version = "0.2.104"
2342
2342
  dependencies = [
2343
2343
  "anyhow",
2344
2344
  "approx 0.5.1",
@@ -2420,7 +2420,7 @@ dependencies = [
2420
2420
 
2421
2421
  [[package]]
2422
2422
  name = "kcl-python-bindings"
2423
- version = "0.3.103"
2423
+ version = "0.3.104"
2424
2424
  dependencies = [
2425
2425
  "anyhow",
2426
2426
  "kcl-lib",
@@ -2436,7 +2436,7 @@ dependencies = [
2436
2436
 
2437
2437
  [[package]]
2438
2438
  name = "kcl-test-server"
2439
- version = "0.1.103"
2439
+ version = "0.1.104"
2440
2440
  dependencies = [
2441
2441
  "anyhow",
2442
2442
  "hyper 0.14.32",
@@ -2449,7 +2449,7 @@ dependencies = [
2449
2449
 
2450
2450
  [[package]]
2451
2451
  name = "kcl-to-core"
2452
- version = "0.1.103"
2452
+ version = "0.1.104"
2453
2453
  dependencies = [
2454
2454
  "anyhow",
2455
2455
  "async-trait",
@@ -2463,7 +2463,7 @@ dependencies = [
2463
2463
 
2464
2464
  [[package]]
2465
2465
  name = "kcl-wasm-lib"
2466
- version = "0.1.103"
2466
+ version = "0.1.104"
2467
2467
  dependencies = [
2468
2468
  "anyhow",
2469
2469
  "bson",
@@ -2532,9 +2532,9 @@ dependencies = [
2532
2532
 
2533
2533
  [[package]]
2534
2534
  name = "kittycad-modeling-cmds"
2535
- version = "0.2.144"
2535
+ version = "0.2.145"
2536
2536
  source = "registry+https://github.com/rust-lang/crates.io-index"
2537
- checksum = "58c575ffec0c363c3cfcffcfcce8891dc365f9cbe7fe79404ed2087e7664f10c"
2537
+ checksum = "dfc08235cb273fb7b317f8f072dadfe523d809e4fca4dfcfee80490ef5965d74"
2538
2538
  dependencies = [
2539
2539
  "anyhow",
2540
2540
  "chrono",
@@ -16,7 +16,7 @@ kittycad = { version = "0.4.2", default-features = false, features = [
16
16
  "js",
17
17
  "requests",
18
18
  ] }
19
- kittycad-modeling-cmds = { version = "0.2.144", features = [
19
+ kittycad-modeling-cmds = { version = "0.2.145", features = [
20
20
  "ts-rs",
21
21
  "websocket",
22
22
  ] }
@@ -70,6 +70,7 @@ insta = { opt-level = 3 }
70
70
  debug = "line-tables-only"
71
71
 
72
72
  #Example: how to point modeling-app at a different repo (e.g. a branch or a local clone)
73
- #[patch.crates-io]
74
- #kittycad-modeling-cmds = { path = "../../modeling-api/modeling-cmds" }
75
- #kittycad-modeling-session = { path = "../../modeling-api/modeling-session" }
73
+ # [patch.crates-io]
74
+ # kittycad-modeling-cmds = { git = "https://github.com/KittyCAD/modeling-api.git", branch = "ben/chamfer_angle" }
75
+ # kittycad-modeling-session = { git = "https://github.com/KittyCAD/modeling-api.git", branch = "ben/chamfer_angle" }
76
+ # #kittycad-modeling-session = { path = "../../modeling-api/modeling-session" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zoo-kcl
3
- Version: 0.3.103
3
+ Version: 0.3.104
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: Implementation :: PyPy
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "kcl-api"
3
- version = "0.1.103"
3
+ version = "0.1.104"
4
4
  edition = "2024"
5
5
  description = "KCL interpreter API"
6
6
  license = "MIT"
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  name = "kcl-derive-docs"
3
3
  description = "A tool for generating documentation from Rust derive macros"
4
- version = "0.1.103"
4
+ version = "0.1.104"
5
5
  edition = "2021"
6
6
  license = "MIT"
7
7
  repository = "https://github.com/KittyCAD/modeling-app"
@@ -213,6 +213,7 @@ pub const TEST_NAMES: &[&str] = &[
213
213
  "std-solid-appearance-9",
214
214
  "std-solid-chamfer-0",
215
215
  "std-solid-chamfer-1",
216
+ "std-solid-chamfer-2",
216
217
  "std-solid-fillet-0",
217
218
  "std-solid-fillet-1",
218
219
  "std-solid-hollow-0",
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  name = "kcl-directory-test-macro"
3
3
  description = "A tool for generating tests from a directory of kcl files"
4
- version = "0.1.103"
4
+ version = "0.1.104"
5
5
  edition = "2021"
6
6
  license = "MIT"
7
7
  repository = "https://github.com/KittyCAD/modeling-app"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "kcl-error"
3
- version = "0.1.103"
3
+ version = "0.1.104"
4
4
  edition = "2024"
5
5
  description = "KCL error definitions"
6
6
  license = "MIT"
@@ -100,3 +100,15 @@ pub struct Suggestion {
100
100
  pub insert: String,
101
101
  pub source_range: SourceRange,
102
102
  }
103
+
104
+ impl Suggestion {
105
+ /// Apply the suggestion to the source code.
106
+ pub fn apply(&self, src: &str) -> String {
107
+ format!(
108
+ "{}{}{}",
109
+ &src[0..self.source_range.start()],
110
+ self.insert,
111
+ &src[self.source_range.end()..]
112
+ )
113
+ }
114
+ }
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  name = "kcl-lib"
3
3
  description = "KittyCAD Language implementation and tools"
4
- version = "0.2.103"
4
+ version = "0.2.104"
5
5
  edition = "2024"
6
6
  license = "MIT"
7
7
  repository = "https://github.com/KittyCAD/modeling-app"
@@ -23,6 +23,7 @@ pub(crate) const SETTINGS_EXPERIMENTAL_FEATURES: &str = "experimentalFeatures";
23
23
  pub(super) const NO_PRELUDE: &str = "no_std";
24
24
  pub(crate) const DEPRECATED: &str = "deprecated";
25
25
  pub(crate) const EXPERIMENTAL: &str = "experimental";
26
+ pub(crate) const INCLUDE_IN_FEATURE_TREE: &str = "feature_tree";
26
27
 
27
28
  pub(super) const IMPORT_FORMAT: &str = "format";
28
29
  pub(super) const IMPORT_COORDS: &str = "coords";
@@ -63,6 +64,8 @@ pub(super) const WARN_VALUES: [&str; 8] = [
63
64
  ];
64
65
 
65
66
  #[derive(Clone, Copy, Eq, PartialEq, Debug, Deserialize, Serialize, ts_rs::TS)]
67
+ #[ts(export)]
68
+ #[serde(tag = "type")]
66
69
  pub enum WarningLevel {
67
70
  Allow,
68
71
  Warn,
@@ -77,6 +80,14 @@ impl WarningLevel {
77
80
  WarningLevel::Deny => Some(Severity::Error),
78
81
  }
79
82
  }
83
+
84
+ pub(crate) fn as_str(self) -> &'static str {
85
+ match self {
86
+ WarningLevel::Allow => WARN_ALLOW,
87
+ WarningLevel::Warn => WARN_WARN,
88
+ WarningLevel::Deny => WARN_DENY,
89
+ }
90
+ }
80
91
  }
81
92
 
82
93
  impl FromStr for WarningLevel {
@@ -226,11 +237,23 @@ pub(super) fn expect_number(expr: &Expr) -> Result<String, KclError> {
226
237
  )))
227
238
  }
228
239
 
229
- #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)]
240
+ #[derive(Debug, Clone, Copy, Eq, PartialEq)]
230
241
  pub struct FnAttrs {
231
242
  pub impl_: Impl,
232
243
  pub deprecated: bool,
233
244
  pub experimental: bool,
245
+ pub include_in_feature_tree: bool,
246
+ }
247
+
248
+ impl Default for FnAttrs {
249
+ fn default() -> Self {
250
+ Self {
251
+ impl_: Impl::default(),
252
+ deprecated: false,
253
+ experimental: false,
254
+ include_in_feature_tree: true,
255
+ }
256
+ }
234
257
  }
235
258
 
236
259
  pub(super) fn get_fn_attrs(
@@ -283,9 +306,19 @@ pub(super) fn get_fn_attrs(
283
306
  continue;
284
307
  }
285
308
 
309
+ if &*p.key.name == INCLUDE_IN_FEATURE_TREE
310
+ && let Some(b) = p.value.literal_bool()
311
+ {
312
+ if result.is_none() {
313
+ result = Some(FnAttrs::default());
314
+ }
315
+ result.as_mut().unwrap().include_in_feature_tree = b;
316
+ continue;
317
+ }
318
+
286
319
  return Err(KclError::new_semantic(KclErrorDetails::new(
287
320
  format!(
288
- "Invalid attribute, expected one of: {IMPL}, {DEPRECATED}, {EXPERIMENTAL}, found `{}`",
321
+ "Invalid attribute, expected one of: {IMPL}, {DEPRECATED}, {EXPERIMENTAL}, {INCLUDE_IN_FEATURE_TREE}, found `{}`",
289
322
  &*p.key.name,
290
323
  ),
291
324
  vec![source_range],
@@ -294,6 +294,7 @@ pub struct EdgeCut {
294
294
  pub enum EdgeCutSubType {
295
295
  Fillet,
296
296
  Chamfer,
297
+ Custom,
297
298
  }
298
299
 
299
300
  impl From<kcmc::shared::CutType> for EdgeCutSubType {
@@ -305,6 +306,16 @@ impl From<kcmc::shared::CutType> for EdgeCutSubType {
305
306
  }
306
307
  }
307
308
 
309
+ impl From<kcmc::shared::CutTypeV2> for EdgeCutSubType {
310
+ fn from(cut_type: kcmc::shared::CutTypeV2) -> Self {
311
+ match cut_type {
312
+ kcmc::shared::CutTypeV2::Fillet { .. } => EdgeCutSubType::Fillet,
313
+ kcmc::shared::CutTypeV2::Chamfer { .. } => EdgeCutSubType::Chamfer,
314
+ kcmc::shared::CutTypeV2::Custom { .. } => EdgeCutSubType::Custom,
315
+ }
316
+ }
317
+ }
318
+
308
319
  #[derive(Debug, Clone, Serialize, PartialEq, ts_rs::TS)]
309
320
  #[ts(export_to = "Artifact.ts")]
310
321
  #[serde(rename_all = "camelCase")]
@@ -1301,6 +1312,31 @@ fn artifacts_to_update(
1301
1312
  }
1302
1313
  return Ok(return_arr);
1303
1314
  }
1315
+ ModelingCmd::Solid3dCutEdges(cmd) => {
1316
+ let mut return_arr = Vec::new();
1317
+ let edge_id = if let Some(edge_id) = cmd.edge_ids.first() {
1318
+ edge_id.into()
1319
+ } else {
1320
+ internal_error!(range, "Solid3dCutEdges command has no edge ID: id={id:?}, cmd={cmd:?}");
1321
+ };
1322
+ return_arr.push(Artifact::EdgeCut(EdgeCut {
1323
+ id,
1324
+ sub_type: cmd.cut_type.into(),
1325
+ consumed_edge_id: edge_id,
1326
+ edge_ids: Vec::new(),
1327
+ surface_id: None,
1328
+ code_ref,
1329
+ }));
1330
+ let consumed_edge = artifacts.get(&edge_id);
1331
+ if let Some(Artifact::Segment(consumed_edge)) = consumed_edge {
1332
+ let mut new_segment = consumed_edge.clone();
1333
+ new_segment.edge_cut_id = Some(id);
1334
+ return_arr.push(Artifact::Segment(new_segment));
1335
+ } else {
1336
+ // TODO: Handle other types like SweepEdge.
1337
+ }
1338
+ return Ok(return_arr);
1339
+ }
1304
1340
  ModelingCmd::EntityMakeHelixFromParams(_) => {
1305
1341
  let return_arr = vec![Artifact::Helix(Helix {
1306
1342
  id,
@@ -14,7 +14,7 @@ use crate::{
14
14
  Operation, PlaneType, StatementKind, TagIdentifier, annotations,
15
15
  cad_op::OpKclValue,
16
16
  fn_call::Args,
17
- kcl_value::{FunctionSource, TypeDef},
17
+ kcl_value::{FunctionSource, KclFunctionSourceParams, TypeDef},
18
18
  memory,
19
19
  state::{ModuleState, SketchBlockState},
20
20
  types::{NumericType, PrimitiveType, RuntimeType},
@@ -396,7 +396,12 @@ impl ExecutorContext {
396
396
  .mut_stack()
397
397
  .add(var_name.clone(), rhs.clone(), source_range)?;
398
398
 
399
- if rhs.show_variable_in_feature_tree() {
399
+ // Track operations, for the feature tree.
400
+ // Don't track these operations if the KCL code being executed is in the stdlib,
401
+ // because users shouldn't know about stdlib internals -- it's useless noise, to them.
402
+ let should_show_in_feature_tree =
403
+ !exec_state.mod_local.inside_stdlib && rhs.show_variable_in_feature_tree();
404
+ if should_show_in_feature_tree {
400
405
  exec_state.push_op(Operation::VariableDeclaration {
401
406
  name: var_name.clone(),
402
407
  value: OpKclValue::from(&rhs),
@@ -766,6 +771,10 @@ impl ExecutorContext {
766
771
  Expr::FunctionExpression(function_expression) => {
767
772
  let attrs = annotations::get_fn_attrs(annotations, metadata.source_range)?;
768
773
  let experimental = attrs.map(|a| a.experimental).unwrap_or_default();
774
+ let is_std = matches!(&exec_state.mod_local.path, ModulePath::Std { .. });
775
+
776
+ // Check the KCL @(feature_tree = ) annotation.
777
+ let include_in_feature_tree = attrs.unwrap_or_default().include_in_feature_tree;
769
778
  if let Some(attrs) = attrs
770
779
  && (attrs.impl_ == annotations::Impl::Rust || attrs.impl_ == annotations::Impl::RustConstraint)
771
780
  {
@@ -789,8 +798,11 @@ impl ExecutorContext {
789
798
  value: Box::new(FunctionSource::kcl(
790
799
  function_expression.clone(),
791
800
  exec_state.mut_stack().snapshot(),
792
- matches!(&exec_state.mod_local.path, ModulePath::Std { .. }),
793
- experimental,
801
+ KclFunctionSourceParams {
802
+ is_std,
803
+ experimental,
804
+ include_in_feature_tree,
805
+ },
794
806
  )),
795
807
  meta: vec![metadata.to_owned()],
796
808
  }
@@ -1461,16 +1473,86 @@ impl Node<MemberExpression> {
1461
1473
  }
1462
1474
 
1463
1475
  impl Node<BinaryExpression> {
1464
- #[async_recursion]
1465
1476
  pub async fn get_result(&self, exec_state: &mut ExecState, ctx: &ExecutorContext) -> Result<KclValue, KclError> {
1466
- let left_value = self.left.get_result(exec_state, ctx).await?;
1467
- let right_value = self.right.get_result(exec_state, ctx).await?;
1477
+ enum State {
1478
+ EvaluateLeft(Node<BinaryExpression>),
1479
+ FromLeft {
1480
+ node: Node<BinaryExpression>,
1481
+ },
1482
+ EvaluateRight {
1483
+ node: Node<BinaryExpression>,
1484
+ left: KclValue,
1485
+ },
1486
+ FromRight {
1487
+ node: Node<BinaryExpression>,
1488
+ left: KclValue,
1489
+ },
1490
+ }
1491
+
1492
+ let mut stack = vec![State::EvaluateLeft(self.clone())];
1493
+ let mut last_result: Option<KclValue> = None;
1494
+
1495
+ while let Some(state) = stack.pop() {
1496
+ match state {
1497
+ State::EvaluateLeft(node) => {
1498
+ let left_part = node.left.clone();
1499
+ match left_part {
1500
+ BinaryPart::BinaryExpression(child) => {
1501
+ stack.push(State::FromLeft { node });
1502
+ stack.push(State::EvaluateLeft(*child));
1503
+ }
1504
+ part => {
1505
+ let left_value = part.get_result(exec_state, ctx).await?;
1506
+ stack.push(State::EvaluateRight { node, left: left_value });
1507
+ }
1508
+ }
1509
+ }
1510
+ State::FromLeft { node } => {
1511
+ let Some(left_value) = last_result.take() else {
1512
+ return Err(Self::missing_result_error(&node));
1513
+ };
1514
+ stack.push(State::EvaluateRight { node, left: left_value });
1515
+ }
1516
+ State::EvaluateRight { node, left } => {
1517
+ let right_part = node.right.clone();
1518
+ match right_part {
1519
+ BinaryPart::BinaryExpression(child) => {
1520
+ stack.push(State::FromRight { node, left });
1521
+ stack.push(State::EvaluateLeft(*child));
1522
+ }
1523
+ part => {
1524
+ let right_value = part.get_result(exec_state, ctx).await?;
1525
+ let result = node.apply_operator(exec_state, ctx, left, right_value).await?;
1526
+ last_result = Some(result);
1527
+ }
1528
+ }
1529
+ }
1530
+ State::FromRight { node, left } => {
1531
+ let Some(right_value) = last_result.take() else {
1532
+ return Err(Self::missing_result_error(&node));
1533
+ };
1534
+ let result = node.apply_operator(exec_state, ctx, left, right_value).await?;
1535
+ last_result = Some(result);
1536
+ }
1537
+ }
1538
+ }
1539
+
1540
+ last_result.ok_or_else(|| Self::missing_result_error(self))
1541
+ }
1542
+
1543
+ async fn apply_operator(
1544
+ &self,
1545
+ exec_state: &mut ExecState,
1546
+ ctx: &ExecutorContext,
1547
+ left_value: KclValue,
1548
+ right_value: KclValue,
1549
+ ) -> Result<KclValue, KclError> {
1468
1550
  let mut meta = left_value.metadata();
1469
1551
  meta.extend(right_value.metadata());
1470
1552
 
1471
1553
  // First check if we are doing string concatenation.
1472
1554
  if self.operator == BinaryOperator::Add
1473
- && let (KclValue::String { value: left, meta: _ }, KclValue::String { value: right, meta: _ }) =
1555
+ && let (KclValue::String { value: left, .. }, KclValue::String { value: right, .. }) =
1474
1556
  (&left_value, &right_value)
1475
1557
  {
1476
1558
  return Ok(KclValue::String {
@@ -1506,28 +1588,24 @@ impl Node<BinaryExpression> {
1506
1588
  .await?;
1507
1589
  return Ok(result.into());
1508
1590
  }
1509
- } else if self.operator == BinaryOperator::And {
1591
+ } else if self.operator == BinaryOperator::And
1592
+ && let (KclValue::Solid { value: left }, KclValue::Solid { value: right }) = (&left_value, &right_value)
1593
+ {
1510
1594
  // Check if we have solids.
1511
- if let (KclValue::Solid { value: left }, KclValue::Solid { value: right }) = (&left_value, &right_value) {
1512
- let args = Args::new_no_args(self.into(), ctx.clone());
1513
- let result = crate::std::csg::inner_intersect(
1514
- vec![*left.clone(), *right.clone()],
1515
- Default::default(),
1516
- exec_state,
1517
- args,
1518
- )
1519
- .await?;
1520
- return Ok(result.into());
1521
- }
1595
+ let args = Args::new_no_args(self.into(), ctx.clone());
1596
+ let result = crate::std::csg::inner_intersect(
1597
+ vec![*left.clone(), *right.clone()],
1598
+ Default::default(),
1599
+ exec_state,
1600
+ args,
1601
+ )
1602
+ .await?;
1603
+ return Ok(result.into());
1522
1604
  }
1523
1605
 
1524
1606
  // Check if we are doing logical operations on booleans.
1525
1607
  if self.operator == BinaryOperator::Or || self.operator == BinaryOperator::And {
1526
- let KclValue::Bool {
1527
- value: left_value,
1528
- meta: _,
1529
- } = left_value
1530
- else {
1608
+ let KclValue::Bool { value: left_value, .. } = left_value else {
1531
1609
  return Err(KclError::new_semantic(KclErrorDetails::new(
1532
1610
  format!(
1533
1611
  "Cannot apply logical operator to non-boolean value: {}",
@@ -1536,11 +1614,7 @@ impl Node<BinaryExpression> {
1536
1614
  vec![self.left.clone().into()],
1537
1615
  )));
1538
1616
  };
1539
- let KclValue::Bool {
1540
- value: right_value,
1541
- meta: _,
1542
- } = right_value
1543
- else {
1617
+ let KclValue::Bool { value: right_value, .. } = right_value else {
1544
1618
  return Err(KclError::new_semantic(KclErrorDetails::new(
1545
1619
  format!(
1546
1620
  "Cannot apply logical operator to non-boolean value: {}",
@@ -1687,6 +1761,13 @@ impl Node<BinaryExpression> {
1687
1761
  Ok(value)
1688
1762
  }
1689
1763
 
1764
+ fn missing_result_error(node: &Node<BinaryExpression>) -> KclError {
1765
+ KclError::new_internal(KclErrorDetails::new(
1766
+ "missing result while evaluating binary expression".to_owned(),
1767
+ vec![SourceRange::from(node)],
1768
+ ))
1769
+ }
1770
+
1690
1771
  fn warn_on_unknown(&self, ty: &NumericType, verb: &str, exec_state: &mut ExecState) {
1691
1772
  if ty == &NumericType::Unknown {
1692
1773
  let sr = self.as_source_range();
@@ -2659,12 +2740,77 @@ y = x[0mm + 1]
2659
2740
 
2660
2741
  #[tokio::test(flavor = "multi_thread")]
2661
2742
  async fn getting_property_of_plane() {
2662
- // let ast = include_str!("../../tests/inputs/planestuff.kcl");
2663
2743
  let ast = std::fs::read_to_string("tests/inputs/planestuff.kcl").unwrap();
2664
-
2665
2744
  parse_execute(&ast).await.unwrap();
2666
2745
  }
2667
2746
 
2747
+ #[cfg(feature = "artifact-graph")]
2748
+ #[tokio::test(flavor = "multi_thread")]
2749
+ async fn no_artifacts_from_within_hole_call() {
2750
+ // Test that executing stdlib KCL, like the `hole` function
2751
+ // (which is actually implemented in KCL not Rust)
2752
+ // does not generate artifacts from within the stdlib code,
2753
+ // only from the user code.
2754
+ let ast = std::fs::read_to_string("tests/inputs/sample_hole.kcl").unwrap();
2755
+ let out = parse_execute(&ast).await.unwrap();
2756
+
2757
+ // Get all the operations that occurred.
2758
+ let actual_operations = out.exec_state.global.root_module_artifacts.operations;
2759
+
2760
+ // There should be 5, for sketching the cube and applying the hole.
2761
+ // If the stdlib internal calls are being tracked, that's a bug,
2762
+ // and the actual number of operations will be something like 35.
2763
+ let expected = 5;
2764
+ assert_eq!(
2765
+ actual_operations.len(),
2766
+ expected,
2767
+ "expected {expected} operations, received {}:\n{actual_operations:#?}",
2768
+ actual_operations.len(),
2769
+ );
2770
+ }
2771
+
2772
+ #[cfg(feature = "artifact-graph")]
2773
+ #[tokio::test(flavor = "multi_thread")]
2774
+ async fn feature_tree_annotation_on_user_defined_kcl() {
2775
+ // The call to foo() should not generate an operation,
2776
+ // because its 'feature_tree' attribute has been set to false.
2777
+ let ast = std::fs::read_to_string("tests/inputs/feature_tree_annotation_on_user_defined_kcl.kcl").unwrap();
2778
+ let out = parse_execute(&ast).await.unwrap();
2779
+
2780
+ // Get all the operations that occurred.
2781
+ let actual_operations = out.exec_state.global.root_module_artifacts.operations;
2782
+
2783
+ let expected = 0;
2784
+ assert_eq!(
2785
+ actual_operations.len(),
2786
+ expected,
2787
+ "expected {expected} operations, received {}:\n{actual_operations:#?}",
2788
+ actual_operations.len(),
2789
+ );
2790
+ }
2791
+
2792
+ #[cfg(feature = "artifact-graph")]
2793
+ #[tokio::test(flavor = "multi_thread")]
2794
+ async fn no_feature_tree_annotation_on_user_defined_kcl() {
2795
+ // The call to foo() should generate an operation,
2796
+ // because @(feature_tree) defaults to true.
2797
+ let ast = std::fs::read_to_string("tests/inputs/no_feature_tree_annotation_on_user_defined_kcl.kcl").unwrap();
2798
+ let out = parse_execute(&ast).await.unwrap();
2799
+
2800
+ // Get all the operations that occurred.
2801
+ let actual_operations = out.exec_state.global.root_module_artifacts.operations;
2802
+
2803
+ let expected = 2;
2804
+ assert_eq!(
2805
+ actual_operations.len(),
2806
+ expected,
2807
+ "expected {expected} operations, received {}:\n{actual_operations:#?}",
2808
+ actual_operations.len(),
2809
+ );
2810
+ assert!(matches!(actual_operations[0], Operation::GroupBegin { .. }));
2811
+ assert!(matches!(actual_operations[1], Operation::GroupEnd));
2812
+ }
2813
+
2668
2814
  #[tokio::test(flavor = "multi_thread")]
2669
2815
  async fn custom_warning() {
2670
2816
  let warn = r#"