* Grackle: compile KCL function definitions
Definitions like `fn x = () => { return 1 }` can now be compiled. These functions can't be _called_ yet, but just defining them and mapping them to names works now.
* Failing test for executing a user-defined function
* Refactor: KclFunction is now an enum, not a trait
It's a pain in the ass to work with trait objects in Rust, so I'm refactoring to avoid needing traits at all. We can just use enums. This simplifies future work.
* Zero-parameter functions can be called
Finally, Grackle can actually run user-defined KCL functions! It basically treats them as a new, separate program (with its own scope of variables, nested within the existing parent scope).
* Failing test for multi-param KCL functions
* Execute user-defined functions which declare parameters
Previous commits in this PR got user-defined functions working, but only if they had zero parameters. In this commit, call arguments are bound to function parameters, so you can now compile functions with params.
* Users get a compile error if they try to pass more args to a function than it has parameters
This will help users get clear error messages.
* More test coverage
Among other things, this verify that Grackle compiles KCL functions which themselves either return or accept functions
* Start Grackle (KCL-to-EP compiler)
This begins work on a second, different executor. The old executor is a tree-walk interpreter, this executor compiles the KCL programs into the Execution Plan virtual machine defined in its [own crate](https://github.com/KittyCAD/modeling-api/tree/main/execution-plan). This executor is called "Grackle", after an Austin bird, and it's got its own module in wasm-lib so that I can keep merging small PRs and developing incrementally, rather than building a complete executor which replaces the old executor in one PR.
Grackle's "Planner" walks the AST, like the tree-walk executor. But it doesn't actually execute code. Instead, as it walks each AST node, it outputs a sequence of Execution Plan instructions which, when run, can compute that node's value. It also notes which Execution Plan virtual machine address will eventually contain each KCL variable.
Done:
- Storing KCL variables
- Computing primitives, literals, binary expressions
- Calling native (i.e. Rust) functions from KCL
- Storing arrays
Todo:
- KCL functions (i.e. user-defined functions)
- Member expressions
- Port over existing executor's native funtions (e.g. `lineTo`, `extrude` and `startSketchAt`)
* Create a file and expect stream to fail on Linux
Fixes#1190
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* Try to add @franknoirot's suggestion
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* Check settings first
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* Working test
* Clean up
* Linux fix
* Linux fix attempt #2
* BUILD_RELEASE true temporarily
* Revert "BUILD_RELEASE true temporarily"
This reverts commit 42b2d5f6bb.
* Better comment
* Home checks, and proj name check
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* Open proj
* Fix defaultDir in test
* WIP signout
* Workaround to recover from error
* Typo
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Naming tweaks
* Update heading font to be owners
* Update app icon
* Update Tauri App title
* Fix sign in page (#1232)
* Change to Zoo Modeling App, CI fixes (#1238)
* Replace website urls for dl.zoo.dev
---------
Co-authored-by: Pierre Jacquier <pierrejacquier39@gmail.com>
# Problem
This is my proposal for fixing #1107 . I've only done it for one stdlib function, `tangentialArcTo` -- if y'all like it, I'll apply this idea to the rest of the stdlib.
Previously, if users want to put a tag on the arc, the function's parameters change type.
```
// Tag missing: first param is array
tangentialArcTo([x, y], %)
// Tag present: first param is object
tangentialArcTo({to: [x, y], tag: "myTag"}, %)
```
# Solution
My proposal in #1006 is that KCL should have optional values. This means we can change the stdlib `tangentialArcTo` function to use them. In this PR, the calls are now like
```
// Tag missing: first param is array
tangentialArcTo([x, y], %)
// Tag present: first param is array still, but we now pass a tag at the end.
tangentialArcTo([x, y], %, "myTag")
```
This adds an "option" type to KCL typesystem, but it's not really revealed to users (no KCL types are revealed to users right now, they write untyped code and only interact with types when they get type errors upon executing programs). Also adds a None type, which is the default case of the Optional enum.
* Add new logomarks
* Replace KittyCAD and KCMA with Zoo and ZMA anywhere it's safe
* fmt
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* Make README logo a PNG instead of an SVG
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Put a proper overlay behind the web app warning banner
Resolves#1197
* Add outline to kcma logo in readme
Resolves#1159
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* retrigger CI
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Tweak toaster look and feel
* Add icons, tweak plus icon names
* Rename commandBarMeta to commandBarConfig
* Refactor command bar, add support for icons
* Create a tailwind plugin for aria-pressed button state
* Remove overlay from behind command bar
* Clean up toolbar
* Button and other style tweaks
* Icon tweaks follow-up: make old icons work with new sizing
* Delete unused static icons
* More CSS tweaks
* Small CSS tweak to project sidebar
* Add command bar E2E test
* fumpt
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* fix typo in a comment
* Fix icon padding (built version only)
* Update onboarding and warning banner icons padding
* Misc minor style fixes
* Get Extrude opening and canceling from command bar
* Iconography tweaks
* Get extrude kind of working
* Refactor command bar config types and organization
* Move command bar configs to be co-located with each other
* Start building a state machine for the command bar
* Start converting command bar to state machine
* Add support for multiple args, confirmation step
* Submission behavior, hotkeys, code organization
* Add new test for extruding from command bar
* Polish step back and selection hotkeys, CSS tweaks
* Loading style tweaks
* Validate selection inputs, polish UX of args re-editing
* Prevent submission with multiple selection on singlular arg
* Remove stray console logs
* Tweak test, CSS nit, remove extrude "result" argument
* Fix linting warnings
* Show Ctrl+/ instead of ⌘K on all platforms but Mac
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* Add "Enter sketch" to command bar
* fix command bar test
* Fix flaky cmd bar extrude test by waiting for engine select response
* Cover both button labels '⌘K' and 'Ctrl+/' in test
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Tweak toaster look and feel
* Add icons, tweak plus icon names
* Rename commandBarMeta to commandBarConfig
* Refactor command bar, add support for icons
* Create a tailwind plugin for aria-pressed button state
* Remove overlay from behind command bar
* Clean up toolbar
* Button and other style tweaks
* Icon tweaks follow-up: make old icons work with new sizing
* Delete unused static icons
* More CSS tweaks
* Small CSS tweak to project sidebar
* Add command bar E2E test
* fumpt
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* fix typo in a comment
* Fix icon padding (built version only)
* Update onboarding and warning banner icons padding
* Misc minor style fixes
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* update default plane size after grid update
* use similar scale
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* fix test numbers
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
KCEP's memory model stores 'values', which can be either numbers or strings. But we'll need to support storing complex objects like points, lines, sketchgroups, etc in memory too.
This PR adds a trait for KCEP composite types, which are laid out in KCEP memory as a consecutive series of values, one for each field.
Part of https://github.com/KittyCAD/modeling-app/issues/993
We want to be able to extract the execution plan (EP) from a KCL program, copy it, and paste it into an engine unit test. Therefore they must be de/serializable.
* update select logic for axis
* add abs Y and X constraints
* make selection tests much more thorough including axis selections
* fmt
* tweak
* tweak
* add snap to XY constraints
* side just for screenshot diffs
* update angle constraint to allow axis seleciton
* fix bux in absY constraint
* add sorting to constraintns
* add issue to TODO
* Revert "side just for screenshot diffs"
This reverts commit aae7874859.
* fix number because something must have updated in the engine
* typo
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* Revert "add sorting to constraintns"
This reverts commit 36054a4069.
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* triggre CI
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* more e2e export fixes
* fixes
* fmt
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* trigger CI
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* WIP: Add tauri e2e test for auth on Linux
Fixes#968
* WIP
* WIP
* Working of through /tmp file for user code sharing
* rust int
* User code only in /tmp, fixes
* Longer timeout for github actions
* Remove timeout
* Fmt
* Fmt, 30sec timeout
* Test BUILD_RELEASE true
* Revert "Test BUILD_RELEASE true"
This reverts commit d3b59d4a6c.
* Disable concurrency limit for faster iterations on this PR
* Add logs for responses
* Test manual tauri build before e2e
* WIP
* Catch error on tauri::api:🐚:open
* Clean up
* Clean up
* timeout
* Force BUILD_RELEASE: true
* Back to debug, longer timeout
* Print if url opens ok too
* Check default browser in actions
* Remote shell call on linux (aka e2e for now)
* Fix fmt
* Move to data-testid, clean up
* Add log out section
* Clean up
* Fix typo
* Fix text detection
* Test AppImage
* Revert "Test AppImage"
This reverts commit cf126b1aa6.
* Add comments
* Change to env var
* Clean up
* Fmt fix
* Better package json name
* Add import @wdio/globals
* Back to require
* Update wdio, fix globals
* Move to typescript
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix ply and stl exports
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* trigger ci
* explanation comment
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* selections e2e test
* .only
* adde test
* make invalid kcl test pass on macos runner
* further attempt to solve invalid code test on macos
* add comment
* initial playwright setup and test
* try verbose logging
* double check resolution
* double check token
* remove logs
* try running on ubuntu and macos
* move e2e tests
* vitest ignores playwright tests
* add a series of tests
* tweak yarn setup
* typo
* update fmt
* action typo
* rust toolchain?
* remove .only from playwright test
* A snapshot a day keeps the bugs away! 📷🐛
* A snapshot a day keeps the bugs away! 📷🐛
* add pan and zoom back
* try puting os in commit message
* A snapshot a day keeps the bugs away! 📷🐛 .os
* A snapshot a day keeps the bugs away! 📷🐛 .os
* fix commit message
* A snapshot a day keeps the bugs away! 📷🐛 (OS: macos-latest)
* add command logs to UI for axis tests
* typo
* fmt
* remove .only
* add auto complete test
* remove .only
* update queries to be more playwright recommended
* move test utils
* remove waits from first test
* remove old snapshots
* re-arrange files and tests
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest)
* trigger CI
* refactor plane test
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest)
* remove .only
* try longer wait
* try snap shoting
* fmt
* better CI names
* fix
* fix linux
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest)
* try make executes on load a bit more robust
* fix
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest)
* stabilise snapshots
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest)
* A snapshot a day keeps the bugs away! 📷🐛 (OS: macos-latest)
* make tests run linearly
* update naming
* tidy
* .only
* update readme
* trigger CI
* add set tool
* util clean up
* update readme
* readme tweaks
* self-review clean up
* A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu)
* tweak
* update readme
* Ensure Vite preview server is running before running any Playwright tests (#1114)
* Ensure that Vite is serving before tests run
* Don't break secrets if developer has extra blank line in env file
* @mxschmitt's suggestions
* fix
* add wait-on types
* tsconfig fix
* update readme
* code template for sktech on each plane test
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Frank Noirot <frank@kittycad.io>