From dd3a2b14f980486d35ffb5ff55eccbb85cc72b9c Mon Sep 17 00:00:00 2001 From: Jonathan Tran Date: Wed, 4 Dec 2024 15:40:46 -0500 Subject: [PATCH 01/15] Bump hashbrown from 0.15.0 to 0.15.2 (#4659) --- src/wasm-lib/Cargo.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index 7d4d6fcf9..947a402ba 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -1182,9 +1182,9 @@ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -1589,7 +1589,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.15.0", + "hashbrown 0.15.2", "serde", ] From 023a659491dba407f6f717e7e5e9ac7f06cf0af5 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Thu, 5 Dec 2024 10:05:23 +1300 Subject: [PATCH 02/15] Make some fields of lint::Discovered public again; update kittycad (#4658) * Make some fields of lint::Discovered public again; update kittycad Signed-off-by: Nick Cameron * Empty commit to try to unstick CI --------- Signed-off-by: Nick Cameron --- src/wasm-lib/Cargo.lock | 23 ++++++++++++----------- src/wasm-lib/Cargo.toml | 4 ++-- src/wasm-lib/kcl/src/lint/rule.rs | 8 ++++---- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index 947a402ba..a6114dc4b 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -1800,9 +1800,9 @@ dependencies = [ [[package]] name = "kittycad" -version = "0.3.25" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6359cc0a1bbccbcf78775eea17a033cf2aa89d3fe6a9784f8ce94e5f882c185" +checksum = "933cb5f77624386c87d296e3fd493daf50156d1cbfa03b9f333a6d4da2896369" dependencies = [ "anyhow", "async-trait", @@ -1831,7 +1831,7 @@ dependencies = [ "serde_bytes", "serde_json", "serde_urlencoded", - "thiserror 1.0.68", + "thiserror 2.0.0", "tokio", "tracing", "url", @@ -2921,9 +2921,9 @@ dependencies = [ [[package]] name = "reqwest-conditional-middleware" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1663d9d4fbb6e3900f91455d6d7833301c91ae3c7fc6e116fd7acd40e478a93" +checksum = "f67ad7fdf5c0a015763fcd164bee294b13fb7b6f89f1b55961d40f00c3e32d6b" dependencies = [ "async-trait", "http 1.1.0", @@ -2933,9 +2933,9 @@ dependencies = [ [[package]] name = "reqwest-middleware" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" +checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" dependencies = [ "anyhow", "async-trait", @@ -2948,9 +2948,9 @@ dependencies = [ [[package]] name = "reqwest-retry" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a83df1aaec00176d0fabb65dea13f832d2a446ca99107afc17c5d2d4981221d0" +checksum = "29c73e4195a6bfbcb174b790d9b3407ab90646976c55de58a6515da25d851178" dependencies = [ "anyhow", "async-trait", @@ -2962,6 +2962,7 @@ dependencies = [ "reqwest", "reqwest-middleware", "retry-policies", + "thiserror 1.0.68", "tokio", "tracing", "wasm-timer", @@ -2969,9 +2970,9 @@ dependencies = [ [[package]] name = "reqwest-tracing" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfdd9bfa64c72233d8dd99ab7883efcdefe9e16d46488ecb9228b71a2e2ceb45" +checksum = "ff82cf5730a1311fb9413b0bc2b8e743e0157cd73f010ab4ec374a923873b6a2" dependencies = [ "anyhow", "async-trait", diff --git a/src/wasm-lib/Cargo.toml b/src/wasm-lib/Cargo.toml index 2dfd823ff..6520676bd 100644 --- a/src/wasm-lib/Cargo.toml +++ b/src/wasm-lib/Cargo.toml @@ -74,8 +74,8 @@ members = [ [workspace.dependencies] http = "1" -kittycad = { version = "0.3.25", default-features = false, features = ["js", "requests"] } -kittycad-modeling-cmds = { version = "0.2.76", features = ["websocket"] } +kittycad = { version = "0.3.28", default-features = false, features = ["js", "requests"] } +kittycad-modeling-cmds = { version = "0.2.77", features = ["websocket"] } [[test]] name = "executor" diff --git a/src/wasm-lib/kcl/src/lint/rule.rs b/src/wasm-lib/kcl/src/lint/rule.rs index d8e45b953..e08a032bd 100644 --- a/src/wasm-lib/kcl/src/lint/rule.rs +++ b/src/wasm-lib/kcl/src/lint/rule.rs @@ -30,16 +30,16 @@ where #[serde(rename_all = "camelCase")] pub struct Discovered { /// Zoo Lint Finding information. - pub(super) finding: Finding, + pub finding: Finding, /// Further information about the specific finding. - pub(super) description: String, + pub description: String, /// Source code location. - pub(super) pos: SourceRange, + pub pos: SourceRange, /// Is this discovered issue overridden by the programmer? - pub(super) overridden: bool, + pub overridden: bool, } #[cfg(feature = "pyo3")] From ea3d604b738ea4726e2889cb280375787f8f660a Mon Sep 17 00:00:00 2001 From: Jonathan Tran Date: Wed, 4 Dec 2024 16:06:02 -0500 Subject: [PATCH 03/15] Allow standard planes to appear in the artifact graph (#4594) --- .../__snapshots__/artifactGraph.test.ts.snap | 4 +- src/wasm-lib/kcl/src/std/sketch.rs | 55 +++++++++++-------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/lang/std/__snapshots__/artifactGraph.test.ts.snap b/src/lang/std/__snapshots__/artifactGraph.test.ts.snap index 4a5beb7f2..6b375bd39 100644 --- a/src/lang/std/__snapshots__/artifactGraph.test.ts.snap +++ b/src/lang/std/__snapshots__/artifactGraph.test.ts.snap @@ -11,8 +11,8 @@ Map { ], ], "range": [ - 37, - 64, + 12, + 31, 0, ], }, diff --git a/src/wasm-lib/kcl/src/std/sketch.rs b/src/wasm-lib/kcl/src/std/sketch.rs index c456e3ba4..0afc3b5d4 100644 --- a/src/wasm-lib/kcl/src/std/sketch.rs +++ b/src/wasm-lib/kcl/src/std/sketch.rs @@ -1113,46 +1113,53 @@ async fn make_sketch_plane_from_orientation( exec_state: &mut ExecState, args: &Args, ) -> Result, KclError> { - let mut plane = Plane::from_plane_data(data.clone(), exec_state); + let plane = Plane::from_plane_data(data.clone(), exec_state); - // Get the default planes. - let default_planes = args - .ctx - .engine - .default_planes(&mut exec_state.id_generator, args.source_range) - .await?; - - plane.id = match data { - PlaneData::XY => default_planes.xy, - PlaneData::NegXY => default_planes.neg_xy, - PlaneData::XZ => default_planes.xz, - PlaneData::NegXZ => default_planes.neg_xz, - PlaneData::YZ => default_planes.yz, - PlaneData::NegYZ => default_planes.neg_yz, + // Create the plane on the fly. + let clobber = false; + let size = LengthUnit(60.0); + let hide = Some(true); + match data { + PlaneData::XY | PlaneData::NegXY | PlaneData::XZ | PlaneData::NegXZ | PlaneData::YZ | PlaneData::NegYZ => { + let x_axis = match data { + PlaneData::NegXY => Point3d::new(-1.0, 0.0, 0.0), + PlaneData::NegXZ => Point3d::new(-1.0, 0.0, 0.0), + PlaneData::NegYZ => Point3d::new(0.0, -1.0, 0.0), + _ => plane.x_axis, + }; + args.batch_modeling_cmd( + plane.id, + ModelingCmd::from(mcmd::MakePlane { + clobber, + origin: plane.origin.into(), + size, + x_axis: x_axis.into(), + y_axis: plane.y_axis.into(), + hide, + }), + ) + .await?; + } PlaneData::Plane { origin, x_axis, y_axis, z_axis: _, } => { - // Create the custom plane on the fly. - let id = exec_state.id_generator.next_uuid(); args.batch_modeling_cmd( - id, + plane.id, ModelingCmd::from(mcmd::MakePlane { - clobber: false, + clobber, origin: (*origin).into(), - size: LengthUnit(60.0), + size, x_axis: (*x_axis).into(), y_axis: (*y_axis).into(), - hide: Some(true), + hide, }), ) .await?; - - id } - }; + } Ok(Box::new(plane)) } From 77293952c04ea33e6697795f18a05b9a22756503 Mon Sep 17 00:00:00 2001 From: Kevin Nadro Date: Wed, 4 Dec 2024 16:57:17 -0500 Subject: [PATCH 04/15] fix: upon entering sketch mode, axis do not rotate. (#4572) * fix: upon entering sketch mode, axis do not rotate. * fix: camera settings has the up vector to set, this should now work --- src/clientSideScene/CameraControls.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/clientSideScene/CameraControls.ts b/src/clientSideScene/CameraControls.ts index fdc83ab70..a0d9553d2 100644 --- a/src/clientSideScene/CameraControls.ts +++ b/src/clientSideScene/CameraControls.ts @@ -273,14 +273,26 @@ export class CameraControls { camSettings.center.y, camSettings.center.z ) - const quat = new Quaternion( + const orientation = new Quaternion( camSettings.orientation.x, camSettings.orientation.y, camSettings.orientation.z, camSettings.orientation.w ).invert() - this.camera.up.copy(new Vector3(0, 1, 0).applyQuaternion(quat)) + const newUp = new Vector3( + camSettings.up.x, + camSettings.up.y, + camSettings.up.z + ) + this.camera.quaternion.set( + orientation.x, + orientation.y, + orientation.z, + orientation.w + ) + this.camera.up.copy(newUp) + this.camera.updateProjectionMatrix() if (this.camera instanceof PerspectiveCamera && camSettings.ortho) { this.useOrthographicCamera() } @@ -1164,7 +1176,7 @@ export class CameraControls { this.camera.updateProjectionMatrix() } - if (this.syncDirection === 'clientToEngine' || forceUpdate) + if (this.syncDirection === 'clientToEngine' || forceUpdate) { this.throttledUpdateEngineCamera({ quaternion: this.camera.quaternion, position: this.camera.position, @@ -1172,6 +1184,7 @@ export class CameraControls { isPerspective: this.isPerspective, target: this.target, }) + } this.deferReactUpdate(this.reactCameraProperties) Object.values(this._camChangeCallbacks).forEach((cb) => cb()) } From 417d720b223e827212159950f16776fab5699de7 Mon Sep 17 00:00:00 2001 From: Pierre Jacquier Date: Wed, 4 Dec 2024 17:24:16 -0500 Subject: [PATCH 05/15] Point-and-click Loft (#4605) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP: experimenting with Loft UI Relates to #4470 * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Add selection guard * Working loft for two sketches in the right hardcoded order * First pass at handling more than 2 sketches * WIP selections * WIP selections * More checks * Appends the loft line after the 'last' sketch in the code * Clean up * Enable multiple selections after the button click * First point-click loft test (not working locally, loft gets inserted at the wrong place) * Lint * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * Clean up and working pw test * Add test for doesSceneHaveSweepableSketch with count = 2 * Clean up loftSketches function * Add pw test for preselected sketches * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Trigger CI * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Move to fromPromise-based Actor * Move error logic out of loftSketches, fix pw tests * Remove comments * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Trigger CI * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Trigger CI * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Fix typo * Revert snapshots * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Trigger CI * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Trigger CI --------- Co-authored-by: github-actions[bot] --- e2e/playwright/fixtures/toolbarFixture.ts | 2 + e2e/playwright/point-click.spec.ts | 91 ++++++++++++++++++ ...ld-be-stable--XZ-1-Google-Chrome-linux.png | Bin 40585 -> 40506 bytes ...ld-be-stable--XZ-1-Google-Chrome-win32.png | Bin 41115 -> 41337 bytes ...uld-be-stable-XY-1-Google-Chrome-linux.png | Bin 39088 -> 39315 bytes ...uld-be-stable-XY-1-Google-Chrome-win32.png | Bin 39713 -> 39904 bytes src/components/ModelingMachineProvider.tsx | 16 +++ src/lang/modifyAst.ts | 31 ++++++ src/lang/queryAst.test.ts | 12 +++ src/lang/queryAst.ts | 8 +- .../modelingCommandConfig.ts | 17 ++++ src/lib/constants.ts | 1 + src/lib/selections.ts | 20 ++++ src/lib/toolbar.ts | 9 +- src/machines/modelingMachine.ts | 65 +++++++++++++ 15 files changed, 267 insertions(+), 5 deletions(-) diff --git a/e2e/playwright/fixtures/toolbarFixture.ts b/e2e/playwright/fixtures/toolbarFixture.ts index a271a84e3..509adf2e0 100644 --- a/e2e/playwright/fixtures/toolbarFixture.ts +++ b/e2e/playwright/fixtures/toolbarFixture.ts @@ -6,6 +6,7 @@ export class ToolbarFixture { public page: Page extrudeButton!: Locator + loftButton!: Locator offsetPlaneButton!: Locator startSketchBtn!: Locator lineBtn!: Locator @@ -26,6 +27,7 @@ export class ToolbarFixture { reConstruct = (page: Page) => { this.page = page this.extrudeButton = page.getByTestId('extrude') + this.loftButton = page.getByTestId('loft') this.offsetPlaneButton = page.getByTestId('plane-offset') this.startSketchBtn = page.getByTestId('sketch') this.lineBtn = page.getByTestId('line') diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts index 7c5abb851..8b77676e6 100644 --- a/e2e/playwright/point-click.spec.ts +++ b/e2e/playwright/point-click.spec.ts @@ -677,3 +677,94 @@ test(`Offset plane point-and-click`, async ({ await scene.expectPixelColor([74, 74, 74], testPoint, 15) }) }) + +const loftPointAndClickCases = [ + { shouldPreselect: true }, + { shouldPreselect: false }, +] +loftPointAndClickCases.forEach(({ shouldPreselect }) => { + test(`Loft point-and-click (preselected sketches: ${shouldPreselect})`, async ({ + app, + page, + scene, + editor, + toolbar, + cmdBar, + }) => { + const initialCode = `sketch001 = startSketchOn('XZ') + |> circle({ center = [0, 0], radius = 30 }, %) + plane001 = offsetPlane('XZ', 50) + sketch002 = startSketchOn(plane001) + |> circle({ center = [0, 0], radius = 20 }, %) +` + await app.initialise(initialCode) + + // One dumb hardcoded screen pixel value + const testPoint = { x: 575, y: 200 } + const [clickOnSketch1] = scene.makeMouseHelpers(testPoint.x, testPoint.y) + const [clickOnSketch2] = scene.makeMouseHelpers( + testPoint.x, + testPoint.y + 80 + ) + const loftDeclaration = 'loft001 = loft([sketch001, sketch002])' + + await test.step(`Look for the white of the sketch001 shape`, async () => { + await scene.expectPixelColor([254, 254, 254], testPoint, 15) + }) + + async function selectSketches() { + await clickOnSketch1() + await page.keyboard.down('Shift') + await clickOnSketch2() + await app.page.waitForTimeout(500) + await page.keyboard.up('Shift') + } + + if (!shouldPreselect) { + await test.step(`Go through the command bar flow without preselected sketches`, async () => { + await toolbar.loftButton.click() + await cmdBar.expectState({ + stage: 'arguments', + currentArgKey: 'selection', + currentArgValue: '', + headerArguments: { Selection: '' }, + highlightedHeaderArg: 'selection', + commandName: 'Loft', + }) + await selectSketches() + await cmdBar.progressCmdBar() + await cmdBar.expectState({ + stage: 'review', + headerArguments: { Selection: '2 faces' }, + commandName: 'Loft', + }) + await cmdBar.progressCmdBar() + }) + } else { + await test.step(`Preselect the two sketches`, async () => { + await selectSketches() + }) + + await test.step(`Go through the command bar flow with preselected sketches`, async () => { + await toolbar.loftButton.click() + await cmdBar.progressCmdBar() + await cmdBar.expectState({ + stage: 'review', + headerArguments: { Selection: '2 faces' }, + commandName: 'Loft', + }) + await cmdBar.progressCmdBar() + }) + } + + await test.step(`Confirm code is added to the editor, scene has changed`, async () => { + await editor.expectEditor.toContain(loftDeclaration) + await editor.expectState({ + diagnostics: [], + activeLines: [loftDeclaration], + highlightedCode: '', + }) + await scene.expectPixelColor([89, 89, 89], testPoint, 15) + }) + }) +}) diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-linux.png index 45799475c4a51bc6e1383753a018b8f842e6c147..86fb84906836b37e6df5b4f4b66dcfc3668219cc 100644 GIT binary patch literal 40506 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 O5wg-sQpJ)_{Qoae6>v-d literal 40585 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∓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 C9+fx% diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable--XZ-1-Google-Chrome-win32.png index 4442073d230b2175e0b1d74e07450611f409ddf6..245e822c694685ea6556db004f0aa44b6359e63e 100644 GIT binary patch literal 41337 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
lQ#848-(7JI$ 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 EKdZYMssI20 literal 41115 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 OF=DoTpb@)!k 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 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XY-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/extrude-on-default-planes-should-be-stable-XY-1-Google-Chrome-win32.png index 6adcd1517b9618be159bb7cf668f1fac0bc1f3f8..aa989becd96b031044663c9171e8edae63ddfed3 100644 GIT binary patch literal 39904 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 x2zVxv1|$GLW { + const hasNoSelection = + selectionRanges.graphSelections.length === 0 || + isRangeBetweenCharacters(selectionRanges) || + isSelectionLastLine(selectionRanges, codeManager.code) + + if (hasNoSelection) { + const count = 2 + return doesSceneHaveSweepableSketch(kclManager.ast, count) + } + + const canLoft = canLoftSelection(selectionRanges) + if (err(canLoft)) return false + return canLoft + }, 'has valid selection for deletion': ({ context: { selectionRanges }, }) => { diff --git a/src/lang/modifyAst.ts b/src/lang/modifyAst.ts index 0903c60ac..c5e48ca22 100644 --- a/src/lang/modifyAst.ts +++ b/src/lang/modifyAst.ts @@ -346,6 +346,37 @@ export function extrudeSketch( } } +export function loftSketches( + node: Node, + declarators: VariableDeclarator[] +): { + modifiedAst: Node + pathToNode: PathToNode +} { + const modifiedAst = structuredClone(node) + const name = findUniqueName(node, KCL_DEFAULT_CONSTANT_PREFIXES.LOFT) + const elements = declarators.map((d) => createIdentifier(d.id.name)) + const loft = createCallExpressionStdLib('loft', [ + createArrayExpression(elements), + ]) + const declaration = createVariableDeclaration(name, loft) + modifiedAst.body.push(declaration) + const pathToNode: PathToNode = [ + ['body', ''], + [modifiedAst.body.length - 1, 'index'], + ['declarations', 'VariableDeclaration'], + ['0', 'index'], + ['init', 'VariableDeclarator'], + ['arguments', 'CallExpression'], + [0, 'index'], + ] + + return { + modifiedAst, + pathToNode, + } +} + export function revolveSketch( node: Node, pathToNode: PathToNode, diff --git a/src/lang/queryAst.test.ts b/src/lang/queryAst.test.ts index 679cc6b0e..2268e3572 100644 --- a/src/lang/queryAst.test.ts +++ b/src/lang/queryAst.test.ts @@ -628,6 +628,18 @@ sketch002 = startSketchOn(extrude001, $seg01) const extrudable = doesSceneHaveSweepableSketch(ast) expect(extrudable).toBeTruthy() }) + it('finds sketch001 and sketch002 pipes to be lofted', async () => { + const exampleCode = `sketch001 = startSketchOn('XZ') + |> circle({ center = [0, 0], radius = 1 }, %) +plane001 = offsetPlane('XZ', 2) +sketch002 = startSketchOn(plane001) + |> circle({ center = [0, 0], radius = 3 }, %) +` + const ast = parse(exampleCode) + if (err(ast)) throw ast + const extrudable = doesSceneHaveSweepableSketch(ast, 2) + expect(extrudable).toBeTruthy() + }) it('find sketch002 NOT pipe to be extruded', async () => { const exampleCode = `sketch001 = startSketchOn('XZ') |> startProfileAt([3.29, 7.86], %) diff --git a/src/lang/queryAst.ts b/src/lang/queryAst.ts index 85360c4f1..2ab0c405f 100644 --- a/src/lang/queryAst.ts +++ b/src/lang/queryAst.ts @@ -975,7 +975,9 @@ export function hasSketchPipeBeenExtruded(selection: Selection, ast: Program) { if ( node.type === 'CallExpression' && node.callee.type === 'Identifier' && - (node.callee.name === 'extrude' || node.callee.name === 'revolve') && + (node.callee.name === 'extrude' || + node.callee.name === 'revolve' || + node.callee.name === 'loft') && node.arguments?.[1]?.type === 'Identifier' && node.arguments[1].name === varDec.id.name ) { @@ -988,7 +990,7 @@ export function hasSketchPipeBeenExtruded(selection: Selection, ast: Program) { } /** File must contain at least one sketch that has not been extruded already */ -export function doesSceneHaveSweepableSketch(ast: Node) { +export function doesSceneHaveSweepableSketch(ast: Node, count = 1) { const theMap: any = {} traverse(ast as any, { enter(node) { @@ -1037,7 +1039,7 @@ export function doesSceneHaveSweepableSketch(ast: Node) { } }, }) - return Object.keys(theMap).length > 0 + return Object.keys(theMap).length >= count } export function getObjExprProperty( diff --git a/src/lib/commandBarConfigs/modelingCommandConfig.ts b/src/lib/commandBarConfigs/modelingCommandConfig.ts index b3145a729..14acaaaa3 100644 --- a/src/lib/commandBarConfigs/modelingCommandConfig.ts +++ b/src/lib/commandBarConfigs/modelingCommandConfig.ts @@ -31,6 +31,9 @@ export type ModelingCommandSchema = { // result: (typeof EXTRUSION_RESULTS)[number] distance: KclCommandValue } + Loft: { + selection: Selections + } Revolve: { selection: Selections angle: KclCommandValue @@ -260,6 +263,20 @@ export const modelingMachineCommandConfig: StateMachineCommandSetConfig< }, }, }, + Loft: { + description: 'Create a 3D body by blending between two or more sketches', + icon: 'loft', + needsReview: true, + args: { + selection: { + inputType: 'selection', + selectionTypes: ['solid2D'], + multiple: true, + required: true, + skip: false, + }, + }, + }, // TODO: Update this configuration, copied from extrude for MVP of revolve, specifically the args.selection Revolve: { description: 'Create a 3D body by rotating a sketch region about an axis.', diff --git a/src/lib/constants.ts b/src/lib/constants.ts index d80983c93..cf072e985 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -52,6 +52,7 @@ export const ONBOARDING_PROJECT_NAME = 'Tutorial Project $nn' export const KCL_DEFAULT_CONSTANT_PREFIXES = { SKETCH: 'sketch', EXTRUDE: 'extrude', + LOFT: 'loft', SEGMENT: 'seg', REVOLVE: 'revolve', PLANE: 'plane', diff --git a/src/lib/selections.ts b/src/lib/selections.ts index 05c757c33..88004bdd8 100644 --- a/src/lib/selections.ts +++ b/src/lib/selections.ts @@ -529,6 +529,10 @@ function nodeHasExtrude(node: CommonASTNode) { doesPipeHaveCallExp({ calleeName: 'revolve', ...node, + }) || + doesPipeHaveCallExp({ + calleeName: 'loft', + ...node, }) ) } @@ -559,6 +563,22 @@ export function canSweepSelection(selection: Selections) { ) } +export function canLoftSelection(selection: Selections) { + const commonNodes = selection.graphSelections.map((_, i) => + buildCommonNodeFromSelection(selection, i) + ) + return ( + !!isCursorInSketchCommandRange( + engineCommandManager.artifactGraph, + selection + ) && + commonNodes.length > 1 && + commonNodes.every((n) => !hasSketchPipeBeenExtruded(n.selection, n.ast)) && + commonNodes.every((n) => nodeHasClose(n) || nodeHasCircle(n)) && + commonNodes.every((n) => !nodeHasExtrude(n)) + ) +} + // This accounts for non-geometry selections under "other" export type ResolvedSelectionType = Artifact['type'] | 'other' export type SelectionCountsByType = Map diff --git a/src/lib/toolbar.ts b/src/lib/toolbar.ts index ed7aa2a25..0535a3dcc 100644 --- a/src/lib/toolbar.ts +++ b/src/lib/toolbar.ts @@ -139,9 +139,14 @@ export const toolbarConfig: Record = { }, { id: 'loft', - onClick: () => console.error('Loft not yet implemented'), + onClick: ({ commandBarSend }) => + commandBarSend({ + type: 'Find and select command', + data: { name: 'Loft', groupId: 'modeling' }, + }), + disabled: (state) => !state.can({ type: 'Loft' }), icon: 'loft', - status: 'kcl-only', + status: 'available', title: 'Loft', hotkey: 'L', description: diff --git a/src/machines/modelingMachine.ts b/src/machines/modelingMachine.ts index 04c005f56..59d65082c 100644 --- a/src/machines/modelingMachine.ts +++ b/src/machines/modelingMachine.ts @@ -44,6 +44,7 @@ import { addOffsetPlane, deleteFromSelection, extrudeSketch, + loftSketches, revolveSketch, } from 'lang/modifyAst' import { @@ -256,6 +257,7 @@ export type ModelingMachineEvent = | { type: 'Export'; data: ModelingCommandSchema['Export'] } | { type: 'Make'; data: ModelingCommandSchema['Make'] } | { type: 'Extrude'; data?: ModelingCommandSchema['Extrude'] } + | { type: 'Loft'; data?: ModelingCommandSchema['Loft'] } | { type: 'Revolve'; data?: ModelingCommandSchema['Revolve'] } | { type: 'Fillet'; data?: ModelingCommandSchema['Fillet'] } | { type: 'Offset plane'; data: ModelingCommandSchema['Offset plane'] } @@ -387,6 +389,7 @@ export const modelingMachine = setup({ guards: { 'Selection is on face': () => false, 'has valid sweep selection': () => false, + 'has valid loft selection': () => false, 'has valid edge treatment selection': () => false, 'Has exportable geometry': () => false, 'has valid selection for deletion': () => false, @@ -1529,6 +1532,50 @@ export const modelingMachine = setup({ updateAstResult.newAst ) + if (updateAstResult?.selections) { + editorManager.selectRange(updateAstResult?.selections) + } + } + ), + loftAstMod: fromPromise( + async ({ + input, + }: { + input: ModelingCommandSchema['Loft'] | undefined + }) => { + if (!input) return new Error('No input provided') + // Extract inputs + const ast = kclManager.ast + const { selection } = input + const declarators = selection.graphSelections.flatMap((s) => { + const path = getNodePathFromSourceRange(ast, s?.codeRef.range) + const nodeFromPath = getNodeFromPath( + ast, + path, + 'VariableDeclarator' + ) + return err(nodeFromPath) ? [] : nodeFromPath.node + }) + + // TODO: add better validation on selection + if (!(declarators && declarators.length > 1)) { + trap('Not enough sketches selected') + } + + // Perform the loft + const loftSketchesRes = loftSketches(ast, declarators) + const updateAstResult = await kclManager.updateAst( + loftSketchesRes.modifiedAst, + true, + { + focusPath: [loftSketchesRes.pathToNode], + } + ) + + await codeManager.updateEditorWithAstAndWriteToFile( + updateAstResult.newAst + ) + if (updateAstResult?.selections) { editorManager.selectRange(updateAstResult?.selections) } @@ -1570,6 +1617,11 @@ export const modelingMachine = setup({ reenter: false, }, + Loft: { + target: 'Applying loft', + reenter: true, + }, + Fillet: { target: 'idle', guard: 'has valid edge treatment selection', @@ -2318,6 +2370,19 @@ export const modelingMachine = setup({ onError: ['idle'], }, }, + + 'Applying loft': { + invoke: { + src: 'loftAstMod', + id: 'loftAstMod', + input: ({ event }) => { + if (event.type !== 'Loft') return undefined + return event.data + }, + onDone: ['idle'], + onError: ['idle'], + }, + }, }, initial: 'idle', From cab0c1e6a1ec969f54cd0e36ca2ffc6c813def30 Mon Sep 17 00:00:00 2001 From: Pierre Jacquier Date: Wed, 4 Dec 2024 19:06:17 -0500 Subject: [PATCH 06/15] Add list of commits as changelog between nightly builds (#4654) --- .github/workflows/build-apps.yml | 11 +++++++++++ scripts/flip-files-to-nightly.sh | 4 +++- scripts/get-nightly-changelog.sh | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100755 scripts/get-nightly-changelog.sh diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index 930038027..ba1bc55ea 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -382,3 +382,14 @@ jobs: glob: '*' parent: false destination: 'dl.kittycad.io/releases/modeling-app/nightly' + + - name: Tag nightly commit + if: ${{ env.IS_NIGHTLY == 'true' }} + uses: actions/github-script@v7 + with: + script: | + const { VERSION } = process.env + const { owner, repo } = context.repo + const { sha } = context + const ref = `refs/tags/nightly-${VERSION}` + github.rest.git.createRef({ owner, repo, sha, ref }) diff --git a/scripts/flip-files-to-nightly.sh b/scripts/flip-files-to-nightly.sh index 7ed512e01..89f407240 100755 --- a/scripts/flip-files-to-nightly.sh +++ b/scripts/flip-files-to-nightly.sh @@ -1,6 +1,8 @@ #!/bin/bash export VERSION=$(date +'%-y.%-m.%-d') +export TAG="nightly-v$VERSION" +export PREVIOUS_TAG=$(git describe --tags --match="nightly-v[0-9]*" --abbrev=0) export COMMIT=$(git rev-parse --short HEAD) # package.json @@ -13,7 +15,7 @@ yq -i '.publish[0].url = "https://dl.zoo.dev/releases/modeling-app/nightly"' ele yq -i '.appId = "dev.zoo.modeling-app-nightly"' electron-builder.yml # Release notes -echo "Nightly build $VERSION (commit $COMMIT)" > release-notes.md +./scripts/get-nightly-changelog.sh > release-notes.md # icons cp assets/icon-nightly.png assets/icon.png diff --git a/scripts/get-nightly-changelog.sh b/scripts/get-nightly-changelog.sh new file mode 100755 index 000000000..c599f4df8 --- /dev/null +++ b/scripts/get-nightly-changelog.sh @@ -0,0 +1,5 @@ +#!/bin/bash +echo "## What's Changed" +git log ${PREVIOUS_TAG}..HEAD --oneline --pretty=format:%s | grep -v Bump | awk '{print "* "toupper(substr($0,0,1))substr($0,2)}' +echo "" +echo "**Full Changelog**: https://github.com/KittyCAD/modeling-app/compare/${PREVIOUS_TAG}...${TAG}" From 60a0c811ab59a237bdebba7386dc8361b51e9ecf Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Thu, 5 Dec 2024 17:56:49 +1300 Subject: [PATCH 07/15] Move parsing files around (#4626) Signed-off-by: Nick Cameron --- src/wasm-lib/derive-docs/src/lib.rs | 2 +- .../derive-docs/tests/args_with_lifetime.gen | 2 +- .../derive-docs/tests/args_with_refs.gen | 2 +- src/wasm-lib/derive-docs/tests/array.gen | 2 +- src/wasm-lib/derive-docs/tests/box.gen | 2 +- .../tests/doc_comment_with_code.gen | 2 +- src/wasm-lib/derive-docs/tests/lineTo.gen | 2 +- src/wasm-lib/derive-docs/tests/min.gen | 2 +- src/wasm-lib/derive-docs/tests/option.gen | 2 +- .../derive-docs/tests/option_input_format.gen | 2 +- .../tests/return_vec_box_sketch.gen | 2 +- .../derive-docs/tests/return_vec_sketch.gen | 2 +- src/wasm-lib/derive-docs/tests/show.gen | 2 +- .../tests/test_args_with_exec_state.gen | 2 +- src/wasm-lib/kcl/src/ast/mod.rs | 2 - src/wasm-lib/kcl/src/docs/mod.rs | 6 +- src/wasm-lib/kcl/src/executor.rs | 14 +- src/wasm-lib/kcl/src/function_param.rs | 4 +- src/wasm-lib/kcl/src/kcl_value.rs | 6 +- src/wasm-lib/kcl/src/lib.rs | 18 +- .../kcl/src/lint/checks/camel_case.rs | 2 +- .../kcl/src/lint/checks/offset_plane.rs | 2 +- .../kcl/src/lint/checks/std_lib_args.rs | 2 +- src/wasm-lib/kcl/src/lint/rule.rs | 4 +- .../kcl/src/lsp/kcl/custom_notifications.rs | 4 +- src/wasm-lib/kcl/src/lsp/kcl/mod.rs | 36 ++-- src/wasm-lib/kcl/src/lsp/tests.rs | 2 +- src/wasm-lib/kcl/src/parser/bad_inputs.rs | 14 -- .../src/{ast/types => parsing/ast}/digest.rs | 62 +++++- .../src/{ast/types => parsing/ast}/execute.rs | 10 +- src/wasm-lib/kcl/src/parsing/ast/mod.rs | 5 + .../kcl/src/{ => parsing}/ast/modify.rs | 10 +- .../types => parsing/ast}/source_range.rs | 2 +- .../src/{ => parsing}/ast/types/condition.rs | 2 +- .../{ => parsing}/ast/types/literal_value.rs | 2 +- .../types.rs => parsing/ast/types/mod.rs} | 79 ++------ .../kcl/src/{ => parsing}/ast/types/none.rs | 2 +- .../{parser/parser_impl => parsing}/error.rs | 2 +- .../kcl/src/{parser => parsing}/math.rs | 5 +- .../kcl/src/{parser.rs => parsing/mod.rs} | 35 +++- .../parser_impl.rs => parsing/parser.rs} | 176 +++++++++--------- ...sing__parser__snapshot_math_tests__a.snap} | 4 +- ...sing__parser__snapshot_math_tests__b.snap} | 4 +- ...sing__parser__snapshot_math_tests__c.snap} | 4 +- ...sing__parser__snapshot_math_tests__d.snap} | 4 +- ...sing__parser__snapshot_math_tests__e.snap} | 4 +- ...sing__parser__snapshot_math_tests__f.snap} | 4 +- ...sing__parser__snapshot_math_tests__g.snap} | 4 +- ...sing__parser__snapshot_math_tests__h.snap} | 4 +- ...sing__parser__snapshot_math_tests__i.snap} | 4 +- ...sing__parser__snapshot_math_tests__j.snap} | 4 +- ...sing__parser__snapshot_math_tests__k.snap} | 4 +- ...__parsing__parser__snapshot_tests__a.snap} | 3 +- ..._parsing__parser__snapshot_tests__aa.snap} | 3 +- ..._parsing__parser__snapshot_tests__ab.snap} | 3 +- ..._parsing__parser__snapshot_tests__ac.snap} | 4 +- ..._parsing__parser__snapshot_tests__ad.snap} | 3 +- ..._parsing__parser__snapshot_tests__ae.snap} | 3 +- ..._parsing__parser__snapshot_tests__af.snap} | 3 +- ..._parsing__parser__snapshot_tests__ag.snap} | 3 +- ..._parsing__parser__snapshot_tests__ah.snap} | 3 +- ..._parsing__parser__snapshot_tests__ai.snap} | 3 +- ..._parsing__parser__snapshot_tests__aj.snap} | 3 +- ..._parsing__parser__snapshot_tests__ak.snap} | 3 +- ..._parsing__parser__snapshot_tests__al.snap} | 3 +- ..._parsing__parser__snapshot_tests__am.snap} | 3 +- ..._parsing__parser__snapshot_tests__an.snap} | 3 +- ..._parsing__parser__snapshot_tests__ao.snap} | 3 +- ..._parsing__parser__snapshot_tests__ap.snap} | 3 +- ..._parsing__parser__snapshot_tests__aq.snap} | 3 +- ..._parsing__parser__snapshot_tests__ar.snap} | 4 +- ..._parsing__parser__snapshot_tests__at.snap} | 3 +- ..._parsing__parser__snapshot_tests__au.snap} | 3 +- ..._parsing__parser__snapshot_tests__av.snap} | 3 +- ..._parsing__parser__snapshot_tests__aw.snap} | 4 +- ..._parsing__parser__snapshot_tests__ax.snap} | 4 +- ..._parsing__parser__snapshot_tests__ay.snap} | 4 +- ..._parsing__parser__snapshot_tests__az.snap} | 4 +- ...__parsing__parser__snapshot_tests__b.snap} | 3 +- ..._parsing__parser__snapshot_tests__ba.snap} | 3 +- ..._parsing__parser__snapshot_tests__bb.snap} | 4 +- ..._parsing__parser__snapshot_tests__bc.snap} | 4 +- ..._parsing__parser__snapshot_tests__bd.snap} | 3 +- ..._parsing__parser__snapshot_tests__be.snap} | 4 +- ..._parsing__parser__snapshot_tests__bf.snap} | 4 +- ..._parsing__parser__snapshot_tests__bg.snap} | 4 +- ..._parsing__parser__snapshot_tests__bh.snap} | 4 +- ..._parsing__parser__snapshot_tests__bi.snap} | 4 +- ...__parsing__parser__snapshot_tests__c.snap} | 3 +- ...__parsing__parser__snapshot_tests__d.snap} | 3 +- ..._parsing__parser__snapshot_tests__d2.snap} | 3 +- ...__parsing__parser__snapshot_tests__e.snap} | 4 +- ...__parsing__parser__snapshot_tests__f.snap} | 4 +- ...__parsing__parser__snapshot_tests__g.snap} | 4 +- ...__parsing__parser__snapshot_tests__h.snap} | 4 +- ...__parsing__parser__snapshot_tests__i.snap} | 4 +- ...__parsing__parser__snapshot_tests__j.snap} | 4 +- ...__parsing__parser__snapshot_tests__k.snap} | 4 +- ...napshot_tests__kw_function_all_named.snap} | 3 +- ...hot_tests__kw_function_unnamed_first.snap} | 3 +- ...__parsing__parser__snapshot_tests__l.snap} | 4 +- ...__parsing__parser__snapshot_tests__m.snap} | 4 +- ...__parsing__parser__snapshot_tests__n.snap} | 4 +- ...__parsing__parser__snapshot_tests__o.snap} | 4 +- ...__parsing__parser__snapshot_tests__p.snap} | 4 +- ...__parsing__parser__snapshot_tests__q.snap} | 4 +- ...__parsing__parser__snapshot_tests__r.snap} | 4 +- ...__parsing__parser__snapshot_tests__s.snap} | 3 +- ...__parsing__parser__snapshot_tests__t.snap} | 3 +- ...__parsing__parser__snapshot_tests__u.snap} | 3 +- ...__parsing__parser__snapshot_tests__v.snap} | 4 +- ...__parsing__parser__snapshot_tests__w.snap} | 3 +- ...__parsing__parser__snapshot_tests__x.snap} | 3 +- ...__parsing__parser__snapshot_tests__y.snap} | 3 +- ...__parsing__parser__snapshot_tests__z.snap} | 3 +- .../src/{token.rs => parsing/token/mod.rs} | 2 +- .../kcl/src/{ => parsing}/token/tokeniser.rs | 6 +- src/wasm-lib/kcl/src/simulation_tests.rs | 6 +- src/wasm-lib/kcl/src/std/args.rs | 6 +- src/wasm-lib/kcl/src/std/chamfer.rs | 2 +- src/wasm-lib/kcl/src/std/fillet.rs | 2 +- src/wasm-lib/kcl/src/std/kcl_stdlib.rs | 2 +- src/wasm-lib/kcl/src/std/mod.rs | 4 +- src/wasm-lib/kcl/src/std/shapes.rs | 2 +- src/wasm-lib/kcl/src/std/sketch.rs | 2 +- src/wasm-lib/kcl/src/unparser.rs | 118 ++++++------ src/wasm-lib/kcl/src/walk/ast_node.rs | 2 +- src/wasm-lib/kcl/src/walk/ast_walk.rs | 4 +- 128 files changed, 500 insertions(+), 455 deletions(-) delete mode 100644 src/wasm-lib/kcl/src/ast/mod.rs delete mode 100644 src/wasm-lib/kcl/src/parser/bad_inputs.rs rename src/wasm-lib/kcl/src/{ast/types => parsing/ast}/digest.rs (87%) rename src/wasm-lib/kcl/src/{ast/types => parsing/ast}/execute.rs (99%) create mode 100644 src/wasm-lib/kcl/src/parsing/ast/mod.rs rename src/wasm-lib/kcl/src/{ => parsing}/ast/modify.rs (99%) rename src/wasm-lib/kcl/src/{ast/types => parsing/ast}/source_range.rs (96%) rename src/wasm-lib/kcl/src/{ => parsing}/ast/types/condition.rs (98%) rename src/wasm-lib/kcl/src/{ => parsing}/ast/types/literal_value.rs (97%) rename src/wasm-lib/kcl/src/{ast/types.rs => parsing/ast/types/mod.rs} (98%) rename src/wasm-lib/kcl/src/{ => parsing}/ast/types/none.rs (97%) rename src/wasm-lib/kcl/src/{parser/parser_impl => parsing}/error.rs (99%) rename src/wasm-lib/kcl/src/{parser => parsing}/math.rs (97%) rename src/wasm-lib/kcl/src/{parser.rs => parsing/mod.rs} (85%) rename src/wasm-lib/kcl/src/{parser/parser_impl.rs => parsing/parser.rs} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__a.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__a.snap} (86%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__b.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__b.snap} (86%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__c.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__c.snap} (86%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__d.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__d.snap} (91%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__e.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__e.snap} (91%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__f.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__f.snap} (94%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__g.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__g.snap} (94%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__h.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__h.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__i.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__i.snap} (91%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__j.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__j.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__k.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__k.snap} (86%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__a.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap} (99%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aa.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aa.snap} (94%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ab.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ab.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ac.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ac.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ad.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ad.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ae.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ae.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__af.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap} (99%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ag.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ah.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ai.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aj.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ak.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ak.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__al.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__al.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__am.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__am.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__an.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__an.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ao.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ao.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ap.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aq.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ar.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ar.snap} (92%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__at.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__au.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__av.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aw.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aw.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ax.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ax.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ay.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ay.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__az.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__az.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__b.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ba.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ba.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bb.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bb.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bc.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bc.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bd.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bd.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__be.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__be.snap} (94%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bf.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bf.snap} (94%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bg.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bg.snap} (92%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bh.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bh.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bi.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bi.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__c.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d2.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d2.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__e.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__e.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__f.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__f.snap} (94%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__g.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__g.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__h.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__h.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__i.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__i.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__j.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__j.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__k.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__k.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_all_named.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_all_named.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_unnamed_first.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_unnamed_first.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__l.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__l.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__m.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__m.snap} (98%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__n.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__n.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__o.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__o.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__p.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__p.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__q.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__q.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__r.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__r.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__s.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__s.snap} (96%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__t.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__t.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__u.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__u.snap} (97%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__v.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__v.snap} (94%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__w.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__w.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__x.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__x.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__y.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap} (95%) rename src/wasm-lib/kcl/src/{parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__z.snap => parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap} (98%) rename src/wasm-lib/kcl/src/{token.rs => parsing/token/mod.rs} (99%) rename src/wasm-lib/kcl/src/{ => parsing}/token/tokeniser.rs (99%) diff --git a/src/wasm-lib/derive-docs/src/lib.rs b/src/wasm-lib/derive-docs/src/lib.rs index c051bc31f..582904ec6 100644 --- a/src/wasm-lib/derive-docs/src/lib.rs +++ b/src/wasm-lib/derive-docs/src/lib.rs @@ -171,7 +171,7 @@ fn do_stdlib_inner( code_blocks.iter().map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }).collect::>() diff --git a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen index db1a2ba31..b5f3e2c56 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for SomeFn { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/args_with_refs.gen b/src/wasm-lib/derive-docs/tests/args_with_refs.gen index fd7b59cff..3cb7d99eb 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_refs.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_refs.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for SomeFn { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/array.gen b/src/wasm-lib/derive-docs/tests/array.gen index e71f76646..44b941bd5 100644 --- a/src/wasm-lib/derive-docs/tests/array.gen +++ b/src/wasm-lib/derive-docs/tests/array.gen @@ -150,7 +150,7 @@ impl crate::docs::StdLibFn for Show { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/box.gen b/src/wasm-lib/derive-docs/tests/box.gen index e9c1abc08..322bd58e1 100644 --- a/src/wasm-lib/derive-docs/tests/box.gen +++ b/src/wasm-lib/derive-docs/tests/box.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for Show { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen index b734cd912..60ccaaa76 100644 --- a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen +++ b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen @@ -150,7 +150,7 @@ impl crate::docs::StdLibFn for MyFunc { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/lineTo.gen b/src/wasm-lib/derive-docs/tests/lineTo.gen index e3b811848..00e587e3c 100644 --- a/src/wasm-lib/derive-docs/tests/lineTo.gen +++ b/src/wasm-lib/derive-docs/tests/lineTo.gen @@ -158,7 +158,7 @@ impl crate::docs::StdLibFn for LineTo { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/min.gen b/src/wasm-lib/derive-docs/tests/min.gen index 09b67fd92..402e3ebd1 100644 --- a/src/wasm-lib/derive-docs/tests/min.gen +++ b/src/wasm-lib/derive-docs/tests/min.gen @@ -150,7 +150,7 @@ impl crate::docs::StdLibFn for Min { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/option.gen b/src/wasm-lib/derive-docs/tests/option.gen index 4722dd055..b83afd894 100644 --- a/src/wasm-lib/derive-docs/tests/option.gen +++ b/src/wasm-lib/derive-docs/tests/option.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for Show { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/option_input_format.gen b/src/wasm-lib/derive-docs/tests/option_input_format.gen index 5ef7c07e2..077ee7aec 100644 --- a/src/wasm-lib/derive-docs/tests/option_input_format.gen +++ b/src/wasm-lib/derive-docs/tests/option_input_format.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for Import { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen index 508d714b8..a7acb1e69 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for Import { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen index d7bb1dfa5..12c405f4f 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for Import { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/show.gen b/src/wasm-lib/derive-docs/tests/show.gen index e966c4a82..5740b8b3e 100644 --- a/src/wasm-lib/derive-docs/tests/show.gen +++ b/src/wasm-lib/derive-docs/tests/show.gen @@ -113,7 +113,7 @@ impl crate::docs::StdLibFn for Show { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen index 0c400e5c6..01d697696 100644 --- a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen +++ b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen @@ -108,7 +108,7 @@ impl crate::docs::StdLibFn for SomeFunction { .iter() .map(|cb| { let program = crate::Program::parse(cb).unwrap(); - let mut options: crate::ast::types::FormatOptions = Default::default(); + let mut options: crate::parsing::ast::types::FormatOptions = Default::default(); options.insert_final_newline = false; program.ast.recast(&options, 0) }) diff --git a/src/wasm-lib/kcl/src/ast/mod.rs b/src/wasm-lib/kcl/src/ast/mod.rs deleted file mode 100644 index ff0075903..000000000 --- a/src/wasm-lib/kcl/src/ast/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod modify; -pub mod types; diff --git a/src/wasm-lib/kcl/src/docs/mod.rs b/src/wasm-lib/kcl/src/docs/mod.rs index a7dc91db9..69f8ebef9 100644 --- a/src/wasm-lib/kcl/src/docs/mod.rs +++ b/src/wasm-lib/kcl/src/docs/mod.rs @@ -797,7 +797,7 @@ mod tests { #[test] fn test_serialize_function() { - let some_function = crate::ast::types::Function::StdLib { + let some_function = crate::parsing::ast::types::Function::StdLib { func: Box::new(crate::std::sketch::Line), }; let serialized = serde_json::to_string(&some_function).unwrap(); @@ -807,11 +807,11 @@ mod tests { #[test] fn test_deserialize_function() { let some_function_string = r#"{"type":"StdLib","func":{"name":"line","summary":"","description":"","tags":[],"returnValue":{"type":"","required":false,"name":"","schema":{},"schemaDefinitions":{}},"args":[],"unpublished":false,"deprecated":false, "examples": []}}"#; - let some_function: crate::ast::types::Function = serde_json::from_str(some_function_string).unwrap(); + let some_function: crate::parsing::ast::types::Function = serde_json::from_str(some_function_string).unwrap(); assert_eq!( some_function, - crate::ast::types::Function::StdLib { + crate::parsing::ast::types::Function::StdLib { func: Box::new(crate::std::sketch::Line) } ); diff --git a/src/wasm-lib/kcl/src/executor.rs b/src/wasm-lib/kcl/src/executor.rs index 17d7493cf..8c599092a 100644 --- a/src/wasm-lib/kcl/src/executor.rs +++ b/src/wasm-lib/kcl/src/executor.rs @@ -25,10 +25,12 @@ type Point3D = kcmc::shared::Point3d; pub use crate::kcl_value::KclValue; use crate::{ - ast::types::{BodyItem, Expr, FunctionExpression, ItemVisibility, KclNone, Node, NodeRef, TagDeclarator, TagNode}, engine::{EngineManager, ExecutionKind}, errors::{KclError, KclErrorDetails}, fs::{FileManager, FileSystem}, + parsing::ast::types::{ + BodyItem, Expr, FunctionExpression, ItemVisibility, KclNone, Node, NodeRef, TagDeclarator, TagNode, + }, settings::types::UnitLength, source_range::{ModuleId, SourceRange}, std::{args::Arg, StdLib}, @@ -733,7 +735,7 @@ pub type MemoryFunction = fn( s: Vec, memory: ProgramMemory, - expression: crate::ast::types::BoxNode, + expression: crate::parsing::ast::types::BoxNode, metadata: Vec, exec_state: &ExecState, ctx: ExecutorContext, @@ -1842,7 +1844,7 @@ impl ExecutorContext { #[async_recursion] pub(crate) async fn inner_execute<'a>( &'a self, - program: NodeRef<'a, crate::ast::types::Program>, + program: NodeRef<'a, crate::parsing::ast::types::Program>, exec_state: &mut ExecState, body_type: BodyType, ) -> Result, KclError> { @@ -1883,7 +1885,7 @@ impl ExecutorContext { let module_id = exec_state.add_module(resolved_path.clone()); let source = self.fs.read_to_string(&resolved_path, source_range).await?; // TODO handle parsing errors properly - let program = crate::parser::parse_str(&source, module_id).parse_errs_as_err()?; + let program = crate::parsing::parse_str(&source, module_id).parse_errs_as_err()?; let (module_memory, module_exports) = { exec_state.import_stack.push(resolved_path.clone()); let original_execution = self.engine.replace_execution_kind(ExecutionKind::Isolated); @@ -2239,7 +2241,7 @@ mod tests { use pretty_assertions::assert_eq; use super::*; - use crate::ast::types::{Identifier, Node, Parameter}; + use crate::parsing::ast::types::{Identifier, Node, Parameter}; pub async fn parse_execute(code: &str) -> Result { let program = Program::parse(code)?; @@ -3088,7 +3090,7 @@ let w = f() + f() let func_expr = &Node::no_src(FunctionExpression { params, body: Node { - inner: crate::ast::types::Program { + inner: crate::parsing::ast::types::Program { body: Vec::new(), non_code_meta: Default::default(), shebang: None, diff --git a/src/wasm-lib/kcl/src/function_param.rs b/src/wasm-lib/kcl/src/function_param.rs index 07c69c1db..452950699 100644 --- a/src/wasm-lib/kcl/src/function_param.rs +++ b/src/wasm-lib/kcl/src/function_param.rs @@ -1,11 +1,11 @@ use schemars::JsonSchema; use crate::{ - ast::types::FunctionExpression, errors::KclError, executor::{ call_user_defined_function, ExecState, ExecutorContext, KclValue, MemoryFunction, Metadata, ProgramMemory, }, + parsing::ast::types::FunctionExpression, std::args::Arg, }; @@ -14,7 +14,7 @@ use crate::{ pub struct FunctionParam<'a> { pub inner: Option<&'a MemoryFunction>, pub memory: ProgramMemory, - pub fn_expr: crate::ast::types::BoxNode, + pub fn_expr: crate::parsing::ast::types::BoxNode, pub meta: Vec, pub ctx: ExecutorContext, } diff --git a/src/wasm-lib/kcl/src/kcl_value.rs b/src/wasm-lib/kcl/src/kcl_value.rs index ebebd2fc3..371a37467 100644 --- a/src/wasm-lib/kcl/src/kcl_value.rs +++ b/src/wasm-lib/kcl/src/kcl_value.rs @@ -5,10 +5,10 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::{ - ast::types::{FunctionExpression, KclNone, TagDeclarator, TagNode}, errors::KclErrorDetails, exec::{ProgramMemory, Sketch}, executor::{Face, ImportedGeometry, MemoryFunction, Metadata, Plane, SketchSet, Solid, SolidSet, TagIdentifier}, + parsing::ast::types::{FunctionExpression, KclNone, TagDeclarator, TagNode}, std::{args::Arg, FnAsArg}, ExecState, ExecutorContext, KclError, SourceRange, }; @@ -56,7 +56,7 @@ pub enum KclValue { meta: Vec, }, TagIdentifier(Box), - TagDeclarator(crate::ast::types::BoxNode), + TagDeclarator(crate::parsing::ast::types::BoxNode), Plane(Box), Face(Box), Sketch { @@ -75,7 +75,7 @@ pub enum KclValue { #[serde(skip)] func: Option, #[schemars(skip)] - expression: crate::ast::types::BoxNode, + expression: crate::parsing::ast::types::BoxNode, memory: Box, #[serde(rename = "__meta")] meta: Vec, diff --git a/src/wasm-lib/kcl/src/lib.rs b/src/wasm-lib/kcl/src/lib.rs index de4007c3c..121e74214 100644 --- a/src/wasm-lib/kcl/src/lib.rs +++ b/src/wasm-lib/kcl/src/lib.rs @@ -56,7 +56,6 @@ macro_rules! eprint { #[global_allocator] static ALLOC: dhat::Alloc = dhat::Alloc; -mod ast; mod coredump; mod docs; mod engine; @@ -68,7 +67,7 @@ mod kcl_value; pub mod lint; mod log; mod lsp; -mod parser; +mod parsing; mod settings; #[cfg(test)] mod simulation_tests; @@ -77,13 +76,11 @@ mod std; #[cfg(not(target_arch = "wasm32"))] pub mod test_server; mod thread; -mod token; mod unparser; mod walk; #[cfg(target_arch = "wasm32")] mod wasm; -pub use ast::{modify::modify_ast_for_sketch, types::FormatOptions}; pub use coredump::CoreDump; pub use engine::{EngineManager, ExecutionKind}; pub use errors::{ConnectionError, ExecError, KclError}; @@ -92,6 +89,7 @@ pub use lsp::{ copilot::Backend as CopilotLspBackend, kcl::{Backend as KclLspBackend, Server as KclLspServerSubCommand}, }; +pub use parsing::ast::{modify::modify_ast_for_sketch, types::FormatOptions}; pub use settings::types::{project::ProjectConfiguration, Configuration, UnitLength}; pub use source_range::{ModuleId, SourceRange}; @@ -127,7 +125,7 @@ use crate::log::{log, logln}; #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] pub struct Program { #[serde(flatten)] - ast: ast::types::Node, + ast: parsing::ast::types::Node, } #[cfg(any(test, feature = "lsp-test-util"))] @@ -138,14 +136,14 @@ pub use lsp::test_util::kcl_lsp_server; impl Program { pub fn parse(input: &str) -> Result { let module_id = ModuleId::default(); - let tokens = token::lexer(input, module_id)?; + let tokens = parsing::token::lexer(input, module_id)?; // TODO handle parsing errors properly - let ast = parser::parse_tokens(tokens).parse_errs_as_err()?; + let ast = parsing::parse_tokens(tokens).parse_errs_as_err()?; Ok(Program { ast }) } - pub fn compute_digest(&mut self) -> ast::types::digest::Digest { + pub fn compute_digest(&mut self) -> parsing::ast::digest::Digest { self.ast.compute_digest() } @@ -167,8 +165,8 @@ impl Program { } } -impl From> for Program { - fn from(ast: ast::types::Node) -> Program { +impl From> for Program { + fn from(ast: parsing::ast::types::Node) -> Program { Self { ast } } } diff --git a/src/wasm-lib/kcl/src/lint/checks/camel_case.rs b/src/wasm-lib/kcl/src/lint/checks/camel_case.rs index c369febcc..649a6faa2 100644 --- a/src/wasm-lib/kcl/src/lint/checks/camel_case.rs +++ b/src/wasm-lib/kcl/src/lint/checks/camel_case.rs @@ -2,8 +2,8 @@ use anyhow::Result; use convert_case::Casing; use crate::{ - ast::types::{ObjectProperty, VariableDeclarator}, lint::rule::{def_finding, Discovered, Finding}, + parsing::ast::types::{ObjectProperty, VariableDeclarator}, walk::Node, SourceRange, }; diff --git a/src/wasm-lib/kcl/src/lint/checks/offset_plane.rs b/src/wasm-lib/kcl/src/lint/checks/offset_plane.rs index 7bfb94eea..62231769d 100644 --- a/src/wasm-lib/kcl/src/lint/checks/offset_plane.rs +++ b/src/wasm-lib/kcl/src/lint/checks/offset_plane.rs @@ -3,8 +3,8 @@ use std::collections::HashMap; use anyhow::Result; use crate::{ - ast::types::{BinaryPart, Expr, LiteralValue, ObjectExpression, UnaryOperator}, lint::rule::{def_finding, Discovered, Finding}, + parsing::ast::types::{BinaryPart, Expr, LiteralValue, ObjectExpression, UnaryOperator}, walk::Node, SourceRange, }; diff --git a/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs b/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs index d8688ceb7..48d15a744 100644 --- a/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs +++ b/src/wasm-lib/kcl/src/lint/checks/std_lib_args.rs @@ -3,9 +3,9 @@ use std::sync::Arc; use anyhow::Result; use crate::{ - ast::types::{CallExpression, NodeRef}, docs::StdLibFn, lint::rule::{def_finding, Discovered, Finding}, + parsing::ast::types::{CallExpression, NodeRef}, std::{FunctionKind, StdLib}, walk::Node, SourceRange, diff --git a/src/wasm-lib/kcl/src/lint/rule.rs b/src/wasm-lib/kcl/src/lint/rule.rs index e08a032bd..bdd5c67da 100644 --- a/src/wasm-lib/kcl/src/lint/rule.rs +++ b/src/wasm-lib/kcl/src/lint/rule.rs @@ -182,7 +182,7 @@ mod test { macro_rules! assert_no_finding { ( $check:expr, $finding:expr, $kcl:expr ) => { - let prog = $crate::parser::top_level_parse($kcl).unwrap(); + let prog = $crate::parsing::top_level_parse($kcl).unwrap(); for discovered_finding in prog.lint($check).unwrap() { if discovered_finding.finding == $finding { assert!(false, "Finding {:?} was emitted", $finding.code); @@ -193,7 +193,7 @@ mod test { macro_rules! assert_finding { ( $check:expr, $finding:expr, $kcl:expr ) => { - let prog = $crate::parser::top_level_parse($kcl).unwrap(); + let prog = $crate::parsing::top_level_parse($kcl).unwrap(); for discovered_finding in prog.lint($check).unwrap() { if discovered_finding.finding == $finding { diff --git a/src/wasm-lib/kcl/src/lsp/kcl/custom_notifications.rs b/src/wasm-lib/kcl/src/lsp/kcl/custom_notifications.rs index a6d35527e..286f2a2ab 100644 --- a/src/wasm-lib/kcl/src/lsp/kcl/custom_notifications.rs +++ b/src/wasm-lib/kcl/src/lsp/kcl/custom_notifications.rs @@ -3,14 +3,14 @@ use serde::{Deserialize, Serialize}; use tower_lsp::lsp_types::notification::Notification; -use crate::{ast::types::Node, settings::types::UnitLength}; +use crate::{parsing::ast::types::Node, settings::types::UnitLength}; /// A notification that the AST has changed. #[derive(Debug)] pub enum AstUpdated {} impl Notification for AstUpdated { - type Params = Node; + type Params = Node; const METHOD: &'static str = "kcl/astUpdated"; } diff --git a/src/wasm-lib/kcl/src/lsp/kcl/mod.rs b/src/wasm-lib/kcl/src/lsp/kcl/mod.rs index f1c0841f1..da3c820f3 100644 --- a/src/wasm-lib/kcl/src/lsp/kcl/mod.rs +++ b/src/wasm-lib/kcl/src/lsp/kcl/mod.rs @@ -41,10 +41,12 @@ use tower_lsp::{ }; use crate::{ - ast::types::{Expr, Node, VariableKind}, lsp::{backend::Backend as _, util::IntoDiagnostic}, - parser::PIPE_OPERATOR, - token::TokenType, + parsing::{ + ast::types::{Expr, Node, VariableKind}, + token::TokenType, + PIPE_OPERATOR, + }, ExecState, ModuleId, Program, SourceRange, }; @@ -98,9 +100,9 @@ pub struct Backend { /// The stdlib signatures for the language. pub stdlib_signatures: HashMap, /// Token maps. - pub token_map: DashMap>, + pub token_map: DashMap>, /// AST maps. - pub ast_map: DashMap>, + pub ast_map: DashMap>, /// Memory maps. pub memory_map: DashMap, /// Current code. @@ -257,7 +259,7 @@ impl crate::lsp::backend::Backend for Backend { // Lets update the tokens. let module_id = ModuleId::default(); - let tokens = match crate::token::lexer(¶ms.text, module_id) { + let tokens = match crate::parsing::token::lexer(¶ms.text, module_id) { Ok(tokens) => tokens, Err(err) => { self.add_to_diagnostics(¶ms, &[err], true).await; @@ -298,7 +300,7 @@ impl crate::lsp::backend::Backend for Backend { } // Lets update the ast. - let result = crate::parser::parse_tokens(tokens.clone()); + let result = crate::parsing::parse_tokens(tokens.clone()); // TODO handle parse errors properly let mut ast = match result.parse_errs_as_err() { Ok(ast) => ast, @@ -376,7 +378,7 @@ impl Backend { self.executor_ctx.read().await } - async fn update_semantic_tokens(&self, tokens: &[crate::token::Token], params: &TextDocumentItem) { + async fn update_semantic_tokens(&self, tokens: &[crate::parsing::token::Token], params: &TextDocumentItem) { // Update the semantic tokens map. let mut semantic_tokens = vec![]; let mut last_position = Position::new(0, 0); @@ -1036,7 +1038,7 @@ impl LanguageServer for Backend { }; match hover { - crate::ast::types::Hover::Function { name, range } => { + crate::parsing::ast::types::Hover::Function { name, range } => { // Get the docs for this function. let Some(completion) = self.stdlib_completions.get(&name) else { return Ok(None); @@ -1071,8 +1073,8 @@ impl LanguageServer for Backend { range: Some(range), })) } - crate::ast::types::Hover::Signature { .. } => Ok(None), - crate::ast::types::Hover::Comment { value, range } => Ok(Some(Hover { + crate::parsing::ast::types::Hover::Signature { .. } => Ok(None), + crate::parsing::ast::types::Hover::Comment { value, range } => Ok(Some(Hover { contents: HoverContents::Markup(MarkupContent { kind: MarkupKind::Markdown, value, @@ -1230,7 +1232,7 @@ impl LanguageServer for Backend { }; match hover { - crate::ast::types::Hover::Function { name, range: _ } => { + crate::parsing::ast::types::Hover::Function { name, range: _ } => { // Get the docs for this function. let Some(signature) = self.stdlib_signatures.get(&name) else { return Ok(None); @@ -1238,7 +1240,7 @@ impl LanguageServer for Backend { Ok(Some(signature.clone())) } - crate::ast::types::Hover::Signature { + crate::parsing::ast::types::Hover::Signature { name, parameter_index, range: _, @@ -1253,7 +1255,7 @@ impl LanguageServer for Backend { Ok(Some(signature)) } - crate::ast::types::Hover::Comment { value: _, range: _ } => { + crate::parsing::ast::types::Hover::Comment { value: _, range: _ } => { return Ok(None); } } @@ -1302,12 +1304,12 @@ impl LanguageServer for Backend { // I don't know if we need to do this again since it should be updated in the context. // But I figure better safe than sorry since this will write back out to the file. let module_id = ModuleId::default(); - let Ok(ast) = crate::parser::parse_str(current_code, module_id).parse_errs_as_err() else { + let Ok(ast) = crate::parsing::parse_str(current_code, module_id).parse_errs_as_err() else { return Ok(None); }; // Now recast it. let recast = ast.recast( - &crate::ast::types::FormatOptions { + &crate::parsing::ast::types::FormatOptions { tab_size: params.options.tab_size as usize, insert_final_newline: params.options.insert_final_newline.unwrap_or(false), use_tabs: !params.options.insert_spaces, @@ -1336,7 +1338,7 @@ impl LanguageServer for Backend { // I don't know if we need to do this again since it should be updated in the context. // But I figure better safe than sorry since this will write back out to the file. let module_id = ModuleId::default(); - let Ok(mut ast) = crate::parser::parse_str(current_code, module_id).parse_errs_as_err() else { + let Ok(mut ast) = crate::parsing::parse_str(current_code, module_id).parse_errs_as_err() else { return Ok(None); }; diff --git a/src/wasm-lib/kcl/src/lsp/tests.rs b/src/wasm-lib/kcl/src/lsp/tests.rs index 1e294bf00..9d1e2ed95 100644 --- a/src/wasm-lib/kcl/src/lsp/tests.rs +++ b/src/wasm-lib/kcl/src/lsp/tests.rs @@ -7,9 +7,9 @@ use tower_lsp::{ }; use crate::{ - ast::types::{Node, Program}, executor::ProgramMemory, lsp::test_util::{copilot_lsp_server, kcl_lsp_server}, + parsing::ast::types::{Node, Program}, }; #[tokio::test(flavor = "multi_thread", worker_threads = 12)] diff --git a/src/wasm-lib/kcl/src/parser/bad_inputs.rs b/src/wasm-lib/kcl/src/parser/bad_inputs.rs deleted file mode 100644 index d101112ce..000000000 --- a/src/wasm-lib/kcl/src/parser/bad_inputs.rs +++ /dev/null @@ -1,14 +0,0 @@ -#[cfg(test)] -mod tests { - macro_rules! parse_and_lex { - ($func_name:ident, $test_kcl_program:expr) => { - #[test] - fn $func_name() { - let _ = crate::parser::top_level_parse($test_kcl_program); - } - }; - } - - parse_and_lex!(crash_eof_1, "{\"ގގ\0\0\0\"\"."); - parse_and_lex!(crash_eof_2, "(/=e\"\u{616}ݝ\"\""); -} diff --git a/src/wasm-lib/kcl/src/ast/types/digest.rs b/src/wasm-lib/kcl/src/parsing/ast/digest.rs similarity index 87% rename from src/wasm-lib/kcl/src/ast/types/digest.rs rename to src/wasm-lib/kcl/src/parsing/ast/digest.rs index acaf43996..1405908e6 100644 --- a/src/wasm-lib/kcl/src/ast/types/digest.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/digest.rs @@ -1,9 +1,10 @@ use sha2::{Digest as DigestTrait, Sha256}; -use super::{ +use super::types::{ItemVisibility, VariableKind}; +use crate::parsing::ast::types::{ ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryPart, BodyItem, CallExpression, CallExpressionKw, - ElseIf, Expr, ExpressionStatement, FnArgType, FunctionExpression, Identifier, IfExpression, ImportItem, - ImportStatement, Literal, LiteralIdentifier, MemberExpression, MemberObject, NonCodeMeta, NonCodeNode, + CommentStyle, ElseIf, Expr, ExpressionStatement, FnArgType, FunctionExpression, Identifier, IfExpression, + ImportItem, ImportStatement, Literal, LiteralIdentifier, MemberExpression, MemberObject, NonCodeMeta, NonCodeNode, NonCodeValue, ObjectExpression, ObjectProperty, Parameter, PipeExpression, PipeSubstitution, Program, ReturnStatement, TagDeclarator, UnaryExpression, VariableDeclaration, VariableDeclarator, }; @@ -209,6 +210,15 @@ impl ReturnStatement { }); } +impl CommentStyle { + fn digestable_id(&self) -> [u8; 2] { + match &self { + CommentStyle::Line => *b"//", + CommentStyle::Block => *b"/*", + } + } +} + impl NonCodeNode { compute_digest!(|slf, hasher| { match &slf.value { @@ -264,6 +274,24 @@ impl VariableDeclaration { }); } +impl VariableKind { + fn digestable_id(&self) -> [u8; 1] { + match self { + VariableKind::Const => [2], + VariableKind::Fn => [3], + } + } +} + +impl ItemVisibility { + fn digestable_id(&self) -> [u8; 1] { + match self { + ItemVisibility::Default => [0], + ItemVisibility::Export => [1], + } + } +} + impl VariableDeclarator { compute_digest!(|slf, hasher| { hasher.update(slf.id.compute_digest()); @@ -406,3 +434,31 @@ impl ElseIf { hasher.update(slf.then_val.compute_digest()); }); } + +#[cfg(test)] +mod test { + #[tokio::test(flavor = "multi_thread")] + async fn test_parse_digest() { + let prog1_string = r#"startSketchOn('XY') + |> startProfileAt([0, 0], %) + |> line([5, 5], %) +"#; + let prog1_digest = crate::parsing::top_level_parse(prog1_string).unwrap().compute_digest(); + + let prog2_string = r#"startSketchOn('XY') + |> startProfileAt([0, 2], %) + |> line([5, 5], %) +"#; + let prog2_digest = crate::parsing::top_level_parse(prog2_string).unwrap().compute_digest(); + + assert!(prog1_digest != prog2_digest); + + let prog3_string = r#"startSketchOn('XY') + |> startProfileAt([0, 0], %) + |> line([5, 5], %) +"#; + let prog3_digest = crate::parsing::top_level_parse(prog3_string).unwrap().compute_digest(); + + assert_eq!(prog1_digest, prog3_digest); + } +} diff --git a/src/wasm-lib/kcl/src/ast/types/execute.rs b/src/wasm-lib/kcl/src/parsing/ast/execute.rs similarity index 99% rename from src/wasm-lib/kcl/src/ast/types/execute.rs rename to src/wasm-lib/kcl/src/parsing/ast/execute.rs index 1b014bb4f..123217faa 100644 --- a/src/wasm-lib/kcl/src/ast/types/execute.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/execute.rs @@ -2,14 +2,14 @@ use std::collections::HashMap; use async_recursion::async_recursion; -use super::{ - ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, CallExpression, - CallExpressionKw, Expr, IfExpression, KclNone, LiteralIdentifier, LiteralValue, MemberExpression, MemberObject, - Node, ObjectExpression, TagDeclarator, UnaryExpression, UnaryOperator, -}; use crate::{ errors::{KclError, KclErrorDetails}, executor::{BodyType, ExecState, ExecutorContext, KclValue, Metadata, StatementKind, TagEngineInfo, TagIdentifier}, + parsing::ast::types::{ + ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, CallExpression, + CallExpressionKw, Expr, IfExpression, KclNone, LiteralIdentifier, LiteralValue, MemberExpression, MemberObject, + Node, ObjectExpression, TagDeclarator, UnaryExpression, UnaryOperator, + }, source_range::SourceRange, std::{args::Arg, FunctionKind}, }; diff --git a/src/wasm-lib/kcl/src/parsing/ast/mod.rs b/src/wasm-lib/kcl/src/parsing/ast/mod.rs new file mode 100644 index 000000000..fa2e039ae --- /dev/null +++ b/src/wasm-lib/kcl/src/parsing/ast/mod.rs @@ -0,0 +1,5 @@ +pub(crate) mod digest; +pub(crate) mod execute; +pub mod modify; +pub(crate) mod source_range; +pub mod types; diff --git a/src/wasm-lib/kcl/src/ast/modify.rs b/src/wasm-lib/kcl/src/parsing/ast/modify.rs similarity index 99% rename from src/wasm-lib/kcl/src/ast/modify.rs rename to src/wasm-lib/kcl/src/parsing/ast/modify.rs index 7c3adb1e1..ff1014a38 100644 --- a/src/wasm-lib/kcl/src/ast/modify.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/modify.rs @@ -7,13 +7,13 @@ use kcmc::{ use kittycad_modeling_cmds as kcmc; use crate::{ - ast::types::{ - ArrayExpression, CallExpression, ConstraintLevel, FormatOptions, Literal, Node, PipeExpression, - PipeSubstitution, VariableDeclarator, - }, engine::EngineManager, errors::{KclError, KclErrorDetails}, executor::Point2d, + parsing::ast::types::{ + ArrayExpression, CallExpression, ConstraintLevel, FormatOptions, Literal, Node, PipeExpression, + PipeSubstitution, VariableDeclarator, + }, source_range::{ModuleId, SourceRange}, Program, }; @@ -184,7 +184,7 @@ pub async fn modify_ast_for_sketch( let recasted = program.ast.recast(&FormatOptions::default(), 0); // Re-parse the ast so we get the correct source ranges. - *program = crate::parser::parse_str(&recasted, module_id) + *program = crate::parsing::parse_str(&recasted, module_id) .parse_errs_as_err()? .into(); diff --git a/src/wasm-lib/kcl/src/ast/types/source_range.rs b/src/wasm-lib/kcl/src/parsing/ast/source_range.rs similarity index 96% rename from src/wasm-lib/kcl/src/ast/types/source_range.rs rename to src/wasm-lib/kcl/src/parsing/ast/source_range.rs index f961579e4..f76976c75 100644 --- a/src/wasm-lib/kcl/src/ast/types/source_range.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/source_range.rs @@ -1,4 +1,4 @@ -use super::{BinaryPart, BodyItem, Expr, LiteralIdentifier, MemberObject}; +use crate::parsing::ast::types::{BinaryPart, BodyItem, Expr, LiteralIdentifier, MemberObject}; use crate::source_range::ModuleId; impl BodyItem { diff --git a/src/wasm-lib/kcl/src/ast/types/condition.rs b/src/wasm-lib/kcl/src/parsing/ast/types/condition.rs similarity index 98% rename from src/wasm-lib/kcl/src/ast/types/condition.rs rename to src/wasm-lib/kcl/src/parsing/ast/types/condition.rs index a211d6b43..e1ee8ea0a 100644 --- a/src/wasm-lib/kcl/src/ast/types/condition.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/types/condition.rs @@ -8,7 +8,7 @@ use crate::SourceRange; // TODO: This should be its own type, similar to Program, // but guaranteed to have an Expression as its final item. // https://github.com/KittyCAD/modeling-app/issues/4015 -type IfBlock = crate::ast::types::Program; +type IfBlock = crate::parsing::ast::types::Program; #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema, Bake)] #[databake(path = kcl_lib::ast::types)] diff --git a/src/wasm-lib/kcl/src/ast/types/literal_value.rs b/src/wasm-lib/kcl/src/parsing/ast/types/literal_value.rs similarity index 97% rename from src/wasm-lib/kcl/src/ast/types/literal_value.rs rename to src/wasm-lib/kcl/src/parsing/ast/types/literal_value.rs index 80a73c430..52a64588e 100644 --- a/src/wasm-lib/kcl/src/ast/types/literal_value.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/types/literal_value.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use serde_json::Value as JValue; use super::Node; -use crate::ast::types::{Expr, Literal}; +use crate::parsing::ast::types::{Expr, Literal}; #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema, Bake)] #[databake(path = kcl_lib::ast::types)] diff --git a/src/wasm-lib/kcl/src/ast/types.rs b/src/wasm-lib/kcl/src/parsing/ast/types/mod.rs similarity index 98% rename from src/wasm-lib/kcl/src/ast/types.rs rename to src/wasm-lib/kcl/src/parsing/ast/types/mod.rs index abd0bf67b..f0771a07a 100644 --- a/src/wasm-lib/kcl/src/ast/types.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/types/mod.rs @@ -18,8 +18,8 @@ use tower_lsp::lsp_types::{ CompletionItem, CompletionItemKind, DocumentSymbol, FoldingRange, FoldingRangeKind, Range as LspRange, SymbolKind, }; -use self::execute::execute_pipe_body; -pub use crate::ast::types::{ +use super::{digest::Digest, execute::execute_pipe_body}; +pub use crate::parsing::ast::types::{ condition::{ElseIf, IfExpression}, literal_value::LiteralValue, none::KclNone, @@ -28,19 +28,14 @@ use crate::{ docs::StdLibFn, errors::KclError, executor::{ExecState, ExecutorContext, KclValue, Metadata, TagIdentifier}, - parser::PIPE_OPERATOR, + parsing::PIPE_OPERATOR, source_range::{ModuleId, SourceRange}, std::kcl_stdlib::KclStdLibFn, }; mod condition; -pub(crate) mod digest; -pub(crate) mod execute; mod literal_value; mod none; -pub(crate) mod source_range; - -use digest::Digest; pub enum Definition<'a> { Variable(&'a VariableDeclarator), @@ -1029,15 +1024,6 @@ pub enum CommentStyle { Block, } -impl CommentStyle { - fn digestable_id(&self) -> [u8; 2] { - match &self { - CommentStyle::Line => *b"//", - CommentStyle::Block => *b"/*", - } - } -} - #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema, Bake)] #[databake(path = kcl_lib::ast::types)] #[ts(export)] @@ -1502,13 +1488,6 @@ pub enum ItemVisibility { } impl ItemVisibility { - fn digestable_id(&self) -> [u8; 1] { - match self { - ItemVisibility::Default => [0], - ItemVisibility::Export => [1], - } - } - fn is_default(&self) -> bool { matches!(self, Self::Default) } @@ -1732,13 +1711,6 @@ pub enum VariableKind { } impl VariableKind { - fn digestable_id(&self) -> [u8; 1] { - match self { - VariableKind::Const => [2], - VariableKind::Fn => [3], - } - } - pub fn to_completion_items() -> Result> { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = true; @@ -3158,7 +3130,7 @@ fn ghi = (x) => { ghi("things") "#; - let program = crate::parser::top_level_parse(code).unwrap(); + let program = crate::parsing::top_level_parse(code).unwrap(); let folding_ranges = program.get_lsp_folding_ranges(); assert_eq!(folding_ranges.len(), 3); assert_eq!(folding_ranges[0].start_line, 29); @@ -3194,7 +3166,7 @@ fn ghi = (x) => { return x } "#; - let program = crate::parser::top_level_parse(code).unwrap(); + let program = crate::parsing::top_level_parse(code).unwrap(); let symbols = program.get_lsp_symbols(code).unwrap(); assert_eq!(symbols.len(), 7); } @@ -3214,7 +3186,7 @@ const cylinder = startSketchOn('-XZ') }, %) |> extrude(h, %) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let value = program.get_non_code_meta_for_position(50); @@ -3237,7 +3209,7 @@ const cylinder = startSketchOn('-XZ') }, %) |> extrude(h, %) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let value = program.get_non_code_meta_for_position(124); @@ -3250,7 +3222,7 @@ const cylinder = startSketchOn('-XZ') |> startProfileAt([0,0], %) |> xLine(5, %) // lin "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let value = program.get_non_code_meta_for_position(86); @@ -3262,7 +3234,7 @@ const cylinder = startSketchOn('-XZ') let some_program_string = r#"fn thing = (arg0: number, arg1: string, tag?: string) => { return arg0 }"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); // Check the program output for the types of the parameters. let function = program.body.first().unwrap(); @@ -3284,7 +3256,7 @@ const cylinder = startSketchOn('-XZ') let some_program_string = r#"fn thing = (arg0: number[], arg1: string[], tag?: string) => { return arg0 }"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); // Check the program output for the types of the parameters. let function = program.body.first().unwrap(); @@ -3307,7 +3279,7 @@ const cylinder = startSketchOn('-XZ') return arg0 }"#; let module_id = ModuleId::default(); - let program = crate::parser::parse_str(some_program_string, module_id).unwrap(); + let program = crate::parsing::parse_str(some_program_string, module_id).unwrap(); // Check the program output for the types of the parameters. let function = program.body.first().unwrap(); @@ -3378,7 +3350,7 @@ const cylinder = startSketchOn('-XZ') return 1 }"#; let module_id = ModuleId::default(); - let program = crate::parser::parse_str(some_program_string, module_id).unwrap(); + let program = crate::parsing::parse_str(some_program_string, module_id).unwrap(); // Check the program output for the types of the parameters. let function = program.body.first().unwrap(); @@ -3566,7 +3538,7 @@ const cylinder = startSketchOn('-XZ') #[tokio::test(flavor = "multi_thread")] async fn test_parse_object_bool() { let some_program_string = r#"some_func({thing: true, other_thing: false})"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); // We want to get the bool and verify it is a bool. @@ -3607,29 +3579,4 @@ const cylinder = startSketchOn('-XZ') assert_eq!(l.raw, "false"); } - - #[tokio::test(flavor = "multi_thread")] - async fn test_parse_digest() { - let prog1_string = r#"startSketchOn('XY') - |> startProfileAt([0, 0], %) - |> line([5, 5], %) -"#; - let prog1_digest = crate::parser::top_level_parse(prog1_string).unwrap().compute_digest(); - - let prog2_string = r#"startSketchOn('XY') - |> startProfileAt([0, 2], %) - |> line([5, 5], %) -"#; - let prog2_digest = crate::parser::top_level_parse(prog2_string).unwrap().compute_digest(); - - assert!(prog1_digest != prog2_digest); - - let prog3_string = r#"startSketchOn('XY') - |> startProfileAt([0, 0], %) - |> line([5, 5], %) -"#; - let prog3_digest = crate::parser::top_level_parse(prog3_string).unwrap().compute_digest(); - - assert_eq!(prog1_digest, prog3_digest); - } } diff --git a/src/wasm-lib/kcl/src/ast/types/none.rs b/src/wasm-lib/kcl/src/parsing/ast/types/none.rs similarity index 97% rename from src/wasm-lib/kcl/src/ast/types/none.rs rename to src/wasm-lib/kcl/src/parsing/ast/types/none.rs index fef7b0ea6..51a2ec387 100644 --- a/src/wasm-lib/kcl/src/ast/types/none.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/types/none.rs @@ -5,7 +5,7 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use super::Node; -use crate::{ast::types::ConstraintLevel, executor::KclValue}; +use crate::{executor::KclValue, parsing::ast::types::ConstraintLevel}; const KCL_NONE_ID: &str = "KCL_NONE_ID"; diff --git a/src/wasm-lib/kcl/src/parser/parser_impl/error.rs b/src/wasm-lib/kcl/src/parsing/error.rs similarity index 99% rename from src/wasm-lib/kcl/src/parser/parser_impl/error.rs rename to src/wasm-lib/kcl/src/parsing/error.rs index 028b2265e..088e442d2 100644 --- a/src/wasm-lib/kcl/src/parser/parser_impl/error.rs +++ b/src/wasm-lib/kcl/src/parsing/error.rs @@ -2,7 +2,7 @@ use winnow::{error::StrContext, stream::Stream}; use crate::{ errors::{KclError, KclErrorDetails}, - token::Token, + parsing::token::Token, SourceRange, }; diff --git a/src/wasm-lib/kcl/src/parser/math.rs b/src/wasm-lib/kcl/src/parsing/math.rs similarity index 97% rename from src/wasm-lib/kcl/src/parser/math.rs rename to src/wasm-lib/kcl/src/parsing/math.rs index 53eaa9bda..d37e2477f 100644 --- a/src/wasm-lib/kcl/src/parser/math.rs +++ b/src/wasm-lib/kcl/src/parsing/math.rs @@ -1,6 +1,6 @@ use crate::{ - ast::types::{BinaryExpression, BinaryOperator, BinaryPart, Node}, errors::{KclError, KclErrorDetails}, + parsing::ast::types::{BinaryExpression, BinaryOperator, BinaryPart, Node}, SourceRange, }; @@ -126,7 +126,8 @@ impl From for BinaryExpressionToken { #[cfg(test)] mod tests { use super::*; - use crate::{ast::types::Literal, source_range::ModuleId}; + use crate::parsing::ast::types::Literal; + use crate::source_range::ModuleId; #[test] fn parse_and_evaluate() { diff --git a/src/wasm-lib/kcl/src/parser.rs b/src/wasm-lib/kcl/src/parsing/mod.rs similarity index 85% rename from src/wasm-lib/kcl/src/parser.rs rename to src/wasm-lib/kcl/src/parsing/mod.rs index 18ec54a87..c3e4e4f44 100644 --- a/src/wasm-lib/kcl/src/parser.rs +++ b/src/wasm-lib/kcl/src/parsing/mod.rs @@ -1,15 +1,19 @@ -use parser_impl::ParseContext; +use parser::ParseContext; use crate::{ - ast::types::{Node, Program}, errors::{KclError, KclErrorDetails}, + parsing::{ + ast::types::{Node, Program}, + token::{Token, TokenType}, + }, source_range::{ModuleId, SourceRange}, - token::{Token, TokenType}, }; -mod bad_inputs; +pub(crate) mod ast; +mod error; mod math; -pub(crate) mod parser_impl; +pub(crate) mod parser; +pub(crate) mod token; pub const PIPE_SUBSTITUTION_OPERATOR: &str = "%"; pub const PIPE_OPERATOR: &str = "|>"; @@ -33,7 +37,7 @@ pub fn top_level_parse(code: &str) -> ParseResult { /// Parse the given KCL code into an AST. pub fn parse_str(code: &str, module_id: ModuleId) -> ParseResult { - let tokens = pr_try!(crate::token::lexer(code, module_id)); + let tokens = pr_try!(crate::parsing::token::lexer(code, module_id)); parse_tokens(tokens) } @@ -68,7 +72,7 @@ pub fn parse_tokens(tokens: Vec) -> ParseResult { return Node::::default().into(); } - parser_impl::run_parser(&mut tokens.as_slice()) + parser::run_parser(&mut tokens.as_slice()) } /// Result of parsing. @@ -104,7 +108,7 @@ impl ParseResult { #[cfg(test)] #[track_caller] - pub fn unwrap_errs(&self) -> &[parser_impl::error::ParseError] { + pub fn unwrap_errs(&self) -> &[error::ParseError] { &self.0.as_ref().unwrap().1.errors } @@ -145,3 +149,18 @@ impl From for ParseResult { ParseResult(Err(e)) } } + +#[cfg(test)] +mod tests { + macro_rules! parse_and_lex { + ($func_name:ident, $test_kcl_program:expr) => { + #[test] + fn $func_name() { + let _ = crate::parsing::top_level_parse($test_kcl_program); + } + }; + } + + parse_and_lex!(crash_eof_1, "{\"ގގ\0\0\0\"\"."); + parse_and_lex!(crash_eof_2, "(/=e\"\u{616}ݝ\"\""); +} diff --git a/src/wasm-lib/kcl/src/parser/parser_impl.rs b/src/wasm-lib/kcl/src/parsing/parser.rs similarity index 95% rename from src/wasm-lib/kcl/src/parser/parser_impl.rs rename to src/wasm-lib/kcl/src/parsing/parser.rs index 1b48c8b3e..936051ec5 100644 --- a/src/wasm-lib/kcl/src/parser/parser_impl.rs +++ b/src/wasm-lib/kcl/src/parsing/parser.rs @@ -8,27 +8,29 @@ use winnow::{ token::{any, one_of, take_till}, }; -use self::error::ParseError; use crate::{ - ast::types::{ - ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, BodyItem, BoxNode, - CallExpression, CallExpressionKw, CommentStyle, ElseIf, Expr, ExpressionStatement, FnArgPrimitive, FnArgType, - FunctionExpression, Identifier, IfExpression, ImportItem, ImportStatement, ItemVisibility, LabeledArg, Literal, - LiteralIdentifier, LiteralValue, MemberExpression, MemberObject, Node, NonCodeMeta, NonCodeNode, NonCodeValue, - ObjectExpression, ObjectProperty, Parameter, PipeExpression, PipeSubstitution, Program, ReturnStatement, - Shebang, TagDeclarator, UnaryExpression, UnaryOperator, VariableDeclaration, VariableDeclarator, VariableKind, - }, docs::StdLibFn, errors::{KclError, KclErrorDetails}, - parser::{ - math::BinaryExpressionToken, parser_impl::error::ContextError, PIPE_OPERATOR, PIPE_SUBSTITUTION_OPERATOR, + parsing::{ + ast::types::{ + ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, BodyItem, BoxNode, + CallExpression, CallExpressionKw, CommentStyle, ElseIf, Expr, ExpressionStatement, FnArgPrimitive, + FnArgType, FunctionExpression, Identifier, IfExpression, ImportItem, ImportStatement, ItemVisibility, + Literal, LiteralIdentifier, LiteralValue, MemberExpression, MemberObject, Node, NonCodeMeta, NonCodeNode, + NonCodeValue, ObjectExpression, ObjectProperty, Parameter, PipeExpression, PipeSubstitution, Program, + ReturnStatement, Shebang, TagDeclarator, UnaryExpression, UnaryOperator, VariableDeclaration, + VariableDeclarator, VariableKind, + }, + error::{self, ContextError, ParseError}, + math::BinaryExpressionToken, + token::{Token, TokenType}, + PIPE_OPERATOR, PIPE_SUBSTITUTION_OPERATOR, }, - token::{Token, TokenType}, unparser::ExprContext, SourceRange, }; -pub(crate) mod error; +use super::ast::types::LabeledArg; thread_local! { /// The current `ParseContext`. `None` if parsing is not currently happening on this thread. @@ -2288,14 +2290,14 @@ mod tests { use super::*; use crate::{ - ast::types::{BodyItem, Expr, VariableKind}, + parsing::ast::types::{BodyItem, Expr, VariableKind}, ModuleId, }; fn assert_reserved(word: &str) { // Try to use it as a variable name. let code = format!(r#"{} = 0"#, word); - let result = crate::parser::top_level_parse(code.as_str()); + let result = crate::parsing::top_level_parse(code.as_str()); let err = &result.unwrap_errs()[0]; // Which token causes the error may change. In "return = 0", for // example, "return" is the problem. @@ -2313,7 +2315,7 @@ mod tests { fn reserved_words() { // Since these are stored in a set, we sort to make the tests // deterministic. - for word in crate::token::RESERVED_WORDS.keys().sorted() { + for word in crate::parsing::token::RESERVED_WORDS.keys().sorted() { assert_reserved(word); } assert_reserved("import"); @@ -2322,7 +2324,7 @@ mod tests { #[test] fn parse_args() { for (i, (test, expected_len)) in [("someVar", 1), ("5, 3", 2), (r#""a""#, 1)].into_iter().enumerate() { - let tokens = crate::token::lexer(test, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test, ModuleId::default()).unwrap(); let actual = match arguments.parse(&tokens) { Ok(x) => x, Err(e) => panic!("Failed test {i}, could not parse function arguments from \"{test}\": {e:?}"), @@ -2333,7 +2335,7 @@ mod tests { #[test] fn weird_program_unclosed_paren() { - let tokens = crate::token::lexer("fn firstPrime(", ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer("fn firstPrime(", ModuleId::default()).unwrap(); let last = tokens.last().unwrap(); let err: super::error::ErrorKind = program.parse(&tokens).unwrap_err().into(); let err = err.unwrap_parse_error(); @@ -2345,7 +2347,7 @@ mod tests { #[test] fn weird_program_just_a_pipe() { - let tokens = crate::token::lexer("|", ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer("|", ModuleId::default()).unwrap(); let err: super::error::ErrorKind = program.parse(&tokens).unwrap_err().into(); let err = err.unwrap_parse_error(); assert_eq!( @@ -2358,7 +2360,7 @@ mod tests { #[test] fn parse_binary_expressions() { for (i, test_program) in ["1 + 2 + 3"].into_iter().enumerate() { - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let mut slice = tokens.as_slice(); let _actual = match binary_expression.parse_next(&mut slice) { Ok(x) => x, @@ -2369,7 +2371,7 @@ mod tests { #[test] fn test_vardec_no_keyword() { - let tokens = crate::token::lexer("x = 4", ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer("x = 4", ModuleId::default()).unwrap(); let vardec = declaration(&mut tokens.as_slice()).unwrap(); assert_eq!(vardec.inner.kind, VariableKind::Const); let vardec = vardec.declarations.first().unwrap(); @@ -2382,7 +2384,7 @@ mod tests { #[test] fn test_negative_operands() { - let tokens = crate::token::lexer("-leg2", ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer("-leg2", ModuleId::default()).unwrap(); let _s = operand.parse_next(&mut tokens.as_slice()).unwrap(); } @@ -2396,7 +2398,7 @@ mod tests { // comment 2 return 1 }"#; - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let mut slice = tokens.as_slice(); let expr = function_decl.map(|t| t.0).parse_next(&mut slice).unwrap(); assert_eq!(expr.params, vec![]); @@ -2414,7 +2416,7 @@ mod tests { const yo = { a = { b = { c = '123' } } } /* block comment */ }"#; - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let mut slice = tokens.as_slice(); let expr = function_decl.map(|t| t.0).parse_next(&mut slice).unwrap(); let comment0 = &expr.body.non_code_meta.non_code_nodes.get(&0).unwrap()[0]; @@ -2427,7 +2429,7 @@ comment */ /* comment at start */ const mySk1 = startSketchAt([0, 0])"#; - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let program = program.parse(&tokens).unwrap(); let mut starting_comments = program.inner.non_code_meta.start_nodes; assert_eq!(starting_comments.len(), 2); @@ -2445,7 +2447,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_comment_in_pipe() { - let tokens = crate::token::lexer(r#"const x = y() |> /*hi*/ z(%)"#, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(r#"const x = y() |> /*hi*/ z(%)"#, ModuleId::default()).unwrap(); let mut body = program.parse(&tokens).unwrap().inner.body; let BodyItem::VariableDeclaration(mut item) = body.remove(0) else { panic!("expected vardec"); @@ -2472,7 +2474,7 @@ const mySk1 = startSketchAt([0, 0])"#; return sg return sg }"#; - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let mut slice = tokens.as_slice(); let _expr = function_decl.parse_next(&mut slice).unwrap(); } @@ -2484,7 +2486,7 @@ const mySk1 = startSketchAt([0, 0])"#; return 2 }"; let module_id = ModuleId::from_usize(1); - let tokens = crate::token::lexer(test_program, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, module_id).unwrap(); let mut slice = tokens.as_slice(); let expr = function_decl.map(|t| t.0).parse_next(&mut slice).unwrap(); assert_eq!( @@ -2549,7 +2551,7 @@ const mySk1 = startSketchAt([0, 0])"#; |> c(%) // inline-comment |> d(%)"#; - let tokens = crate::token::lexer(test_input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_input, ModuleId::default()).unwrap(); let mut slice = tokens.as_slice(); let Node { inner: PipeExpression { @@ -2580,7 +2582,7 @@ const mySk1 = startSketchAt([0, 0])"#; "#; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(test_program, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, module_id).unwrap(); let Program { non_code_meta, .. } = function_body.parse(&tokens).unwrap().inner; assert_eq!( vec![Node::new( @@ -2648,7 +2650,7 @@ const mySk1 = startSketchAt([0, 0])"#; comment */ return 1"#; - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let actual = program.parse(&tokens).unwrap(); assert_eq!(actual.non_code_meta.non_code_nodes.len(), 1); assert_eq!( @@ -2663,7 +2665,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_bracketed_binary_expression() { let input = "(2 - 3)"; - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); let actual = match binary_expr_in_parens.parse(&tokens) { Ok(x) => x, Err(e) => panic!("{e:?}"), @@ -2678,7 +2680,7 @@ const mySk1 = startSketchAt([0, 0])"#; "6 / ( sigmaAllow * width )", "sqrt(distance * p * FOS * 6 / ( sigmaAllow * width ))", ] { - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); let _actual = match expression.parse(&tokens) { Ok(x) => x, Err(e) => panic!("{e:?}"), @@ -2689,7 +2691,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_arithmetic() { let input = "1 * (2 - 3)"; - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); // The RHS should be a binary expression. let actual = binary_expression.parse(&tokens).unwrap(); assert_eq!(actual.operator, BinaryOperator::Mul); @@ -2717,7 +2719,7 @@ const mySk1 = startSketchAt([0, 0])"#; .into_iter() .enumerate() { - let tokens = crate::token::lexer(test_input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_input, ModuleId::default()).unwrap(); let mut actual = match declaration.parse(&tokens) { Err(e) => panic!("Could not parse test {i}: {e:#?}"), Ok(a) => a, @@ -2735,7 +2737,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_function_call() { for (i, test_input) in ["const x = f(1)", "const x = f( 1 )"].into_iter().enumerate() { - let tokens = crate::token::lexer(test_input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_input, ModuleId::default()).unwrap(); let _actual = match declaration.parse(&tokens) { Err(e) => panic!("Could not parse test {i}: {e:#?}"), Ok(a) => a, @@ -2746,7 +2748,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_nested_arithmetic() { let input = "1 * ((2 - 3) / 4)"; - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); // The RHS should be a binary expression. let outer = binary_expression.parse(&tokens).unwrap(); assert_eq!(outer.operator, BinaryOperator::Mul); @@ -2765,7 +2767,7 @@ const mySk1 = startSketchAt([0, 0])"#; fn binary_expression_ignores_whitespace() { let tests = ["1 - 2", "1- 2", "1 -2", "1-2"]; for test in tests { - let tokens = crate::token::lexer(test, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test, ModuleId::default()).unwrap(); let actual = binary_expression.parse(&tokens).unwrap(); assert_eq!(actual.operator, BinaryOperator::Sub); let BinaryPart::Literal(left) = actual.inner.left else { @@ -2786,7 +2788,7 @@ const mySk1 = startSketchAt([0, 0])"#; a comment spanning a few lines */ |> z(%)"#; - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let actual = pipe_expression.parse(&tokens).unwrap(); let n = actual.non_code_meta.non_code_nodes.len(); assert_eq!(n, 1, "expected one comment in pipe expression but found {n}"); @@ -2814,7 +2816,7 @@ const mySk1 = startSketchAt([0, 0])"#; .into_iter() .enumerate() { - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let actual = pipe_expression.parse(&tokens); assert!(actual.is_ok(), "could not parse test {i}, '{test_program}'"); let actual = actual.unwrap(); @@ -2959,7 +2961,7 @@ const mySk1 = startSketchAt([0, 0])"#; .into_iter() .enumerate() { - let tokens = crate::token::lexer(test_program, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, module_id).unwrap(); let actual = non_code_node.parse(&tokens); assert!(actual.is_ok(), "could not parse test {i}: {actual:#?}"); let actual = actual.unwrap(); @@ -2971,7 +2973,7 @@ const mySk1 = startSketchAt([0, 0])"#; fn recognize_invalid_params() { let test_fn = "(let) => { return 1 }"; let module_id = ModuleId::from_usize(2); - let tokens = crate::token::lexer(test_fn, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(test_fn, module_id).unwrap(); let err = function_decl.parse(&tokens).unwrap_err().into_inner(); let cause = err.cause.unwrap(); // This is the token `let` @@ -2987,7 +2989,7 @@ const mySk1 = startSketchAt([0, 0])"#; let string_literal = r#"" // a comment ""#; - let tokens = crate::token::lexer(string_literal, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(string_literal, ModuleId::default()).unwrap(); let parsed_literal = literal.parse(&tokens).unwrap(); assert_eq!( parsed_literal.value, @@ -3004,7 +3006,7 @@ const mySk1 = startSketchAt([0, 0])"#; |> lineTo([0, -0], %) // MoveRelative "#; - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let mut slice = &tokens[..]; let _actual = pipe_expression.parse_next(&mut slice).unwrap(); assert_eq!(slice[0].token_type, TokenType::Whitespace); @@ -3013,14 +3015,14 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_pipes_on_pipes() { let test_program = include_str!("../../../tests/executor/inputs/pipes_on_pipes.kcl"); - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); let _ = run_parser(&mut &*tokens).unwrap(); } #[test] fn test_cube() { let test_program = include_str!("../../../tests/executor/inputs/cube.kcl"); - let tokens = crate::token::lexer(test_program, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(test_program, ModuleId::default()).unwrap(); match program.parse(&tokens) { Ok(_) => {} Err(e) => { @@ -3038,7 +3040,7 @@ const mySk1 = startSketchAt([0, 0])"#; ("a,b", vec!["a", "b"]), ]; for (i, (input, expected)) in tests.into_iter().enumerate() { - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); let actual = parameters.parse(&tokens); assert!(actual.is_ok(), "could not parse test {i}"); let actual_ids: Vec<_> = actual.unwrap().into_iter().map(|p| p.identifier.inner.name).collect(); @@ -3052,7 +3054,7 @@ const mySk1 = startSketchAt([0, 0])"#; return 2 }"; - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); let actual = function_decl.parse(&tokens); assert!(actual.is_ok(), "could not parse test function"); } @@ -3062,8 +3064,8 @@ const mySk1 = startSketchAt([0, 0])"#; let tests = ["const myVar = 5", "const myVar=5", "const myVar =5", "const myVar= 5"]; for test in tests { // Run the original parser - let tokens = crate::token::lexer(test, ModuleId::default()).unwrap(); - let mut expected_body = crate::parser::parse_tokens(tokens.clone()).unwrap().inner.body; + let tokens = crate::parsing::token::lexer(test, ModuleId::default()).unwrap(); + let mut expected_body = crate::parsing::parse_tokens(tokens.clone()).unwrap().inner.body; assert_eq!(expected_body.len(), 1); let BodyItem::VariableDeclaration(expected) = expected_body.pop().unwrap() else { panic!("Expected variable declaration"); @@ -3090,7 +3092,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_math_parse() { let module_id = ModuleId::default(); - let actual = crate::parser::parse_str(r#"5 + "a""#, module_id).unwrap().inner.body; + let actual = crate::parsing::parse_str(r#"5 + "a""#, module_id).unwrap().inner.body; let expr = Node::boxed( BinaryExpression { operator: BinaryOperator::Add, @@ -3226,7 +3228,7 @@ const mySk1 = startSketchAt([0, 0])"#; fn test_abstract_syntax_tree() { let code = "5 +6"; let module_id = ModuleId::default(); - let result = crate::parser::parse_str(code, module_id).unwrap(); + let result = crate::parsing::parse_str(code, module_id).unwrap(); let expected_result = Node::new( Program { body: vec![BodyItem::ExpressionStatement(Node::new( @@ -3281,13 +3283,13 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_empty_file() { let some_program_string = r#""#; - let result = crate::parser::top_level_parse(some_program_string); + let result = crate::parsing::top_level_parse(some_program_string); assert!(result.is_ok()); } #[track_caller] fn assert_no_err(p: &str) -> (Node, ParseContext) { - let result = crate::parser::top_level_parse(p); + let result = crate::parsing::top_level_parse(p); let result = result.0.unwrap(); assert!(result.1.errors.is_empty(), "found: {:#?}", result.1.errors); (result.0.unwrap(), result.1) @@ -3295,7 +3297,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[track_caller] fn assert_err(p: &str, msg: &str, src: [usize; 2]) { - let result = crate::parser::top_level_parse(p); + let result = crate::parsing::top_level_parse(p); let err = &result.unwrap_errs()[0]; assert_eq!(err.message, msg); assert_eq!(err.source_range.start(), src[0]); @@ -3304,7 +3306,7 @@ const mySk1 = startSketchAt([0, 0])"#; #[track_caller] fn assert_err_contains(p: &str, expected: &str) { - let result = crate::parser::top_level_parse(p); + let result = crate::parsing::top_level_parse(p); let err = &result.unwrap_errs()[0].message; assert!(err.contains(expected), "actual='{err}'"); } @@ -3322,14 +3324,14 @@ const mySk1 = startSketchAt([0, 0])"#; #[test] fn test_parse_member_expression_double_nested_braces() { let code = r#"const prop = yo["one"][two]"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_parse_member_expression_binary_expression_period_number_first() { let code = r#"const obj = { a: 1, b: 2 } const height = 1 - obj.a"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] @@ -3337,47 +3339,47 @@ const height = 1 - obj.a"#; let code = r#"const obj = { thing: 1 } startSketchOn(obj.sketch)"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_parse_member_expression_binary_expression_brace_number_first() { let code = r#"const obj = { a: 1, b: 2 } const height = 1 - obj["a"]"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_parse_member_expression_binary_expression_brace_number_second() { let code = r#"const obj = { a: 1, b: 2 } const height = obj["a"] - 1"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_parse_member_expression_binary_expression_in_array_number_first() { let code = r#"const obj = { a: 1, b: 2 } const height = [1 - obj["a"], 0]"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_parse_member_expression_binary_expression_in_array_number_second() { let code = r#"const obj = { a: 1, b: 2 } const height = [obj["a"] - 1, 0]"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_parse_member_expression_binary_expression_in_array_number_second_missing_space() { let code = r#"const obj = { a: 1, b: 2 } const height = [obj["a"] -1, 0]"#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_anon_fn() { - crate::parser::top_level_parse("foo(42, fn(x) { return x + 1 })").unwrap(); + crate::parsing::top_level_parse("foo(42, fn(x) { return x + 1 })").unwrap(); } #[test] @@ -3415,7 +3417,7 @@ const secondExtrude = startSketchOn('XY') #[test] fn test_parse_parens_unicode() { - let result = crate::parser::top_level_parse("(ޜ"); + let result = crate::parsing::top_level_parse("(ޜ"); let KclError::Lexical(details) = result.0.unwrap_err() else { panic!(); }; @@ -3433,12 +3435,12 @@ const thickness = 0.56 const bracket = [-leg2 + thickness, 0] "#; - crate::parser::top_level_parse(code).unwrap(); + crate::parsing::top_level_parse(code).unwrap(); } #[test] fn test_parse_nested_open_brackets() { - crate::parser::top_level_parse( + crate::parsing::top_level_parse( r#" z(-[["#, ) @@ -3625,14 +3627,14 @@ e } firstPrimeNumber() "#; - let _ast = crate::parser::top_level_parse(code).unwrap(); + let _ast = crate::parsing::top_level_parse(code).unwrap(); } #[test] fn array() { let program = r#"[1, 2, 3]"#; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(program, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(program, module_id).unwrap(); let mut sl: &[Token] = &tokens; let _arr = array_elem_by_elem(&mut sl).unwrap(); } @@ -3645,7 +3647,7 @@ e 3, ]"#; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(program, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(program, module_id).unwrap(); let mut sl: &[Token] = &tokens; let _arr = array_elem_by_elem(&mut sl).unwrap(); } @@ -3659,7 +3661,7 @@ e 3 ]"#; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(program, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(program, module_id).unwrap(); let mut sl: &[Token] = &tokens; let _arr = array_elem_by_elem(&mut sl).unwrap(); } @@ -3672,7 +3674,7 @@ e 4 }"; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(some_program_string, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(some_program_string, module_id).unwrap(); let mut sl: &[Token] = &tokens; let _res = if_expr(&mut sl).unwrap(); } @@ -3683,7 +3685,7 @@ e 4 }"; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(some_program_string, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(some_program_string, module_id).unwrap(); let mut sl: &[Token] = &tokens; let _res = else_if(&mut sl).unwrap(); } @@ -3698,7 +3700,7 @@ e 5 }"; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(some_program_string, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(some_program_string, module_id).unwrap(); let mut sl: &[Token] = &tokens; let _res = if_expr(&mut sl).unwrap(); } @@ -3711,7 +3713,7 @@ e thing(false) "#; - crate::parser::top_level_parse(some_program_string).unwrap(); + crate::parsing::top_level_parse(some_program_string).unwrap(); } #[test] @@ -3752,7 +3754,7 @@ thing(false) |> line([-5.09, 12.33], %) asdasd "#; - crate::parser::top_level_parse(test_program).unwrap_errs(); + crate::parsing::top_level_parse(test_program).unwrap_errs(); } #[test] @@ -3773,14 +3775,14 @@ const b2 = cube([3,3], 4) const pt1 = b1[0] const pt2 = b2[0] "#; - crate::parser::top_level_parse(some_program_string).unwrap(); + crate::parsing::top_level_parse(some_program_string).unwrap(); } #[test] fn test_math_with_stdlib() { let some_program_string = r#"const d2r = pi() / 2 let other_thing = 2 * cos(3)"#; - crate::parser::top_level_parse(some_program_string).unwrap(); + crate::parsing::top_level_parse(some_program_string).unwrap(); } #[test] @@ -3798,7 +3800,7 @@ let other_thing = 2 * cos(3)"#; } let myBox = box([0,0], -3, -16, -10) "#; - crate::parser::top_level_parse(some_program_string).unwrap(); + crate::parsing::top_level_parse(some_program_string).unwrap(); } #[test] @@ -3818,7 +3820,7 @@ let myBox = box([0,0], -3, -16, -10) fn arg_labels() { let input = r#"length: 3"#; let module_id = ModuleId::default(); - let tokens = crate::token::lexer(input, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(input, module_id).unwrap(); let mut sl: &[Token] = &tokens; super::labeled_arguments(&mut sl).unwrap(); } @@ -3827,7 +3829,7 @@ let myBox = box([0,0], -3, -16, -10) fn kw_fn() { for input in ["val = foo(x, y: z)", "val = foo(y: z)"] { let module_id = ModuleId::default(); - let tokens = crate::token::lexer(input, module_id).unwrap(); + let tokens = crate::parsing::token::lexer(input, module_id).unwrap(); let sl = &tokens; super::program.parse(sl).unwrap(); } @@ -3900,7 +3902,6 @@ int(42.3)"#; #[cfg(test)] mod snapshot_math_tests { use super::*; - use crate::ModuleId; // This macro generates a test function with the given function name. // The macro takes a KCL program, ensures it tokenizes and parses, then compares @@ -3909,8 +3910,8 @@ mod snapshot_math_tests { ($func_name:ident, $test_kcl_program:expr) => { #[test] fn $func_name() { - let module_id = ModuleId::default(); - let tokens = crate::token::lexer($test_kcl_program, module_id).unwrap(); + let module_id = crate::ModuleId::default(); + let tokens = crate::parsing::token::lexer($test_kcl_program, module_id).unwrap(); ParseContext::init(); let actual = match binary_expression.parse(&tokens) { @@ -3939,7 +3940,6 @@ mod snapshot_math_tests { #[cfg(test)] mod snapshot_tests { use super::*; - use crate::ModuleId; // This macro generates a test function with the given function name. // The macro takes a KCL program, ensures it tokenizes and parses, then compares @@ -3948,8 +3948,8 @@ mod snapshot_tests { ($func_name:ident, $test_kcl_program:expr) => { #[test] fn $func_name() { - let module_id = ModuleId::default(); - let tokens = crate::token::lexer($test_kcl_program, module_id).unwrap(); + let module_id = crate::ModuleId::default(); + let tokens = crate::parsing::token::lexer($test_kcl_program, module_id).unwrap(); print_tokens(&tokens); ParseContext::init(); let actual = match program.parse(&tokens) { diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__a.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__a.snap similarity index 86% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__a.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__a.snap index 7a02a0aa0..fcefa57e6 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__a.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__a.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3609 +source: kcl/src/parsing/parser.rs +assertion_line: 3851 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__b.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__b.snap similarity index 86% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__b.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__b.snap index 586aec2f4..637b00246 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__b.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__b.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3610 +source: kcl/src/parsing/parser.rs +assertion_line: 3852 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__c.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__c.snap similarity index 86% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__c.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__c.snap index 8d82cffe8..b12df680f 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__c.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__c.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3611 +source: kcl/src/parsing/parser.rs +assertion_line: 3853 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__d.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__d.snap similarity index 91% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__d.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__d.snap index a0b270251..ba6a1dc99 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__d.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__d.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3612 +source: kcl/src/parsing/parser.rs +assertion_line: 3854 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__e.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__e.snap similarity index 91% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__e.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__e.snap index 736fd42b9..bf684fde0 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__e.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__e.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3613 +source: kcl/src/parsing/parser.rs +assertion_line: 3855 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__f.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__f.snap similarity index 94% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__f.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__f.snap index a99788ae5..2859e0587 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__f.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__f.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3614 +source: kcl/src/parsing/parser.rs +assertion_line: 3856 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__g.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__g.snap similarity index 94% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__g.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__g.snap index 484aad384..1c5307df0 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__g.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__g.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3615 +source: kcl/src/parsing/parser.rs +assertion_line: 3857 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__h.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__h.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__h.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__h.snap index 9a5b8f906..f106b5f18 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__h.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__h.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3616 +source: kcl/src/parsing/parser.rs +assertion_line: 3858 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__i.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__i.snap similarity index 91% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__i.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__i.snap index 28dbc97ea..456ed5c8c 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__i.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__i.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3617 +source: kcl/src/parsing/parser.rs +assertion_line: 3859 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__j.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__j.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__j.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__j.snap index 29ed437a6..db5460978 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__j.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__j.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3618 +source: kcl/src/parsing/parser.rs +assertion_line: 3860 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__k.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__k.snap similarity index 86% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__k.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__k.snap index 5a59786e8..06909d27e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_math_tests__k.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_math_tests__k.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3619 +source: kcl/src/parsing/parser.rs +assertion_line: 3861 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__a.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap similarity index 99% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__a.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap index 29c66fcf1..a03048000 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__a.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__a.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3893 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aa.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aa.snap similarity index 94% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aa.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aa.snap index 275e95265..3d77961ea 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aa.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aa.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3963 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ab.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ab.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ab.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ab.snap index 025f452d1..064dbf918 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ab.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ab.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3964 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ac.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ac.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ac.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ac.snap index d737f683b..2fa9b9260 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ac.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ac.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3721 +source: kcl/src/parsing/parser.rs +assertion_line: 3965 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ad.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ad.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ad.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ad.snap index cd87200c3..c9606f241 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ad.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ad.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3966 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ae.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ae.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ae.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ae.snap index c425d15b2..9f01e14bd 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ae.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ae.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3974 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__af.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap similarity index 99% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__af.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap index f0534f52e..b8977e1e4 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__af.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__af.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3981 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ag.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ag.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap index f5ea449e5..5c3f1a757 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ag.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ag.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3989 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ah.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ah.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap index 99ac0ba52..7b4edfa1e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ah.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ah.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3993 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ai.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ai.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap index 35eb411a9..cc05f2fc5 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ai.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ai.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3994 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aj.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aj.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap index 1e29e80d1..9d2831ea2 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aj.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aj.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3995 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ak.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ak.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ak.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ak.snap index aef381994..7c3301bd5 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ak.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ak.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3996 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__al.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__al.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__al.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__al.snap index 9250278ff..da3bc68dd 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__al.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__al.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3997 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__am.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__am.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__am.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__am.snap index 93c1ec300..39739efb5 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__am.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__am.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3998 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__an.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__an.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__an.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__an.snap index 4210cad25..fae9112de 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__an.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__an.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3999 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ao.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ao.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ao.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ao.snap index 5cbb444dc..4f96570f3 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ao.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ao.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4000 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ap.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ap.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap index 9af34156e..d63007035 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ap.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ap.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4001 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aq.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aq.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap index e13184ac4..58651956e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aq.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aq.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4002 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ar.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ar.snap similarity index 92% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ar.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ar.snap index e466910ce..6fa2c06d0 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ar.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ar.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3759 +source: kcl/src/parsing/parser.rs +assertion_line: 4003 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__at.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__at.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap index e762909eb..f627be223 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__at.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__at.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4004 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__au.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__au.snap index 298ff655d..12698fd92 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__au.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__au.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4005 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__av.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__av.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap index de93b541f..ae5ae5aa8 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__av.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__av.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4006 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aw.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aw.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aw.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aw.snap index a546c74fa..4652eea40 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__aw.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__aw.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3763 +source: kcl/src/parsing/parser.rs +assertion_line: 4007 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ax.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ax.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ax.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ax.snap index 12e398797..7dca1bc6e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ax.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ax.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3772 +source: kcl/src/parsing/parser.rs +assertion_line: 4016 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ay.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ay.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ay.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ay.snap index c06b7b05b..f397f9065 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ay.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ay.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3781 +source: kcl/src/parsing/parser.rs +assertion_line: 4025 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__az.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__az.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__az.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__az.snap index c143f4c18..25b17e4ca 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__az.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__az.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3789 +source: kcl/src/parsing/parser.rs +assertion_line: 4033 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__b.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__b.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap index 38e6e1505..43e4a3537 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__b.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__b.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3902 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ba.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ba.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ba.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ba.snap index 1e61e74c9..8812f9382 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__ba.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__ba.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4041 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bb.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bb.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bb.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bb.snap index 9e1071827..2af9096e1 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bb.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bb.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3808 +source: kcl/src/parsing/parser.rs +assertion_line: 4052 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bc.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bc.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bc.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bc.snap index f6fcc2f41..85be1e6c7 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bc.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bc.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3814 +source: kcl/src/parsing/parser.rs +assertion_line: 4058 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bd.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bd.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bd.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bd.snap index 6b96233a8..4fd63ff31 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bd.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bd.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 4066 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__be.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__be.snap similarity index 94% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__be.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__be.snap index a05565ac8..9337cfaf8 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__be.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__be.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3832 +source: kcl/src/parsing/parser.rs +assertion_line: 4076 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bf.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bf.snap similarity index 94% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bf.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bf.snap index ffc172dc8..a85cf3321 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bf.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bf.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3833 +source: kcl/src/parsing/parser.rs +assertion_line: 4077 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bg.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bg.snap similarity index 92% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bg.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bg.snap index e4d412993..6427a9dc5 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bg.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bg.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3834 +source: kcl/src/parsing/parser.rs +assertion_line: 4078 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bh.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bh.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bh.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bh.snap index ff2ebfdbb..85d998743 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bh.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bh.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3835 +source: kcl/src/parsing/parser.rs +assertion_line: 4079 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bi.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bi.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bi.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bi.snap index d101d813b..f34264f8e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__bi.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__bi.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3836 +source: kcl/src/parsing/parser.rs +assertion_line: 4080 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__c.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__c.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap index 5ae28bf38..52edc76f9 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__c.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__c.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3904 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap index 56e8aeed0..f9e87e083 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3905 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d2.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d2.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d2.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d2.snap index 72e8c8f0d..b231474b4 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__d2.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__d2.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3915 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__e.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__e.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__e.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__e.snap index 733d62883..a7dc23fad 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__e.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__e.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3662 +source: kcl/src/parsing/parser.rs +assertion_line: 3906 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__f.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__f.snap similarity index 94% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__f.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__f.snap index 82fe3b898..600f3b56e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__f.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__f.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3663 +source: kcl/src/parsing/parser.rs +assertion_line: 3907 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__g.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__g.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__g.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__g.snap index 2a7269487..5347d32bd 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__g.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__g.snap @@ -1,6 +1,8 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3908 expression: actual +snapshot_kind: text --- { "body": [ diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__h.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__h.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__h.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__h.snap index aee00de5c..78d8ec1c2 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__h.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__h.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3672 +source: kcl/src/parsing/parser.rs +assertion_line: 3916 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__i.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__i.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__i.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__i.snap index 18a5a03d2..8be5525e6 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__i.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__i.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3677 +source: kcl/src/parsing/parser.rs +assertion_line: 3921 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__j.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__j.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__j.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__j.snap index afe1770ac..8c4868916 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__j.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__j.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3682 +source: kcl/src/parsing/parser.rs +assertion_line: 3926 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__k.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__k.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__k.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__k.snap index 7cd79b447..10b79332c 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__k.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__k.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3687 +source: kcl/src/parsing/parser.rs +assertion_line: 3931 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_all_named.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_all_named.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_all_named.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_all_named.snap index e865af411..215dbb5ed 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_all_named.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_all_named.snap @@ -1,7 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs expression: actual -snapshot_kind: text --- { "body": [ diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_unnamed_first.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_unnamed_first.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_unnamed_first.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_unnamed_first.snap index 90db6f4f9..d7b0c67e5 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__kw_function_unnamed_first.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__kw_function_unnamed_first.snap @@ -1,7 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs expression: actual -snapshot_kind: text --- { "body": [ diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__l.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__l.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__l.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__l.snap index 7c6003436..59c9266be 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__l.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__l.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3692 +source: kcl/src/parsing/parser.rs +assertion_line: 3936 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__m.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__m.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__m.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__m.snap index 3b76fe1a2..60263cbf0 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__m.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__m.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3697 +source: kcl/src/parsing/parser.rs +assertion_line: 3941 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__n.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__n.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__n.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__n.snap index 95f2cee7c..672a396fd 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__n.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__n.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3702 +source: kcl/src/parsing/parser.rs +assertion_line: 3946 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__o.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__o.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__o.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__o.snap index df1eafa3d..22b78e87e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__o.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__o.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3703 +source: kcl/src/parsing/parser.rs +assertion_line: 3947 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__p.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__p.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__p.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__p.snap index 37fff21bd..250886a1e 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__p.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__p.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3704 +source: kcl/src/parsing/parser.rs +assertion_line: 3948 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__q.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__q.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__q.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__q.snap index 370783b6d..6e66c823c 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__q.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__q.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3705 +source: kcl/src/parsing/parser.rs +assertion_line: 3949 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__r.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__r.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__r.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__r.snap index 72cf2ef08..05ad844ea 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__r.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__r.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3706 +source: kcl/src/parsing/parser.rs +assertion_line: 3950 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__s.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__s.snap similarity index 96% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__s.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__s.snap index 57cbc351f..a42358948 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__s.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__s.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3955 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__t.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__t.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__t.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__t.snap index 261d1d28b..41d53eec1 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__t.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__t.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3956 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__u.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__u.snap similarity index 97% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__u.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__u.snap index 36b7438b3..a9b6215c3 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__u.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__u.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3957 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__v.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__v.snap similarity index 94% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__v.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__v.snap index 68edd600c..3ce627a2d 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__v.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__v.snap @@ -1,6 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs -assertion_line: 3714 +source: kcl/src/parsing/parser.rs +assertion_line: 3958 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__w.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__w.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__w.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__w.snap index f7458327c..7aea18604 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__w.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__w.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3959 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__x.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__x.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__x.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__x.snap index 754dd975f..b5fb972b2 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__x.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__x.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3960 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__y.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap similarity index 95% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__y.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap index b6e738160..3b8c8e7bb 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__y.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__y.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3961 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__z.snap b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap similarity index 98% rename from src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__z.snap rename to src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap index b039586e0..411791887 100644 --- a/src/wasm-lib/kcl/src/parser/snapshots/kcl_lib__parser__parser_impl__snapshot_tests__z.snap +++ b/src/wasm-lib/kcl/src/parsing/snapshots/kcl_lib__parsing__parser__snapshot_tests__z.snap @@ -1,5 +1,6 @@ --- -source: kcl/src/parser/parser_impl.rs +source: kcl/src/parsing/parser.rs +assertion_line: 3962 expression: actual snapshot_kind: text --- diff --git a/src/wasm-lib/kcl/src/token.rs b/src/wasm-lib/kcl/src/parsing/token/mod.rs similarity index 99% rename from src/wasm-lib/kcl/src/token.rs rename to src/wasm-lib/kcl/src/parsing/token/mod.rs index 21e50be8a..0f71000c9 100644 --- a/src/wasm-lib/kcl/src/token.rs +++ b/src/wasm-lib/kcl/src/parsing/token/mod.rs @@ -8,8 +8,8 @@ use tower_lsp::lsp_types::SemanticTokenType; use winnow::{error::ParseError, stream::ContainsToken}; use crate::{ - ast::types::{ItemVisibility, VariableKind}, errors::KclError, + parsing::ast::types::{ItemVisibility, VariableKind}, source_range::{ModuleId, SourceRange}, }; diff --git a/src/wasm-lib/kcl/src/token/tokeniser.rs b/src/wasm-lib/kcl/src/parsing/token/tokeniser.rs similarity index 99% rename from src/wasm-lib/kcl/src/token/tokeniser.rs rename to src/wasm-lib/kcl/src/parsing/token/tokeniser.rs index b46c2d588..e6fbb4ad5 100644 --- a/src/wasm-lib/kcl/src/token/tokeniser.rs +++ b/src/wasm-lib/kcl/src/parsing/token/tokeniser.rs @@ -11,8 +11,8 @@ use winnow::{ }; use crate::{ + parsing::token::{Token, TokenType}, source_range::ModuleId, - token::{Token, TokenType}, }; lazy_static! { @@ -1854,13 +1854,13 @@ const things = "things" #[test] fn test_kitt() { - let program = include_str!("../../../tests/executor/inputs/kittycad_svg.kcl"); + let program = include_str!("../../../../tests/executor/inputs/kittycad_svg.kcl"); let actual = lex(program, ModuleId::default()).unwrap(); assert_eq!(actual.len(), 5103); } #[test] fn test_pipes_on_pipes() { - let program = include_str!("../../../tests/executor/inputs/pipes_on_pipes.kcl"); + let program = include_str!("../../../../tests/executor/inputs/pipes_on_pipes.kcl"); let actual = lex(program, ModuleId::default()).unwrap(); assert_eq!(actual.len(), 17841); } diff --git a/src/wasm-lib/kcl/src/simulation_tests.rs b/src/wasm-lib/kcl/src/simulation_tests.rs index 7e67c4ca5..e79ce7951 100644 --- a/src/wasm-lib/kcl/src/simulation_tests.rs +++ b/src/wasm-lib/kcl/src/simulation_tests.rs @@ -1,8 +1,8 @@ use insta::rounded_redaction; use crate::{ - ast::types::{Node, Program}, errors::KclError, + parsing::ast::types::{Node, Program}, source_range::ModuleId, }; @@ -45,10 +45,10 @@ fn read(filename: &'static str, test_name: &str) -> String { fn parse(test_name: &str) { let input = read("input.kcl", test_name); - let tokens = crate::token::lexer(&input, ModuleId::default()).unwrap(); + let tokens = crate::parsing::token::lexer(&input, ModuleId::default()).unwrap(); // Parse the tokens into an AST. - let parse_res = Result::<_, KclError>::Ok(crate::parser::parse_tokens(tokens).unwrap()); + let parse_res = Result::<_, KclError>::Ok(crate::parsing::parse_tokens(tokens).unwrap()); assert_snapshot(test_name, "Result of parsing", || { insta::assert_json_snapshot!("ast", parse_res); }); diff --git a/src/wasm-lib/kcl/src/std/args.rs b/src/wasm-lib/kcl/src/std/args.rs index cd48248a2..e65ddee9d 100644 --- a/src/wasm-lib/kcl/src/std/args.rs +++ b/src/wasm-lib/kcl/src/std/args.rs @@ -6,13 +6,13 @@ use kittycad_modeling_cmds as kcmc; use super::shapes::PolygonType; use crate::{ - ast::types::TagNode, errors::{KclError, KclErrorDetails}, executor::{ ExecState, ExecutorContext, ExtrudeSurface, KclValue, Metadata, Sketch, SketchSet, SketchSurface, Solid, SolidSet, TagIdentifier, }, kcl_value::KclObjectFields, + parsing::ast::types::TagNode, source_range::SourceRange, std::{shapes::SketchOrSurface, sketch::FaceTag, FnAsArg}, ModuleId, @@ -578,7 +578,7 @@ where { fn from_args(args: &'a Args, i: usize) -> Result { let Some(arg) = args.args.get(i) else { return Ok(None) }; - if crate::ast::types::KclNone::from_kcl_val(&arg.value).is_some() { + if crate::parsing::ast::types::KclNone::from_kcl_val(&arg.value).is_some() { return Ok(None); } let Some(val) = T::from_kcl_val(&arg.value) else { @@ -1509,7 +1509,7 @@ impl<'a> FromKclValue<'a> for String { Some(value.to_owned()) } } -impl<'a> FromKclValue<'a> for crate::ast::types::KclNone { +impl<'a> FromKclValue<'a> for crate::parsing::ast::types::KclNone { fn from_kcl_val(arg: &'a KclValue) -> Option { let KclValue::KclNone { value, meta: _ } = arg else { return None; diff --git a/src/wasm-lib/kcl/src/std/chamfer.rs b/src/wasm-lib/kcl/src/std/chamfer.rs index ef6f2ecfd..4451cdee6 100644 --- a/src/wasm-lib/kcl/src/std/chamfer.rs +++ b/src/wasm-lib/kcl/src/std/chamfer.rs @@ -8,9 +8,9 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::{ - ast::types::TagNode, errors::{KclError, KclErrorDetails}, executor::{ChamferSurface, EdgeCut, ExecState, ExtrudeSurface, GeoMeta, KclValue, Solid}, + parsing::ast::types::TagNode, std::{fillet::EdgeReference, Args}, }; diff --git a/src/wasm-lib/kcl/src/std/fillet.rs b/src/wasm-lib/kcl/src/std/fillet.rs index 9f8641190..0da8c6be7 100644 --- a/src/wasm-lib/kcl/src/std/fillet.rs +++ b/src/wasm-lib/kcl/src/std/fillet.rs @@ -12,9 +12,9 @@ use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::{ - ast::types::TagNode, errors::{KclError, KclErrorDetails}, executor::{EdgeCut, ExecState, ExtrudeSurface, FilletSurface, GeoMeta, KclValue, Solid, TagIdentifier}, + parsing::ast::types::TagNode, settings::types::UnitLength, std::Args, }; diff --git a/src/wasm-lib/kcl/src/std/kcl_stdlib.rs b/src/wasm-lib/kcl/src/std/kcl_stdlib.rs index 6ed9fc85d..7cc91a5fe 100644 --- a/src/wasm-lib/kcl/src/std/kcl_stdlib.rs +++ b/src/wasm-lib/kcl/src/std/kcl_stdlib.rs @@ -4,8 +4,8 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::{ - ast::types::{FunctionExpression, Program}, docs::{StdLibFn, StdLibFnData}, + parsing::ast::types::{FunctionExpression, Program}, }; pub trait KclStdLibFn: StdLibFn { diff --git a/src/wasm-lib/kcl/src/std/mod.rs b/src/wasm-lib/kcl/src/std/mod.rs index eb4988368..1b66e2dd6 100644 --- a/src/wasm-lib/kcl/src/std/mod.rs +++ b/src/wasm-lib/kcl/src/std/mod.rs @@ -36,10 +36,10 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::{ - ast::types::FunctionExpression, docs::StdLibFn, errors::KclError, executor::{ExecState, KclValue, ProgramMemory}, + parsing::ast::types::FunctionExpression, std::kcl_stdlib::KclStdLibFn, }; @@ -320,6 +320,6 @@ pub enum Primitive { /// A closure used as an argument to a stdlib function. pub struct FnAsArg<'a> { pub func: Option<&'a crate::executor::MemoryFunction>, - pub expr: crate::ast::types::BoxNode, + pub expr: crate::parsing::ast::types::BoxNode, pub memory: Box, } diff --git a/src/wasm-lib/kcl/src/std/shapes.rs b/src/wasm-lib/kcl/src/std/shapes.rs index 7b9e0e51e..353cc6e11 100644 --- a/src/wasm-lib/kcl/src/std/shapes.rs +++ b/src/wasm-lib/kcl/src/std/shapes.rs @@ -14,9 +14,9 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::{ - ast::types::TagNode, errors::{KclError, KclErrorDetails}, executor::{BasePath, ExecState, GeoMeta, KclValue, Path, Sketch, SketchSurface}, + parsing::ast::types::TagNode, std::Args, }; diff --git a/src/wasm-lib/kcl/src/std/sketch.rs b/src/wasm-lib/kcl/src/std/sketch.rs index 0afc3b5d4..7eb3eab11 100644 --- a/src/wasm-lib/kcl/src/std/sketch.rs +++ b/src/wasm-lib/kcl/src/std/sketch.rs @@ -13,12 +13,12 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::{ - ast::types::TagNode, errors::{KclError, KclErrorDetails}, executor::{ BasePath, ExecState, Face, GeoMeta, KclValue, Path, Plane, Point2d, Point3d, Sketch, SketchSet, SketchSurface, Solid, TagEngineInfo, TagIdentifier, }, + parsing::ast::types::TagNode, std::{ utils::{ arc_angles, arc_center_and_end, get_tangential_arc_to_info, get_x_component, get_y_component, diff --git a/src/wasm-lib/kcl/src/unparser.rs b/src/wasm-lib/kcl/src/unparser.rs index e1946b105..155163baa 100644 --- a/src/wasm-lib/kcl/src/unparser.rs +++ b/src/wasm-lib/kcl/src/unparser.rs @@ -1,6 +1,6 @@ use std::fmt::Write; -use crate::{ +use crate::parsing::{ ast::types::{ ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, BodyItem, CallExpression, CallExpressionKw, Expr, FnArgType, FormatOptions, FunctionExpression, IfExpression, ImportStatement, @@ -8,7 +8,7 @@ use crate::{ NonCodeValue, ObjectExpression, Parameter, PipeExpression, Program, TagDeclarator, UnaryExpression, VariableDeclaration, VariableKind, }, - parser::PIPE_OPERATOR, + PIPE_OPERATOR, }; impl Program { @@ -173,7 +173,7 @@ impl Expr { Expr::PipeExpression(pipe_exp) => pipe_exp.recast(options, indentation_level), Expr::UnaryExpression(unary_exp) => unary_exp.recast(options), Expr::IfExpression(e) => e.recast(options, indentation_level, ctxt), - Expr::PipeSubstitution(_) => crate::parser::PIPE_SUBSTITUTION_OPERATOR.to_string(), + Expr::PipeSubstitution(_) => crate::parsing::PIPE_SUBSTITUTION_OPERATOR.to_string(), Expr::None(_) => { unimplemented!("there is no literal None, see https://github.com/KittyCAD/modeling-app/issues/1115") } @@ -683,7 +683,7 @@ mod tests { use pretty_assertions::assert_eq; use super::*; - use crate::{ast::types::FormatOptions, source_range::ModuleId}; + use crate::{parsing::ast::types::FormatOptions, source_range::ModuleId}; #[test] fn test_recast_if_else_if_same() { @@ -695,7 +695,7 @@ mod tests { 5 } "#; - let program = crate::parser::top_level_parse(input).unwrap(); + let program = crate::parsing::top_level_parse(input).unwrap(); let output = program.recast(&Default::default(), 0); assert_eq!(output, input); } @@ -708,7 +708,7 @@ mod tests { 5 } "#; - let program = crate::parser::top_level_parse(input).unwrap(); + let program = crate::parsing::top_level_parse(input).unwrap(); let output = program.recast(&Default::default(), 0); assert_eq!(output, input); } @@ -722,7 +722,7 @@ import a as aaa, b from "a.kcl" import a, b as bbb from "a.kcl" import a as aaa, b as bbb from "a.kcl" "#; - let program = crate::parser::top_level_parse(input).unwrap(); + let program = crate::parsing::top_level_parse(input).unwrap(); let output = program.recast(&Default::default(), 0); assert_eq!(output, input); } @@ -731,7 +731,7 @@ import a as aaa, b as bbb from "a.kcl" fn test_recast_import_as_same_name() { let input = r#"import a as a from "a.kcl" "#; - let program = crate::parser::top_level_parse(input).unwrap(); + let program = crate::parsing::top_level_parse(input).unwrap(); let output = program.recast(&Default::default(), 0); let expected = r#"import a from "a.kcl" "#; @@ -744,7 +744,7 @@ import a as aaa, b as bbb from "a.kcl" return 0 } "#; - let program = crate::parser::top_level_parse(input).unwrap(); + let program = crate::parsing::top_level_parse(input).unwrap(); let output = program.recast(&Default::default(), 0); assert_eq!(output, input); } @@ -867,7 +867,7 @@ fn zoo(x0, y0) { zoo(zoo_x, zoo_y) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted, some_program_string); @@ -936,7 +936,7 @@ outsideRevolve = startSketchOn('XZ') |> line([overHangLength - thickness, 0], %) |> close(%) |> revolve({ axis: 'y' }, %)"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1012,7 +1012,7 @@ outsideRevolve = startSketchOn('XZ') let some_program_string = r#"bing = { yo = 55 } myNestedVar = [{ prop = callExp(bing.yo) }] "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted, some_program_string); @@ -1023,7 +1023,7 @@ myNestedVar = [{ prop = callExp(bing.yo) }] let some_program_string = r#"bing = { yo = 55 } myNestedVar = [callExp(bing.yo)] "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted, some_program_string); @@ -1035,7 +1035,7 @@ myNestedVar = [callExp(bing.yo)] ten = 10 bar = [0 + 1 .. ten] "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted, some_program_string); @@ -1049,7 +1049,7 @@ bar = [0 + 1 .. ten] thing ( 1 ) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1069,7 +1069,7 @@ thing(1) return x + 1 } "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted, some_program_string); @@ -1084,7 +1084,7 @@ myNestedVar = [ } ] "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1102,7 +1102,7 @@ myNestedVar = [ #[test] fn test_recast_empty_file() { let some_program_string = r#""#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); // Its VERY important this comes back with zero new lines. @@ -1113,7 +1113,7 @@ myNestedVar = [ fn test_recast_empty_file_new_line() { let some_program_string = r#" "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); // Its VERY important this comes back with zero new lines. @@ -1131,7 +1131,7 @@ part001 = startSketchOn('XY') |> close(%) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1162,7 +1162,7 @@ part001 = startSketchOn('XY') |> close(%) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1192,7 +1192,7 @@ part001 = startSketchOn('XY') |> close(%) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1330,7 +1330,7 @@ tabs_l = startSketchOn({ distance = length - 10 }, %) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); // Its VERY important this comes back with zero new lines. @@ -1468,7 +1468,7 @@ tabs_l = startSketchOn({ |> close(%) |> extrude(scale, %) }"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1492,7 +1492,7 @@ tabs_l = startSketchOn({ |> startProfileAt([0.0, 5.0], %) |> line([0.4900857016, -0.0240763666], %) |> line([0.6804562304, 0.9087880491], %)"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1511,7 +1511,7 @@ tabs_l = startSketchOn({ |> startProfileAt([0.0, 5.0], %) |> line([0.4900857016, -0.0240763666], %) // hello world |> line([0.6804562304, 0.9087880491], %)"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1530,7 +1530,7 @@ tabs_l = startSketchOn({ |> line([0.4900857016, -0.0240763666], %) // hello world |> line([0.6804562304, 0.9087880491], %)"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1555,7 +1555,7 @@ tabs_l = startSketchOn({ // this is also a comment return things }"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1579,7 +1579,7 @@ tabs_l = startSketchOn({ // this is also a comment thing = 'foo' "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1600,7 +1600,7 @@ key = 'c' // hello thing = 'foo' "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1628,7 +1628,7 @@ thing = 'c' foo = 'bar' // "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1654,7 +1654,7 @@ foo = 'bar' // // hello thing = 'foo' "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1673,7 +1673,7 @@ thing = 'foo' /* comment at start */ mySk1 = startSketchAt([0, 0])"#; - let program = crate::parser::top_level_parse(test_program).unwrap(); + let program = crate::parsing::top_level_parse(test_program).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1703,7 +1703,7 @@ mySk1 = startSketchOn('XY') |> ry(45, %) |> rx(45, %) // one more for good measure"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1739,7 +1739,7 @@ mySk1 = startSketchOn('XY') intersectTag = seg01 }, %) |> line([-0.42, -1.72], %)"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted.trim(), some_program_string); @@ -1763,7 +1763,7 @@ yo = [ " hey oooooo really long long long" ] "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted, some_program_string); @@ -1779,7 +1779,7 @@ key = 'c' things = "things" // this is also a comment"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); let expected = some_program_string.trim(); @@ -1798,7 +1798,7 @@ things = "things" // a comment " }"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted.trim(), some_program_string.trim()); @@ -1822,7 +1822,7 @@ part001 = startSketchOn('XY') -angleToMatchLengthY(seg01, myVar, %), myVar ], %) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted.trim(), some_program_string); @@ -1847,7 +1847,7 @@ part001 = startSketchOn('XY') myVar ], %) // ln-lineTo-yAbsolute should use angleToMatchLengthY helper "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast( &FormatOptions { @@ -1876,7 +1876,7 @@ fn ghi = (part001) => { return part001 } "#; - let mut program = crate::parser::top_level_parse(some_program_string).unwrap(); + let mut program = crate::parsing::top_level_parse(some_program_string).unwrap(); program.rename_symbol("mySuperCoolPart", 6); let recasted = program.recast(&Default::default(), 0); @@ -1904,7 +1904,7 @@ fn ghi(part001) { let some_program_string = r#"fn ghi = (x, y, z) => { return x }"#; - let mut program = crate::parser::top_level_parse(some_program_string).unwrap(); + let mut program = crate::parsing::top_level_parse(some_program_string).unwrap(); program.rename_symbol("newName", 10); let recasted = program.recast(&Default::default(), 0); @@ -1926,7 +1926,7 @@ fn ghi(part001) { angle_start = 0, angle_end = 180, }, %)"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1956,7 +1956,7 @@ firstExtrude = startSketchOn('XY') |> close(%) |> extrude(h, %) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -1993,7 +1993,7 @@ firstExtrude = startSketchOn('XY') |> close(%) |> extrude(h, %) "#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!( @@ -2019,7 +2019,7 @@ firstExtrude = startSketchOn('XY') #[tokio::test(flavor = "multi_thread")] async fn test_recast_math_start_negative() { let some_program_string = r#"myVar = -5 + 6"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted.trim(), some_program_string); @@ -2036,7 +2036,7 @@ startSketchOn('XY') |> line([0, -(5 - thickness)], %) |> line([0, -(5 - 1)], %) |> line([0, -(-5 - 1)], %)"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted.trim(), some_program_string); @@ -2050,7 +2050,7 @@ FOS = 2 sigmaAllow = 8 width = 20 thickness = sqrt(distance * p * FOS * 6 / (sigmaAllow * width))"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted.trim(), some_program_string); @@ -2059,7 +2059,7 @@ thickness = sqrt(distance * p * FOS * 6 / (sigmaAllow * width))"#; #[tokio::test(flavor = "multi_thread")] async fn no_vardec_keyword() { let some_program_string = r#"distance = 5"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); assert_eq!(recasted.trim(), some_program_string); @@ -2072,7 +2072,7 @@ thickness = sqrt(distance * p * FOS * 6 / (sigmaAllow * width))"#; return 1 } }"#; - let program = crate::parser::top_level_parse(some_program_string).unwrap(); + let program = crate::parsing::top_level_parse(some_program_string).unwrap(); let recasted = program.recast(&Default::default(), 0); let expected = "\ fn f() { @@ -2107,10 +2107,8 @@ fn f() { .into_iter() .enumerate() { - let tokens = crate::token::lexer(raw, ModuleId::default()).unwrap(); - let literal = crate::parser::parser_impl::unsigned_number_literal - .parse(&tokens) - .unwrap(); + let tokens = crate::parsing::token::lexer(raw, ModuleId::default()).unwrap(); + let literal = crate::parsing::parser::unsigned_number_literal.parse(&tokens).unwrap(); assert_eq!( literal.recast(), expected, @@ -2140,7 +2138,7 @@ sketch002 = startSketchOn({ } }) "#; - let ast = crate::parser::top_level_parse(input).unwrap(); + let ast = crate::parsing::top_level_parse(input).unwrap(); let actual = ast.recast(&FormatOptions::new(), 0); assert_eq!(actual, expected); } @@ -2166,9 +2164,9 @@ sketch002 = startSketchOn({ .into_iter() .enumerate() { - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); - crate::parser::parser_impl::print_tokens(&tokens); - let expr = crate::parser::parser_impl::object.parse(&tokens).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); + crate::parsing::parser::print_tokens(&tokens); + let expr = crate::parsing::parser::object.parse(&tokens).unwrap(); assert_eq!( expr.recast(&FormatOptions::new(), 0, ExprContext::Other), expected, @@ -2264,8 +2262,8 @@ sketch002 = startSketchOn({ .into_iter() .enumerate() { - let tokens = crate::token::lexer(input, ModuleId::default()).unwrap(); - let expr = crate::parser::parser_impl::array_elem_by_elem.parse(&tokens).unwrap(); + let tokens = crate::parsing::token::lexer(input, ModuleId::default()).unwrap(); + let expr = crate::parsing::parser::array_elem_by_elem.parse(&tokens).unwrap(); assert_eq!( expr.recast(&FormatOptions::new(), 0, ExprContext::Other), expected, diff --git a/src/wasm-lib/kcl/src/walk/ast_node.rs b/src/wasm-lib/kcl/src/walk/ast_node.rs index 7f75ea2f4..9c8e8f87e 100644 --- a/src/wasm-lib/kcl/src/walk/ast_node.rs +++ b/src/wasm-lib/kcl/src/walk/ast_node.rs @@ -1,5 +1,5 @@ use crate::{ - ast::types::{self, NodeRef}, + parsing::ast::types::{self, NodeRef}, source_range::SourceRange, }; diff --git a/src/wasm-lib/kcl/src/walk/ast_walk.rs b/src/wasm-lib/kcl/src/walk/ast_walk.rs index a44267aeb..39f063019 100644 --- a/src/wasm-lib/kcl/src/walk/ast_walk.rs +++ b/src/wasm-lib/kcl/src/walk/ast_walk.rs @@ -1,7 +1,7 @@ use anyhow::Result; use crate::{ - ast::types::{ + parsing::ast::types::{ BinaryPart, BodyItem, Expr, IfExpression, LiteralIdentifier, MemberExpression, MemberObject, NodeRef, ObjectExpression, ObjectProperty, Parameter, Program, UnaryExpression, VariableDeclarator, }, @@ -336,7 +336,7 @@ mod tests { macro_rules! kcl { ( $kcl:expr ) => {{ - $crate::parser::top_level_parse($kcl).unwrap() + $crate::parsing::top_level_parse($kcl).unwrap() }}; } From f876e6ca3c7be475f997ea16a7d0ee40329f7464 Mon Sep 17 00:00:00 2001 From: Greg Sweeney Date: Thu, 5 Dec 2024 10:03:55 -0500 Subject: [PATCH 08/15] Bump and release kcl-lib 0.2.28 (#4669) bump kcl version --- src/wasm-lib/Cargo.lock | 2 +- src/wasm-lib/kcl/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index a6114dc4b..f9a1ed3a5 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -1706,7 +1706,7 @@ dependencies = [ [[package]] name = "kcl-lib" -version = "0.2.27" +version = "0.2.28" dependencies = [ "anyhow", "approx 0.5.1", diff --git a/src/wasm-lib/kcl/Cargo.toml b/src/wasm-lib/kcl/Cargo.toml index 95d28749a..0305f05ee 100644 --- a/src/wasm-lib/kcl/Cargo.toml +++ b/src/wasm-lib/kcl/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-lib" description = "KittyCAD Language implementation and tools" -version = "0.2.27" +version = "0.2.28" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" From 1495cc6d186ffcb54aadffb2a3de926e7cd432b6 Mon Sep 17 00:00:00 2001 From: Jonathan Tran Date: Thu, 5 Dec 2024 11:04:04 -0500 Subject: [PATCH 09/15] Fix default planes to be created in deterministic order (#4664) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix default planes to be created in deterministic order * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * Trigger CI * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Trigger CI --------- Co-authored-by: github-actions[bot] --- e2e/playwright/regression-tests.spec.ts | 2 +- ...-Grid-turned-off-1-Google-Chrome-linux.png | Bin 34026 -> 33639 bytes ...-Grid-turned-off-1-Google-Chrome-win32.png | Bin 34868 -> 34466 bytes ...y-Grid-turned-on-1-Google-Chrome-linux.png | Bin 53960 -> 51646 bytes ...y-Grid-turned-on-1-Google-Chrome-win32.png | Bin 54746 -> 52465 bytes .../testing-perspective-toggle.spec.ts | 2 +- src/wasm-lib/kcl/src/engine/mod.rs | 120 ++++++++---------- 7 files changed, 56 insertions(+), 68 deletions(-) diff --git a/e2e/playwright/regression-tests.spec.ts b/e2e/playwright/regression-tests.spec.ts index be483dc7e..7a74087df 100644 --- a/e2e/playwright/regression-tests.spec.ts +++ b/e2e/playwright/regression-tests.spec.ts @@ -550,7 +550,7 @@ sketch001 = startSketchAt([-0, -0]) const u = await getUtils(page) // Constants and locators - const planeColor: [number, number, number] = [170, 220, 170] + const planeColor: [number, number, number] = [161, 220, 155] const bgColor: [number, number, number] = [27, 27, 27] const middlePixelIsColor = async (color: [number, number, number]) => { return u.getGreatestPixDiff({ x: 600, y: 250 }, color) diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-off-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-off-1-Google-Chrome-linux.png index 378c43abbb89c41c0450208582c5e5ce03baca3b..d283a77f4af026e6bbf826b04300cabc54a8046f 100644 GIT binary patch literal 33639 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 literal 34026 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 z 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 JN6cgY{{!we`q%&f diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-off-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-off-1-Google-Chrome-win32.png index be55c744a11e842061acd87cdba981f626f0f868..1d16408223170f830dd770b3311e0b250ed0682c 100644 GIT binary patch literal 34466 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 U`G*`IF~2{QQIRe}8oc^{0D{NV%m4rY literal 34868 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 LqC~OSYv2C^1l3f0 diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-on-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-on-1-Google-Chrome-linux.png index 0fc0607366fb4f9f0c9742415c9f19644af2da0e..67fae90ab2287b81b159b29554f24d48eeec140a 100644 GIT binary patch literal 51646 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 F{|}!IMzsI{ diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-on-1-Google-Chrome-win32.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/Grid-visibility-Grid-turned-on-1-Google-Chrome-win32.png index 83a3c1d397919657dc33ea45d11fbd967f131f94..96afeb1867531bd8109f784e1642152940fbdf73 100644 GIT binary patch literal 52465 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 literal 54746 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

|s3te57qvm>Zq!& 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 sh@{^$ { y: screenHeight * 0.4, } const backgroundColor: [number, number, number] = [29, 29, 29] - const xzPlaneColor: [number, number, number] = [50, 50, 99] + const xzPlaneColor: [number, number, number] = [82, 55, 96] const locationToHaveColor = async (color: [number, number, number]) => { return u.getGreatestPixDiff(checkedScreenLocation, color) } diff --git a/src/wasm-lib/kcl/src/engine/mod.rs b/src/wasm-lib/kcl/src/engine/mod.rs index f985324a2..20e825dc4 100644 --- a/src/wasm-lib/kcl/src/engine/mod.rs +++ b/src/wasm-lib/kcl/src/engine/mod.rs @@ -342,92 +342,80 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { id_generator: &mut IdGenerator, source_range: SourceRange, ) -> Result { - let plane_settings: HashMap)> = HashMap::from([ + let plane_settings: Vec<(PlaneName, Uuid, Point3d, Point3d, Option)> = vec![ ( PlaneName::Xy, - ( - id_generator.next_uuid(), - Point3d { x: 1.0, y: 0.0, z: 0.0 }, - Point3d { x: 0.0, y: 1.0, z: 0.0 }, - Some(Color { - r: 0.7, - g: 0.28, - b: 0.28, - a: 0.4, - }), - ), + id_generator.next_uuid(), + Point3d { x: 1.0, y: 0.0, z: 0.0 }, + Point3d { x: 0.0, y: 1.0, z: 0.0 }, + Some(Color { + r: 0.7, + g: 0.28, + b: 0.28, + a: 0.4, + }), ), ( PlaneName::Yz, - ( - id_generator.next_uuid(), - Point3d { x: 0.0, y: 1.0, z: 0.0 }, - Point3d { x: 0.0, y: 0.0, z: 1.0 }, - Some(Color { - r: 0.28, - g: 0.7, - b: 0.28, - a: 0.4, - }), - ), + id_generator.next_uuid(), + Point3d { x: 0.0, y: 1.0, z: 0.0 }, + Point3d { x: 0.0, y: 0.0, z: 1.0 }, + Some(Color { + r: 0.28, + g: 0.7, + b: 0.28, + a: 0.4, + }), ), ( PlaneName::Xz, - ( - id_generator.next_uuid(), - Point3d { x: 1.0, y: 0.0, z: 0.0 }, - Point3d { x: 0.0, y: 0.0, z: 1.0 }, - Some(Color { - r: 0.28, - g: 0.28, - b: 0.7, - a: 0.4, - }), - ), + id_generator.next_uuid(), + Point3d { x: 1.0, y: 0.0, z: 0.0 }, + Point3d { x: 0.0, y: 0.0, z: 1.0 }, + Some(Color { + r: 0.28, + g: 0.28, + b: 0.7, + a: 0.4, + }), ), ( PlaneName::NegXy, - ( - id_generator.next_uuid(), - Point3d { - x: -1.0, - y: 0.0, - z: 0.0, - }, - Point3d { x: 0.0, y: 1.0, z: 0.0 }, - None, - ), + id_generator.next_uuid(), + Point3d { + x: -1.0, + y: 0.0, + z: 0.0, + }, + Point3d { x: 0.0, y: 1.0, z: 0.0 }, + None, ), ( PlaneName::NegYz, - ( - id_generator.next_uuid(), - Point3d { - x: 0.0, - y: -1.0, - z: 0.0, - }, - Point3d { x: 0.0, y: 0.0, z: 1.0 }, - None, - ), + id_generator.next_uuid(), + Point3d { + x: 0.0, + y: -1.0, + z: 0.0, + }, + Point3d { x: 0.0, y: 0.0, z: 1.0 }, + None, ), ( PlaneName::NegXz, - ( - id_generator.next_uuid(), - Point3d { - x: -1.0, - y: 0.0, - z: 0.0, - }, - Point3d { x: 0.0, y: 0.0, z: 1.0 }, - None, - ), + id_generator.next_uuid(), + Point3d { + x: -1.0, + y: 0.0, + z: 0.0, + }, + Point3d { x: 0.0, y: 0.0, z: 1.0 }, + None, ), - ]); + ]; let mut planes = HashMap::new(); - for (name, (plane_id, x_axis, y_axis, color)) in plane_settings { + for (name, plane_id, x_axis, y_axis, color) in plane_settings { planes.insert( name, self.make_default_plane(plane_id, x_axis, y_axis, color, source_range) From 2bf20988efbb4e01adfe4b7ecd81bf23df50dd43 Mon Sep 17 00:00:00 2001 From: Jonathan Tran Date: Thu, 5 Dec 2024 12:09:35 -0500 Subject: [PATCH 10/15] Fix to never have undefined iteration order and lint against it (#4665) --- src/wasm-lib/Cargo.toml | 3 +++ src/wasm-lib/derive-docs/Cargo.toml | 3 +++ src/wasm-lib/kcl-test-server/Cargo.toml | 3 +++ src/wasm-lib/kcl-to-core/Cargo.toml | 3 +++ src/wasm-lib/kcl/Cargo.toml | 3 +++ src/wasm-lib/kcl/fuzz/Cargo.toml | 3 +++ src/wasm-lib/kcl/src/docs/gen_std_tests.rs | 5 +++-- src/wasm-lib/kcl/src/engine/conn.rs | 7 ++++++- src/wasm-lib/kcl/src/engine/mod.rs | 4 ++++ src/wasm-lib/kcl/src/executor.rs | 15 ++++++--------- src/wasm-lib/kcl/src/std/mod.rs | 9 ++++----- src/wasm-lib/kcl/src/std/sketch.rs | 5 ++--- 12 files changed, 43 insertions(+), 20 deletions(-) diff --git a/src/wasm-lib/Cargo.toml b/src/wasm-lib/Cargo.toml index 6520676bd..f537690fc 100644 --- a/src/wasm-lib/Cargo.toml +++ b/src/wasm-lib/Cargo.toml @@ -77,6 +77,9 @@ http = "1" kittycad = { version = "0.3.28", default-features = false, features = ["js", "requests"] } kittycad-modeling-cmds = { version = "0.2.77", features = ["websocket"] } +[workspace.lints.clippy] +iter_over_hash_type = "warn" + [[test]] name = "executor" path = "tests/executor/main.rs" diff --git a/src/wasm-lib/derive-docs/Cargo.toml b/src/wasm-lib/derive-docs/Cargo.toml index 3e8dbed84..e9b4815d2 100644 --- a/src/wasm-lib/derive-docs/Cargo.toml +++ b/src/wasm-lib/derive-docs/Cargo.toml @@ -27,3 +27,6 @@ anyhow = "1.0.93" expectorate = "1.1.0" pretty_assertions = "1.4.1" rustfmt-wrapper = "0.2.1" + +[lints] +workspace = true diff --git a/src/wasm-lib/kcl-test-server/Cargo.toml b/src/wasm-lib/kcl-test-server/Cargo.toml index c2312eb8f..ca0c4bac3 100644 --- a/src/wasm-lib/kcl-test-server/Cargo.toml +++ b/src/wasm-lib/kcl-test-server/Cargo.toml @@ -13,3 +13,6 @@ pico-args = "0.5.0" serde = { version = "1.0.214", features = ["derive"] } serde_json = "1.0.128" tokio = { version = "1.41.1", features = ["macros", "rt-multi-thread"] } + +[lints] +workspace = true diff --git a/src/wasm-lib/kcl-to-core/Cargo.toml b/src/wasm-lib/kcl-to-core/Cargo.toml index 455fcddf5..96088e026 100644 --- a/src/wasm-lib/kcl-to-core/Cargo.toml +++ b/src/wasm-lib/kcl-to-core/Cargo.toml @@ -21,3 +21,6 @@ kittycad = { workspace = true, features = ["clap"] } kittycad-modeling-cmds = { workspace = true } tokio = { version = "1.41", features = ["full", "time", "rt", "tracing"] } uuid = { version = "1.11.0", features = ["v4", "js", "serde"] } + +[lints] +workspace = true diff --git a/src/wasm-lib/kcl/Cargo.toml b/src/wasm-lib/kcl/Cargo.toml index 0305f05ee..4aa594226 100644 --- a/src/wasm-lib/kcl/Cargo.toml +++ b/src/wasm-lib/kcl/Cargo.toml @@ -121,6 +121,9 @@ pretty_assertions = "1.4.1" tokio = { version = "1.41.1", features = ["rt-multi-thread", "macros", "time"] } twenty-twenty = "0.8.0" +[lints] +workspace = true + [[bench]] name = "compiler_benchmark_criterion" harness = false diff --git a/src/wasm-lib/kcl/fuzz/Cargo.toml b/src/wasm-lib/kcl/fuzz/Cargo.toml index f75b8420d..f88f4b363 100644 --- a/src/wasm-lib/kcl/fuzz/Cargo.toml +++ b/src/wasm-lib/kcl/fuzz/Cargo.toml @@ -22,6 +22,9 @@ members = ["."] [profile.release] debug = 1 +[lints] +workspace = true + [[bin]] name = "parser" path = "fuzz_targets/parser.rs" diff --git a/src/wasm-lib/kcl/src/docs/gen_std_tests.rs b/src/wasm-lib/kcl/src/docs/gen_std_tests.rs index 00d85d711..0bd3439c8 100644 --- a/src/wasm-lib/kcl/src/docs/gen_std_tests.rs +++ b/src/wasm-lib/kcl/src/docs/gen_std_tests.rs @@ -1,9 +1,10 @@ -use std::collections::{BTreeMap, HashMap}; +use std::collections::BTreeMap; use anyhow::Result; use base64::Engine; use convert_case::Casing; use handlebars::Renderable; +use indexmap::IndexMap; use itertools::Itertools; use serde_json::json; @@ -271,7 +272,7 @@ fn init_handlebars() -> Result> { Ok(hbs) } -fn generate_index(combined: &HashMap>) -> Result<()> { +fn generate_index(combined: &IndexMap>) -> Result<()> { let hbs = init_handlebars()?; let mut functions = Vec::new(); diff --git a/src/wasm-lib/kcl/src/engine/conn.rs b/src/wasm-lib/kcl/src/engine/conn.rs index 953a26a70..b85f3512a 100644 --- a/src/wasm-lib/kcl/src/engine/conn.rs +++ b/src/wasm-lib/kcl/src/engine/conn.rs @@ -213,7 +213,12 @@ impl EngineConnection { WebSocketResponse::Success(SuccessWebSocketResponse { resp: OkWebSocketResponseData::ModelingBatch { responses }, .. - }) => { + }) => + { + #[expect( + clippy::iter_over_hash_type, + reason = "modeling command uses a HashMap and keys are random, so we don't really have a choice" + )] for (resp_id, batch_response) in responses { let id: uuid::Uuid = (*resp_id).into(); match batch_response { diff --git a/src/wasm-lib/kcl/src/engine/mod.rs b/src/wasm-lib/kcl/src/engine/mod.rs index 20e825dc4..09d35a2e1 100644 --- a/src/wasm-lib/kcl/src/engine/mod.rs +++ b/src/wasm-lib/kcl/src/engine/mod.rs @@ -463,6 +463,10 @@ pub trait EngineManager: std::fmt::Debug + Send + Sync + 'static { responses: HashMap, ) -> Result { // Iterate over the responses and check for errors. + #[expect( + clippy::iter_over_hash_type, + reason = "modeling command uses a HashMap and keys are random, so we don't really have a choice" + )] for (cmd_id, resp) in responses.iter() { match resp { BatchResponse::Success { response } => { diff --git a/src/wasm-lib/kcl/src/executor.rs b/src/wasm-lib/kcl/src/executor.rs index 8c599092a..67bb0de34 100644 --- a/src/wasm-lib/kcl/src/executor.rs +++ b/src/wasm-lib/kcl/src/executor.rs @@ -1,9 +1,6 @@ //! The executor for the AST. -use std::{ - collections::{HashMap, HashSet}, - sync::Arc, -}; +use std::{collections::HashSet, sync::Arc}; use anyhow::Result; use async_recursion::async_recursion; @@ -193,7 +190,7 @@ impl EnvironmentRef { #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] pub struct Environment { - bindings: HashMap, + bindings: IndexMap, parent: Option, } @@ -203,7 +200,7 @@ impl Environment { pub fn root() -> Self { Self { // Prelude - bindings: HashMap::from([ + bindings: IndexMap::from([ ("ZERO".to_string(), KclValue::from_number(0.0, NO_META)), ("QUARTER_TURN".to_string(), KclValue::from_number(90.0, NO_META)), ("HALF_TURN".to_string(), KclValue::from_number(180.0, NO_META)), @@ -215,7 +212,7 @@ impl Environment { pub fn new(parent: EnvironmentRef) -> Self { Self { - bindings: HashMap::new(), + bindings: IndexMap::new(), parent: Some(parent), } } @@ -770,8 +767,8 @@ pub struct Sketch { /// The starting path. pub start: BasePath, /// Tag identifiers that have been declared in this sketch. - #[serde(default, skip_serializing_if = "HashMap::is_empty")] - pub tags: HashMap, + #[serde(default, skip_serializing_if = "IndexMap::is_empty")] + pub tags: IndexMap, /// The original id of the sketch. This stays the same even if the sketch is /// is sketched on face etc. #[serde(skip)] diff --git a/src/wasm-lib/kcl/src/std/mod.rs b/src/wasm-lib/kcl/src/std/mod.rs index 1b66e2dd6..99e32b192 100644 --- a/src/wasm-lib/kcl/src/std/mod.rs +++ b/src/wasm-lib/kcl/src/std/mod.rs @@ -25,11 +25,10 @@ pub mod types; pub mod units; pub mod utils; -use std::collections::HashMap; - use anyhow::Result; pub use args::Args; use derive_docs::stdlib; +use indexmap::IndexMap; use lazy_static::lazy_static; use parse_display::{Display, FromStr}; use schemars::JsonSchema; @@ -167,8 +166,8 @@ pub fn get_stdlib_fn(name: &str) -> Option> { } pub struct StdLib { - pub fns: HashMap>, - pub kcl_fns: HashMap>, + pub fns: IndexMap>, + pub kcl_fns: IndexMap>, } impl std::fmt::Debug for StdLib { @@ -198,7 +197,7 @@ impl StdLib { } // Get the combined hashmaps. - pub fn combined(&self) -> HashMap> { + pub fn combined(&self) -> IndexMap> { let mut combined = self.fns.clone(); for (k, v) in self.kcl_fns.clone() { combined.insert(k, v.std_lib()); diff --git a/src/wasm-lib/kcl/src/std/sketch.rs b/src/wasm-lib/kcl/src/std/sketch.rs index 7eb3eab11..7754284e3 100644 --- a/src/wasm-lib/kcl/src/std/sketch.rs +++ b/src/wasm-lib/kcl/src/std/sketch.rs @@ -1,9 +1,8 @@ //! Functions related to sketching. -use std::collections::HashMap; - use anyhow::Result; use derive_docs::stdlib; +use indexmap::IndexMap; use kcmc::shared::Point2d as KPoint2d; // Point2d is already defined in this pkg, to impl ts_rs traits. use kcmc::{each_cmd as mcmd, length_unit::LengthUnit, shared::Angle, ModelingCmd}; use kittycad_modeling_cmds as kcmc; @@ -1301,7 +1300,7 @@ pub(crate) async fn inner_start_profile_at( }), surface: None, }); - HashMap::from([(tag.name.to_string(), tag_identifier)]) + IndexMap::from([(tag.name.to_string(), tag_identifier)]) } else { Default::default() }, From 7be53c7d4a205a1e3d994d9d6c8d605c91c9a078 Mon Sep 17 00:00:00 2001 From: Adam Chalmers Date: Thu, 5 Dec 2024 11:34:43 -0600 Subject: [PATCH 11/15] Bump KCL, KCL test server, derive-docs (#4670) --- src/wasm-lib/Cargo.lock | 4 ++-- src/wasm-lib/derive-docs/Cargo.toml | 2 +- src/wasm-lib/kcl-test-server/Cargo.toml | 2 +- src/wasm-lib/kcl/Cargo.toml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index f9a1ed3a5..d709e3f39 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -746,7 +746,7 @@ dependencies = [ [[package]] name = "derive-docs" -version = "0.1.31" +version = "0.1.32" dependencies = [ "Inflector", "anyhow", @@ -1773,7 +1773,7 @@ dependencies = [ [[package]] name = "kcl-test-server" -version = "0.1.17" +version = "0.1.18" dependencies = [ "anyhow", "hyper 0.14.30", diff --git a/src/wasm-lib/derive-docs/Cargo.toml b/src/wasm-lib/derive-docs/Cargo.toml index e9b4815d2..2cf024420 100644 --- a/src/wasm-lib/derive-docs/Cargo.toml +++ b/src/wasm-lib/derive-docs/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "derive-docs" description = "A tool for generating documentation from Rust derive macros" -version = "0.1.31" +version = "0.1.32" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" diff --git a/src/wasm-lib/kcl-test-server/Cargo.toml b/src/wasm-lib/kcl-test-server/Cargo.toml index ca0c4bac3..043b115ef 100644 --- a/src/wasm-lib/kcl-test-server/Cargo.toml +++ b/src/wasm-lib/kcl-test-server/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-test-server" description = "A test server for KCL" -version = "0.1.17" +version = "0.1.18" edition = "2021" license = "MIT" diff --git a/src/wasm-lib/kcl/Cargo.toml b/src/wasm-lib/kcl/Cargo.toml index 4aa594226..90af9b245 100644 --- a/src/wasm-lib/kcl/Cargo.toml +++ b/src/wasm-lib/kcl/Cargo.toml @@ -23,7 +23,7 @@ clap = { version = "4.5.21", default-features = false, optional = true, features convert_case = "0.6.0" dashmap = "6.1.0" databake = { version = "0.1.8", features = ["derive"] } -derive-docs = { version = "0.1.29", path = "../derive-docs" } +derive-docs = { version = "0.1.32", path = "../derive-docs" } dhat = { version = "0.3", optional = true } fnv = "1.0.7" form_urlencoded = "1.2.1" From 18e1855fa9231e276e1d87530dcae18bdc8f9d75 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 17:44:35 +0000 Subject: [PATCH 12/15] Bump indexmap from 2.6.0 to 2.7.0 in /src/wasm-lib (#4622) Bumps [indexmap](https://github.com/indexmap-rs/indexmap) from 2.6.0 to 2.7.0. - [Changelog](https://github.com/indexmap-rs/indexmap/blob/master/RELEASES.md) - [Commits](https://github.com/indexmap-rs/indexmap/compare/2.6.0...2.7.0) --- updated-dependencies: - dependency-name: indexmap dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- src/wasm-lib/Cargo.lock | 22 +++++++++++----------- src/wasm-lib/kcl-to-core/Cargo.toml | 2 +- src/wasm-lib/kcl/Cargo.toml | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index d709e3f39..362d75fbb 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -316,7 +316,7 @@ dependencies = [ "bitvec", "chrono", "hex", - "indexmap 2.6.0", + "indexmap 2.7.0", "js-sys", "once_cell", "rand 0.8.5", @@ -1136,7 +1136,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.6.0", + "indexmap 2.7.0", "slab", "tokio", "tokio-util", @@ -1584,9 +1584,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1732,7 +1732,7 @@ dependencies = [ "http 1.1.0", "iai", "image", - "indexmap 2.6.0", + "indexmap 2.7.0", "insta", "itertools 0.13.0", "js-sys", @@ -1790,7 +1790,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-trait", - "indexmap 2.6.0", + "indexmap 2.7.0", "kcl-lib", "kittycad", "kittycad-modeling-cmds", @@ -3158,7 +3158,7 @@ dependencies = [ "chrono", "dyn-clone", "indexmap 1.9.3", - "indexmap 2.6.0", + "indexmap 2.7.0", "schemars_derive", "serde", "serde_json", @@ -3259,7 +3259,7 @@ version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "itoa", "memchr", "ryu", @@ -3847,7 +3847,7 @@ version = "0.22.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" dependencies = [ - "indexmap 2.6.0", + "indexmap 2.7.0", "serde", "serde_spanned", "toml_datetime", @@ -4013,7 +4013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a2f31991cee3dce1ca4f929a8a04fdd11fd8801aac0f2030b0fa8a0a3fef6b9" dependencies = [ "chrono", - "indexmap 2.6.0", + "indexmap 2.7.0", "lazy_static", "serde_json", "thiserror 1.0.68", @@ -4770,7 +4770,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "displaydoc", - "indexmap 2.6.0", + "indexmap 2.7.0", "memchr", "thiserror 1.0.68", ] diff --git a/src/wasm-lib/kcl-to-core/Cargo.toml b/src/wasm-lib/kcl-to-core/Cargo.toml index 96088e026..c9a0276da 100644 --- a/src/wasm-lib/kcl-to-core/Cargo.toml +++ b/src/wasm-lib/kcl-to-core/Cargo.toml @@ -15,7 +15,7 @@ path = "src/tool.rs" [dependencies] anyhow = "1" async-trait = "0.1.81" -indexmap = "2.6.0" +indexmap = "2.7.0" kcl-lib = { path = "../kcl" } kittycad = { workspace = true, features = ["clap"] } kittycad-modeling-cmds = { workspace = true } diff --git a/src/wasm-lib/kcl/Cargo.toml b/src/wasm-lib/kcl/Cargo.toml index 90af9b245..4856da009 100644 --- a/src/wasm-lib/kcl/Cargo.toml +++ b/src/wasm-lib/kcl/Cargo.toml @@ -32,7 +32,7 @@ git_rev = "0.1.0" gltf-json = "1.4.1" http = { workspace = true } image = { version = "0.25.5", default-features = false, features = ["png"] } -indexmap = { version = "2.6.0", features = ["serde"] } +indexmap = { version = "2.7.0", features = ["serde"] } kittycad = { workspace = true } kittycad-modeling-cmds = { workspace = true } lazy_static = "1.5.0" From 8072f1db630c9cc23ed7e121cce08864adc86b6b Mon Sep 17 00:00:00 2001 From: Jonathan Tran Date: Thu, 5 Dec 2024 14:45:33 -0500 Subject: [PATCH 13/15] Add support for line comments in playwright-secrets.env (#4671) --- e2e/playwright/secrets.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/e2e/playwright/secrets.ts b/e2e/playwright/secrets.ts index ed5fd63aa..6626f5e3e 100644 --- a/e2e/playwright/secrets.ts +++ b/e2e/playwright/secrets.ts @@ -7,6 +7,8 @@ try { .split('\n') .filter((line) => line && line.length > 1) .forEach((line) => { + // Allow line comments. + if (line.trimStart().startsWith('#')) return const [key, value] = line.split('=') // prefer env vars over secrets file secrets[key] = process.env[key] || (value as any).replaceAll('"', '') From 7a21918223d84eb61f4e9d8b137ecf5783c0d49e Mon Sep 17 00:00:00 2001 From: Pierre Jacquier Date: Thu, 5 Dec 2024 15:14:58 -0500 Subject: [PATCH 14/15] Cleaner nightly release notes (#4668) * Bump: Improve and fix nightly release notes * Clean up after manual push * Consistency tweak --- .github/workflows/build-apps.yml | 11 +++++++++++ scripts/flip-files-to-nightly.sh | 4 +--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index ba1bc55ea..d3c4da1e0 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -362,6 +362,17 @@ jobs: - name: List artifacts run: "ls -R out" + - name: Set more complete nightly release notes + if: ${{ env.IS_NIGHTLY == 'true' }} + run: | + # Note: prefered going this way instead of a full clone in the checkout step, + # see https://github.com/actions/checkout/issues/1471 + git fetch --prune --unshallow --tags + export TAG="nightly-${VERSION}" + export PREVIOUS_TAG=$(git describe --tags --match="nightly-v[0-9]*" --abbrev=0) + export NOTES=$(./scripts/get-nightly-changelog.sh) + yarn files:set-notes + - name: Authenticate to Google Cloud if: ${{ env.IS_NIGHTLY == 'true' }} uses: 'google-github-actions/auth@v2.1.7' diff --git a/scripts/flip-files-to-nightly.sh b/scripts/flip-files-to-nightly.sh index 89f407240..7ed512e01 100755 --- a/scripts/flip-files-to-nightly.sh +++ b/scripts/flip-files-to-nightly.sh @@ -1,8 +1,6 @@ #!/bin/bash export VERSION=$(date +'%-y.%-m.%-d') -export TAG="nightly-v$VERSION" -export PREVIOUS_TAG=$(git describe --tags --match="nightly-v[0-9]*" --abbrev=0) export COMMIT=$(git rev-parse --short HEAD) # package.json @@ -15,7 +13,7 @@ yq -i '.publish[0].url = "https://dl.zoo.dev/releases/modeling-app/nightly"' ele yq -i '.appId = "dev.zoo.modeling-app-nightly"' electron-builder.yml # Release notes -./scripts/get-nightly-changelog.sh > release-notes.md +echo "Nightly build $VERSION (commit $COMMIT)" > release-notes.md # icons cp assets/icon-nightly.png assets/icon.png From 6366bc4766faf5fe4f1698b5221fcf343dd3c591 Mon Sep 17 00:00:00 2001 From: Adam Chalmers Date: Thu, 5 Dec 2024 14:27:51 -0600 Subject: [PATCH 15/15] KCL: Keyword function calls for stdlib (#4647) Part of https://github.com/KittyCAD/modeling-app/issues/4600 Adds support for keyword arguments to the stdlib, and calling stdlib functions with keyword arguments. So far, I've changed one function: `rem`. Previously you would have used `rem(7, 2)` but now it's `rem(7, divisor: 2)`. This is a proof-of-concept. If it's approved, we will: 1. Support closures with keyword arguments, and calling them 2. Move the rest of the stdlib to use kw arguments --- docs/kcl/rem.md | 6 +- docs/kcl/std.json | 986 ++++++++++++------ src/lang/queryAst.ts | 24 + src/wasm-lib/derive-docs/src/lib.rs | 29 +- .../derive-docs/tests/args_with_lifetime.gen | 6 + .../derive-docs/tests/args_with_refs.gen | 6 + src/wasm-lib/derive-docs/tests/array.gen | 6 + src/wasm-lib/derive-docs/tests/box.gen | 6 + .../tests/doc_comment_with_code.gen | 6 + src/wasm-lib/derive-docs/tests/lineTo.gen | 7 + src/wasm-lib/derive-docs/tests/min.gen | 6 + src/wasm-lib/derive-docs/tests/option.gen | 6 + .../derive-docs/tests/option_input_format.gen | 6 + .../tests/return_vec_box_sketch.gen | 6 + .../derive-docs/tests/return_vec_sketch.gen | 6 + src/wasm-lib/derive-docs/tests/show.gen | 6 + .../tests/test_args_with_exec_state.gen | 5 + src/wasm-lib/kcl/src/docs/mod.rs | 20 +- src/wasm-lib/kcl/src/parsing/ast/execute.rs | 178 ++-- src/wasm-lib/kcl/src/std/args.rs | 71 +- src/wasm-lib/kcl/src/std/math.rs | 12 +- 21 files changed, 1030 insertions(+), 374 deletions(-) diff --git a/docs/kcl/rem.md b/docs/kcl/rem.md index 92cc2c93c..23435a707 100644 --- a/docs/kcl/rem.md +++ b/docs/kcl/rem.md @@ -32,9 +32,9 @@ rem(num: i64, divisor: i64) -> i64 ### Examples ```js -assertEqual(rem(7, 4), 3, 0.01, "remainder is 3") -assertEqual(rem(-7, 4), -3, 0.01, "remainder is 3") -assertEqual(rem(7, -4), 3, 0.01, "remainder is 3") +assertEqual(rem(7, divisor: 4), 3, 0.01, "remainder is 3") +assertEqual(rem(-7, divisor: 4), -3, 0.01, "remainder is 3") +assertEqual(rem(7, divisor: -4), 3, 0.01, "remainder is 3") ``` ![Rendered example of rem 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABMiklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V/FPwKn4gueWQqZ4gAAAABJRU5ErkJggg==) diff --git a/docs/kcl/std.json b/docs/kcl/std.json index 046ac3a29..db3ee35b4 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -6,6 +6,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -16,7 +17,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -28,7 +30,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -43,6 +46,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -53,7 +57,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -65,7 +70,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -78,6 +84,7 @@ "summary": "Returns the angle to match the given length for x.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -956,7 +963,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "to", @@ -1813,7 +1821,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -3183,7 +3192,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -3195,7 +3205,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -3208,6 +3219,7 @@ "summary": "Returns the angle to match the given length for y.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -4086,7 +4098,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "to", @@ -4943,7 +4956,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -6313,7 +6327,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -6325,7 +6340,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -6338,6 +6354,7 @@ "summary": "Draw a line segment relative to the current origin using the polar", "description": "measure of some angle and distance.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -6379,7 +6396,8 @@ } ] }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -7749,7 +7767,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -9072,7 +9091,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -10443,7 +10463,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -10456,6 +10477,7 @@ "summary": "Create a line segment from the current 2-dimensional sketch origin", "description": "along some angle (in degrees) for some relative length in the 'x' dimension.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -10497,7 +10519,8 @@ } ] }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -11867,7 +11890,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -13190,7 +13214,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -14561,7 +14586,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -14574,6 +14600,7 @@ "summary": "Create a line segment from the current 2-dimensional sketch origin", "description": "along some angle (in degrees) for some relative length in the 'y' dimension.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -14615,7 +14642,8 @@ } ] }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -15985,7 +16013,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -17308,7 +17337,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -18679,7 +18709,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -18692,6 +18723,7 @@ "summary": "Draw an angled line from the current origin, constructing a line segment", "description": "such that the newly created line intersects the desired target line segment.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -19599,7 +19631,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -20969,7 +21002,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -22292,7 +22326,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -23663,7 +23698,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -23676,6 +23712,7 @@ "summary": "Create a line segment from the current 2-dimensional sketch origin", "description": "along some angle (in degrees) for some length, ending at the provided value in the 'x' dimension.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -23702,7 +23739,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -25072,7 +25110,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -26395,7 +26434,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -27766,7 +27806,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -27779,6 +27820,7 @@ "summary": "Create a line segment from the current 2-dimensional sketch origin", "description": "along some angle (in degrees) for some length, ending at the provided value in the 'y' dimension.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -27805,7 +27847,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -29175,7 +29218,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -30498,7 +30542,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -31869,7 +31914,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -31882,6 +31928,7 @@ "summary": "Draw a curved line segment along an imaginary circle.", "description": "The arc is constructed such that the current position of the sketch is placed along an imaginary circle of the specified radius, at angleStart degrees. The resulting arc is the segment of the imaginary circle from that origin point to angleEnd, radius away from the center of the imaginary circle.\n\nUnless this makes a lot of sense and feels like what you're looking for to construct your shape, you're likely looking for tangentialArc.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -31959,7 +32006,8 @@ } ] }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -33329,7 +33377,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -34652,7 +34701,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -36023,7 +36073,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -36036,6 +36087,7 @@ "summary": "Draw a 3 point arc.", "description": "The arc is constructed such that the start point is the current position of the sketch and two more points defined as the end and interior point. The interior point is placed between the start point and end point. The radius of the arc will be controlled by how far the interior point is placed from the start and end.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -36072,7 +36124,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -37442,7 +37495,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -38765,7 +38819,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -40136,7 +40191,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40151,6 +40207,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -40161,7 +40218,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40173,7 +40231,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40186,6 +40245,7 @@ "summary": "Check a value at runtime, and raise an error if the argument provided", "description": "is false.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -40195,7 +40255,8 @@ "title": "Boolean", "type": "boolean" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "message", @@ -40205,7 +40266,8 @@ "title": "String", "type": "string" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40216,7 +40278,8 @@ "title": "Null", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40229,6 +40292,7 @@ "summary": "Check that a numerical value equals another at runtime,", "description": "otherwise raise an error.", "tags": [], + "keywordArguments": false, "args": [ { "name": "left", @@ -40239,7 +40303,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "right", @@ -40250,7 +40315,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "epsilon", @@ -40261,7 +40327,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "message", @@ -40271,7 +40338,8 @@ "title": "String", "type": "string" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40282,7 +40350,8 @@ "title": "Null", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40295,6 +40364,7 @@ "summary": "Check that a numerical value is greater than another at runtime,", "description": "otherwise raise an error.", "tags": [], + "keywordArguments": false, "args": [ { "name": "left", @@ -40305,7 +40375,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "right", @@ -40316,7 +40387,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "message", @@ -40326,7 +40398,8 @@ "title": "String", "type": "string" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40337,7 +40410,8 @@ "title": "Null", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40350,6 +40424,7 @@ "summary": "Check that a numerical value is greater than or equal to another at runtime,", "description": "otherwise raise an error.", "tags": [], + "keywordArguments": false, "args": [ { "name": "left", @@ -40360,7 +40435,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "right", @@ -40371,7 +40447,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "message", @@ -40381,7 +40458,8 @@ "title": "String", "type": "string" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40392,7 +40470,8 @@ "title": "Null", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40405,6 +40484,7 @@ "summary": "Check that a numerical value is less than to another at runtime,", "description": "otherwise raise an error.", "tags": [], + "keywordArguments": false, "args": [ { "name": "left", @@ -40415,7 +40495,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "right", @@ -40426,7 +40507,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "message", @@ -40436,7 +40518,8 @@ "title": "String", "type": "string" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40447,7 +40530,8 @@ "title": "Null", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40460,6 +40544,7 @@ "summary": "Check that a numerical value is less than or equal to another at runtime,", "description": "otherwise raise an error.", "tags": [], + "keywordArguments": false, "args": [ { "name": "left", @@ -40470,7 +40555,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "right", @@ -40481,7 +40567,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "message", @@ -40491,7 +40578,8 @@ "title": "String", "type": "string" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40502,7 +40590,8 @@ "title": "Null", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40517,6 +40606,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -40527,7 +40617,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -40539,7 +40630,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -40552,6 +40644,7 @@ "summary": "Draw a smooth, continuous, curved line segment from the current origin to", "description": "the desired (x, y), using a number of control points to shape the curve's shape.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -40599,7 +40692,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -41969,7 +42063,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -43292,7 +43387,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -44663,7 +44759,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -44678,6 +44775,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -44688,7 +44786,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -44700,7 +44799,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -44713,6 +44813,7 @@ "summary": "Cut a straight transitional edge along a tagged path.", "description": "Chamfer is similar in function and use to a fillet, except a fillet will blend the transition along an edge, rather than cut a sharp, straight transitional edge.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -45631,7 +45732,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid", @@ -47028,7 +47130,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -48369,7 +48472,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -49749,7 +49853,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -49763,6 +49868,7 @@ "summary": "Construct a 2-dimensional circle, of the specified radius, centered at", "description": "the provided (x, y) origin point.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -49794,7 +49900,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch_surface_or_group", @@ -51120,7 +51227,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -52443,7 +52551,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -53814,7 +53923,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -53828,6 +53938,7 @@ "summary": "Construct a line segment from the current origin back to the profile's", "description": "origin, ensuring the resulting 2-dimensional sketch is not open-ended.", "tags": [], + "keywordArguments": false, "args": [ { "name": "sketch", @@ -55197,7 +55308,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -56520,7 +56632,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -57891,7 +58004,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -57907,6 +58021,7 @@ "tags": [ "units" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -57917,7 +58032,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -57932,6 +58048,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -57942,7 +58059,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -57954,7 +58072,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -57969,6 +58088,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -57979,7 +58099,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -57992,6 +58113,7 @@ "summary": "Extend a 2-dimensional sketch through a third dimension in order to", "description": "create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid.", "tags": [], + "keywordArguments": false, "args": [ { "name": "length", @@ -58002,7 +58124,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch_set", @@ -59404,7 +59527,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -60816,7 +60940,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -60830,6 +60955,7 @@ "summary": "Blend a transitional edge along a tagged path, smoothing the sharp edge.", "description": "Fillet is similar in function and use to a chamfer, except a chamfer will cut a sharp transition along an edge while fillet will smoothly blend the transition.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -61755,7 +61881,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid", @@ -63152,7 +63279,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -64493,7 +64621,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -65873,7 +66002,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -65889,6 +66019,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -65899,7 +66030,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -65911,7 +66043,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -65926,6 +66059,7 @@ "tags": [ "units" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -65936,7 +66070,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -65949,6 +66084,7 @@ "summary": "Get the next adjacent edge to the edge given.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -66827,7 +66963,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -66839,7 +66976,8 @@ "type": "string", "format": "uuid" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -66852,6 +66990,7 @@ "summary": "Get the opposite edge to the edge given.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -67730,7 +67869,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -67742,7 +67882,8 @@ "type": "string", "format": "uuid" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -67755,6 +67896,7 @@ "summary": "Get the previous adjacent edge to the edge given.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -68633,7 +68775,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -68645,7 +68788,8 @@ "type": "string", "format": "uuid" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -68658,6 +68802,7 @@ "summary": "Create a helix on a cylinder.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -68695,7 +68840,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid", @@ -70074,7 +70220,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -71454,7 +71601,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -71467,6 +71615,7 @@ "summary": "Use a 2-dimensional sketch to cut a hole in another 2-dimensional sketch.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "hole_sketch", @@ -72868,7 +73017,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -74238,7 +74388,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -75609,7 +75760,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -75623,6 +75775,7 @@ "summary": "Make the inside of a 3D object hollow.", "description": "Remove volume from a 3-dimensional shape such that a wall of the provided thickness remains around the exterior of the shape.", "tags": [], + "keywordArguments": false, "args": [ { "name": "thickness", @@ -75633,7 +75786,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid", @@ -77012,7 +77166,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -78392,7 +78547,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -78407,6 +78563,7 @@ "summary": "Import a CAD file.", "description": "For formats lacking unit data (such as STL, OBJ, or PLY files), the default unit of measurement is millimeters. Alternatively you may specify the unit by passing your desired measurement unit in the options parameter. When importing a GLTF file, the bin file will be imported as well. Import paths are relative to the current project directory.\n\nNote: The import command currently only works when using the native Modeling App.\n\nFor importing KCL functions using the `import` statement, see the docs on [KCL modules](/docs/kcl/modules).", "tags": [], + "keywordArguments": false, "args": [ { "name": "file_path", @@ -78416,7 +78573,8 @@ "title": "String", "type": "string" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "options", @@ -78734,7 +78892,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -78800,7 +78959,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -78820,6 +78980,7 @@ "tags": [ "units" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -78830,7 +78991,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -78845,6 +79007,7 @@ "tags": [ "convert" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -78855,7 +79018,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -78867,7 +79031,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -78880,6 +79045,7 @@ "summary": "Extract the 'x' axis value of the last line segment in the provided 2-d", "description": "sketch.", "tags": [], + "keywordArguments": false, "args": [ { "name": "sketch", @@ -80249,7 +80415,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -80261,7 +80428,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -80274,6 +80442,7 @@ "summary": "Extract the 'y' axis value of the last line segment in the provided 2-d", "description": "sketch.", "tags": [], + "keywordArguments": false, "args": [ { "name": "sketch", @@ -81643,7 +81812,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -81655,7 +81825,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -81670,6 +81841,7 @@ "tags": [ "utilities" ], + "keywordArguments": false, "args": [ { "name": "hypotenuse", @@ -81680,7 +81852,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "leg", @@ -81691,7 +81864,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -81703,7 +81877,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -81718,6 +81893,7 @@ "tags": [ "utilities" ], + "keywordArguments": false, "args": [ { "name": "hypotenuse", @@ -81728,7 +81904,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "leg", @@ -81739,7 +81916,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -81751,7 +81929,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -81766,6 +81945,7 @@ "tags": [ "utilities" ], + "keywordArguments": false, "args": [ { "name": "hypotenuse", @@ -81776,7 +81956,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "leg", @@ -81787,7 +81968,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -81799,7 +81981,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -81812,6 +81995,7 @@ "summary": "Draw a line relative to the current origin to a specified (x, y) away", "description": "from the current position.", "tags": [], + "keywordArguments": false, "args": [ { "name": "delta", @@ -81827,7 +82011,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -83197,7 +83382,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -84520,7 +84706,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -85891,7 +86078,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -85905,6 +86093,7 @@ "summary": "Draw a line from the current origin to some absolute (x, y) point.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "to", @@ -85920,7 +86109,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -87290,7 +87480,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -88613,7 +88804,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -89984,7 +90176,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -89999,6 +90192,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -90009,7 +90203,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -90021,7 +90216,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -90034,6 +90230,7 @@ "summary": "Create a 3D surface or solid by interpolating between two or more sketches.", "description": "The sketches need to closed and on the same plane.", "tags": [], + "keywordArguments": false, "args": [ { "name": "sketches", @@ -91354,7 +91551,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "data", @@ -92711,7 +92909,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -94091,7 +94290,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -94108,6 +94308,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -94118,7 +94319,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "base", @@ -94129,7 +94331,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -94141,7 +94344,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -94156,6 +94360,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -94166,7 +94371,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -94178,7 +94384,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -94193,6 +94400,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -94203,7 +94411,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -94215,7 +94424,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -94230,6 +94440,7 @@ "tags": [ "units" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -94240,7 +94451,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -94253,6 +94465,7 @@ "summary": "Apply a function to every element of a list.", "description": "Given a list like `[a, b, c]`, and a function like `f`, returns `[f(a), f(b), f(c)]`", "tags": [], + "keywordArguments": false, "args": [ { "name": "array", @@ -96240,7 +96453,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "map_fn", @@ -98225,7 +98439,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -100214,7 +100429,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -100230,6 +100446,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "args", @@ -100243,7 +100460,8 @@ "format": "double" } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -100255,7 +100473,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -100270,6 +100489,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "args", @@ -100283,7 +100503,8 @@ "format": "double" } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -100295,7 +100516,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -100308,6 +100530,7 @@ "summary": "Mirror a sketch.", "description": "Only works on unclosed sketches for now.\n\nMirror occurs around a local sketch axis rather than a global axis.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -101313,7 +101536,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch_set", @@ -102825,7 +103049,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -104147,7 +104372,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -104165,6 +104391,7 @@ "tags": [ "units" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -104175,7 +104402,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -104188,6 +104416,7 @@ "summary": "Offset a plane by a distance along its normal.", "description": "For example, if you offset the 'XZ' plane by 10, the new plane will be parallel to the 'XZ' plane and 10 units away from it.", "tags": [], + "keywordArguments": false, "args": [ { "name": "std_plane", @@ -104241,7 +104470,8 @@ } ] }, - "required": true + "required": true, + "labelRequired": true }, { "name": "offset", @@ -104252,7 +104482,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -104392,7 +104623,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -104409,6 +104641,7 @@ "summary": "Repeat a 2-dimensional sketch some number of times along a partial or", "description": "complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -104452,7 +104685,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch_set", @@ -105854,7 +106088,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -107176,7 +107411,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -107189,6 +107425,7 @@ "summary": "Repeat a 3-dimensional solid some number of times along a partial or", "description": "complete circle some specified number of times. Each object may additionally be rotated along the circle, ensuring orentation of the solid with respect to the center of the circle is maintained.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -107243,7 +107480,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid_set", @@ -108654,7 +108892,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -109976,7 +110215,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -109989,6 +110229,7 @@ "summary": "Repeat a 2-dimensional sketch along some dimension, with a dynamic amount", "description": "of distance between each repetition, some specified number of times.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -110027,7 +110268,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch_set", @@ -111429,7 +111671,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -112751,7 +112994,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -112764,6 +113008,7 @@ "summary": "Repeat a 3-dimensional solid along a linear path, with a dynamic amount", "description": "of distance between each repetition, some specified number of times.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -112802,7 +113047,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid_set", @@ -114213,7 +114459,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -115535,7 +115782,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -115548,6 +115796,7 @@ "summary": "Repeat a 3-dimensional solid, changing it each time.", "description": "Replicates the 3D solid, applying a transformation function to each replica. Transformation function could alter rotation, scale, visibility, position, etc.\n\nThe `patternTransform` call itself takes a number for how many total instances of the shape should be. For example, if you use a circle with `patternTransform(4, transform)` then there will be 4 circles: the original, and 3 created by replicating the original and calling the transform function on each.\n\nThe transform function takes a single parameter: an integer representing which number replication the transform is for. E.g. the first replica to be transformed will be passed the argument `1`. This simplifies your math: the transform function can rely on id `0` being the original instance passed into the `patternTransform`. See the examples.\n\nThe transform function returns a transform object. All properties of the object are optional, they each default to \"no change\". So the overall transform object defaults to \"no change\" too. Its properties are:\n\n - `translate` (3D point)\n\n Translates the replica, moving its position in space.\n\n - `replicate` (bool)\n\n If false, this ID will not actually copy the object. It'll be skipped.\n\n - `scale` (3D point)\n\n Stretches the object, multiplying its width in the given dimension by the point's component in that direction.\n\n - `rotation` (object, with the following properties)\n\n - `rotation.axis` (a 3D point, defaults to the Z axis)\n\n - `rotation.angle` (number of degrees)\n\n - `rotation.origin` (either \"local\" i.e. rotate around its own center, \"global\" i.e. rotate around the scene's center, or a 3D point, defaults to \"local\")", "tags": [], + "keywordArguments": false, "args": [ { "name": "total_instances", @@ -115559,7 +115808,8 @@ "format": "uint32", "minimum": 0.0 }, - "required": true + "required": true, + "labelRequired": true }, { "name": "transform_function", @@ -115569,7 +115819,8 @@ "title": "FunctionParam", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid_set", @@ -116980,7 +117231,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -118302,7 +118554,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -118320,6 +118573,7 @@ "summary": "Just like patternTransform, but works on 2D sketches not 3D solids.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "total_instances", @@ -118331,7 +118585,8 @@ "format": "uint32", "minimum": 0.0 }, - "required": true + "required": true, + "labelRequired": true }, { "name": "transform_function", @@ -118341,7 +118596,8 @@ "title": "FunctionParam", "type": "null" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid_set", @@ -119743,7 +119999,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -121065,7 +121322,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -121080,6 +121338,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -121090,7 +121349,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -121103,6 +121363,7 @@ "summary": "Convert polar/sphere (azimuth, elevation, distance) coordinates to", "description": "cartesian (x/y/z grid) coordinates.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -121129,7 +121390,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -121146,7 +121408,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -121159,6 +121422,7 @@ "summary": "Create a regular polygon with the specified number of sides that is either inscribed or circumscribed around a circle of the specified radius.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -121202,7 +121466,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch_surface_or_group", @@ -122528,7 +122793,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -123851,7 +124117,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -125222,7 +125489,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -125238,6 +125506,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -125248,7 +125517,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "pow", @@ -125259,7 +125529,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -125271,7 +125542,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -125284,6 +125556,7 @@ "summary": "Extract the provided 2-dimensional sketch's profile's origin", "description": "value.", "tags": [], + "keywordArguments": false, "args": [ { "name": "sketch", @@ -126653,7 +126926,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -126670,7 +126944,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -126683,6 +126958,7 @@ "summary": "Extract the provided 2-dimensional sketch's profile's origin's 'x'", "description": "value.", "tags": [], + "keywordArguments": false, "args": [ { "name": "sketch", @@ -128052,7 +128328,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -128064,7 +128341,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -128077,6 +128355,7 @@ "summary": "Extract the provided 2-dimensional sketch's profile's origin's 'y'", "description": "value.", "tags": [], + "keywordArguments": false, "args": [ { "name": "sketch", @@ -129446,7 +129725,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -129458,7 +129738,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -129471,6 +129752,7 @@ "summary": "Append an element to the end of an array.", "description": "Returns a new array with the element appended.", "tags": [], + "keywordArguments": false, "args": [ { "name": "array", @@ -131458,7 +131740,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "elem", @@ -134055,7 +134338,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -136653,7 +136937,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -136666,6 +136951,7 @@ "summary": "Take a starting value. Then, for each element of an array, calculate the next value,", "description": "using the previous value and the element.", "tags": [], + "keywordArguments": false, "args": [ { "name": "array", @@ -138653,7 +138939,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "start", @@ -141250,7 +141537,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "reduce_fn", @@ -143235,7 +143523,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -145833,7 +146122,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -145850,6 +146140,7 @@ "tags": [ "math" ], + "keywordArguments": true, "args": [ { "name": "num", @@ -145860,7 +146151,8 @@ "type": "integer", "format": "int64" }, - "required": true + "required": true, + "labelRequired": false }, { "name": "divisor", @@ -145871,7 +146163,8 @@ "type": "integer", "format": "int64" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -145883,12 +146176,13 @@ "type": "integer", "format": "int64" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, "examples": [ - "assertEqual(rem(7, 4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(-7, 4), -3, 0.01, \"remainder is 3\")\nassertEqual(rem(7, -4), 3, 0.01, \"remainder is 3\")" + "assertEqual(rem(7, divisor: 4), 3, 0.01, \"remainder is 3\")\nassertEqual(rem(-7, divisor: 4), -3, 0.01, \"remainder is 3\")\nassertEqual(rem(7, divisor: -4), 3, 0.01, \"remainder is 3\")" ] }, { @@ -145896,6 +146190,7 @@ "summary": "Rotate a sketch around some provided axis, creating a solid from its extent.", "description": "This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its revolved around an axis rather than using the extent of the sketch linearly translated through a third dimension.\n\nRevolve occurs around a local sketch axis rather than a global axis.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -146917,7 +147212,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -148397,7 +148693,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -149777,7 +150074,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -149799,6 +150097,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -149809,7 +150108,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -149821,7 +150121,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -149834,6 +150135,7 @@ "summary": "Compute the angle (in degrees) of the provided line segment.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -150712,7 +151014,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -150724,7 +151027,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -150737,6 +151041,7 @@ "summary": "Compute the ending point of the provided line segment.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -151615,7 +151920,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -151632,7 +151938,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -151645,6 +151952,7 @@ "summary": "Compute the ending point of the provided line segment along the 'x' axis.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -152523,7 +152831,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -152535,7 +152844,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -152548,6 +152858,7 @@ "summary": "Compute the ending point of the provided line segment along the 'y' axis.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -153426,7 +153737,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -153438,7 +153750,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -153451,6 +153764,7 @@ "summary": "Compute the length of the provided line segment.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -154329,7 +154643,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -154341,7 +154656,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -154354,6 +154670,7 @@ "summary": "Compute the starting point of the provided line segment.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -155232,7 +155549,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -155249,7 +155567,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -155262,6 +155581,7 @@ "summary": "Compute the starting point of the provided line segment along the 'x' axis.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -156140,7 +156460,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -156152,7 +156473,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -156165,6 +156487,7 @@ "summary": "Compute the starting point of the provided line segment along the 'y' axis.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -157043,7 +157366,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -157055,7 +157379,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -157068,6 +157393,7 @@ "summary": "Remove volume from a 3-dimensional shape such that a wall of the", "description": "provided thickness remains, taking volume starting at the provided face, leaving it open in that direction.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -158002,7 +158328,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "solid_set", @@ -159447,7 +159774,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -160859,7 +161187,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -160880,6 +161209,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -160890,7 +161220,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -160902,7 +161233,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -160917,6 +161249,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -160927,7 +161260,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -160939,7 +161273,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -160952,6 +161287,7 @@ "summary": "Start a new profile at a given point.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "to", @@ -160967,7 +161303,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch_surface", @@ -162424,7 +162761,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -163747,7 +164085,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -165118,7 +165457,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -165133,6 +165473,7 @@ "summary": "Start a new 2-dimensional sketch at a given point on the 'XY' plane.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -165148,7 +165489,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -166519,7 +166861,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -166534,6 +166877,7 @@ "summary": "Start a new 2-dimensional sketch on a specific plane or face.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -168023,7 +168367,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -169541,7 +169886,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -170999,7 +171345,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -171017,6 +171364,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -171027,7 +171375,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -171039,7 +171388,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -171052,6 +171402,7 @@ "summary": "Returns the angle coming out of the end of the segment in degrees.", "description": "", "tags": [], + "keywordArguments": false, "args": [ { "name": "tag", @@ -171930,7 +172281,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -171942,7 +172294,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -171959,6 +172312,7 @@ "summary": "Draw a curved line segment along part of an imaginary circle.", "description": "The arc is constructed such that the last line segment is placed tangent to the imaginary circle of the specified radius. The resulting arc is the segment of the imaginary circle from that tangent point for 'offset' degrees along the imaginary circle.", "tags": [], + "keywordArguments": false, "args": [ { "name": "data", @@ -171989,7 +172343,8 @@ } ] }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -173359,7 +173714,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -174682,7 +175038,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -176053,7 +176410,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -176066,6 +176424,7 @@ "summary": "Starting at the current sketch's origin, draw a curved line segment along", "description": "some part of an imaginary circle until it reaches the desired (x, y) coordinates.", "tags": [], + "keywordArguments": false, "args": [ { "name": "to", @@ -176081,7 +176440,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -177451,7 +177811,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -178774,7 +179135,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -180145,7 +180507,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -180158,6 +180521,7 @@ "summary": "Starting at the current sketch's origin, draw a curved line segment along", "description": "some part of an imaginary circle until it reaches a point the given (x, y) distance away.", "tags": [], + "keywordArguments": false, "args": [ { "name": "delta", @@ -180173,7 +180537,8 @@ "maxItems": 2, "minItems": 2 }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -181543,7 +181908,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -182866,7 +183232,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -184237,7 +184604,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -184252,6 +184620,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -184262,7 +184631,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -184277,6 +184647,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -184287,7 +184658,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -184299,7 +184671,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -184314,6 +184687,7 @@ "tags": [ "math" ], + "keywordArguments": false, "args": [ { "name": "num", @@ -184324,7 +184698,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true } ], "returnValue": { @@ -184336,7 +184711,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -184349,6 +184725,7 @@ "summary": "Draw a line relative to the current origin to a specified distance away", "description": "from the current position along the 'x' axis.", "tags": [], + "keywordArguments": false, "args": [ { "name": "length", @@ -184359,7 +184736,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -185729,7 +186107,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -187052,7 +187431,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -188423,7 +188803,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -188436,6 +188817,7 @@ "summary": "Draw a line parallel to the X axis, that ends at the given X.", "description": "E.g. if the previous line ended at (1, 1), then xLineTo(4) draws a line from (1, 1) to (4, 1)", "tags": [], + "keywordArguments": false, "args": [ { "name": "to", @@ -188446,7 +188828,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -189816,7 +190199,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -191139,7 +191523,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -192510,7 +192895,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -192523,6 +192909,7 @@ "summary": "Draw a line relative to the current origin to a specified distance away", "description": "from the current position along the 'y' axis.", "tags": [], + "keywordArguments": false, "args": [ { "name": "length", @@ -192533,7 +192920,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -193903,7 +194291,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -195226,7 +195615,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -196597,7 +196987,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -196610,6 +197001,7 @@ "summary": "Draw a line parallel to the Y axis, that ends at the given Y.", "description": "E.g. if the previous line ended at (1, 1), then yLineTo(4) draws a line from (1, 1) to (1, 4)", "tags": [], + "keywordArguments": false, "args": [ { "name": "to", @@ -196620,7 +197012,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, { "name": "sketch", @@ -197990,7 +198383,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, { "name": "tag", @@ -199313,7 +199707,8 @@ } } }, - "required": false + "required": false, + "labelRequired": true } ], "returnValue": { @@ -200684,7 +201079,8 @@ } } }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, @@ -200699,6 +201095,7 @@ "tags": [ "units" ], + "keywordArguments": false, "args": [], "returnValue": { "name": "", @@ -200709,7 +201106,8 @@ "type": "number", "format": "double" }, - "required": true + "required": true, + "labelRequired": true }, "unpublished": false, "deprecated": false, diff --git a/src/lang/queryAst.ts b/src/lang/queryAst.ts index 2ab0c405f..e217be0e5 100644 --- a/src/lang/queryAst.ts +++ b/src/lang/queryAst.ts @@ -173,6 +173,30 @@ function moreNodePathFromSourceRange( } return path } + + if (_node.type === 'CallExpressionKw' && isInRange) { + const { callee, arguments: args } = _node + if ( + callee.type === 'Identifier' && + callee.start <= start && + callee.end >= end + ) { + path.push(['callee', 'CallExpressionKw']) + return path + } + if (args.length > 0) { + for (let argIndex = 0; argIndex < args.length; argIndex++) { + const arg = args[argIndex].arg + if (arg.start <= start && arg.end >= end) { + path.push(['arguments', 'CallExpressionKw']) + path.push([argIndex, 'index']) + return moreNodePathFromSourceRange(arg, sourceRange, path) + } + } + } + return path + } + if (_node.type === 'BinaryExpression' && isInRange) { const { left, right } = _node if (left.start <= start && left.end >= end) { diff --git a/src/wasm-lib/derive-docs/src/lib.rs b/src/wasm-lib/derive-docs/src/lib.rs index 582904ec6..1cb49dd7f 100644 --- a/src/wasm-lib/derive-docs/src/lib.rs +++ b/src/wasm-lib/derive-docs/src/lib.rs @@ -23,17 +23,30 @@ use unbox::unbox; struct StdlibMetadata { /// The name of the function in the API. name: String, + /// Tags for the function. #[serde(default)] tags: Vec, + /// Whether the function is unpublished. /// Then docs will not be generated. #[serde(default)] unpublished: bool, + /// Whether the function is deprecated. /// Then specific docs detailing that this is deprecated will be generated. #[serde(default)] deprecated: bool, + + /// If true, expects keyword arguments. + /// If false, expects positional arguments. + #[serde(default)] + keywords: bool, + + /// If true, the first argument is unlabeled. + /// If false, all arguments require labels. + #[serde(default)] + unlabeled_first: bool, } #[proc_macro_attribute] @@ -225,6 +238,12 @@ fn do_stdlib_inner( quote! { false } }; + let uses_keyword_arguments = if metadata.keywords { + quote! { true } + } else { + quote! { false } + }; + let docs_crate = get_crate(None); // When the user attaches this proc macro to a function with the wrong type @@ -233,7 +252,7 @@ fn do_stdlib_inner( // of the various parameters. We do this by calling dummy functions that // require a type that satisfies SharedExtractor or ExclusiveExtractor. let mut arg_types = Vec::new(); - for arg in ast.sig.inputs.iter() { + for (i, arg) in ast.sig.inputs.iter().enumerate() { // Get the name of the argument. let arg_name = match arg { syn::FnArg::Receiver(pat) => { @@ -263,7 +282,7 @@ fn do_stdlib_inner( let ty_string = rust_type_to_openapi_type(&ty_string); let required = !ty_ident.to_string().starts_with("Option <"); - + let label_required = !(i == 0 && metadata.unlabeled_first); if ty_string != "ExecState" && ty_string != "Args" { let schema = quote! { generator.root_schema_for::<#ty_ident>() @@ -274,6 +293,7 @@ fn do_stdlib_inner( type_: #ty_string.to_string(), schema: #schema, required: #required, + label_required: #label_required, } }); } @@ -334,6 +354,7 @@ fn do_stdlib_inner( type_: #ret_ty_string.to_string(), schema, required: true, + label_required: true, }) } } else { @@ -400,6 +421,10 @@ fn do_stdlib_inner( vec![#(#tags),*] } + fn keyword_arguments(&self) -> bool { + #uses_keyword_arguments + } + fn args(&self, inline_subschemas: bool) -> Vec<#docs_crate::StdLibFnArg> { let mut settings = schemars::gen::SchemaSettings::openapi3(); // We set this to false so we can recurse them later. diff --git a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen index b5f3e2c56..1e1c13171 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_lifetime.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for SomeFn { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for SomeFn { type_: "Foo".to_string(), schema: generator.root_schema_for::(), required: true, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for SomeFn { type_: "i32".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/args_with_refs.gen b/src/wasm-lib/derive-docs/tests/args_with_refs.gen index 3cb7d99eb..22b9a6f8c 100644 --- a/src/wasm-lib/derive-docs/tests/args_with_refs.gen +++ b/src/wasm-lib/derive-docs/tests/args_with_refs.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for SomeFn { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for SomeFn { type_: "string".to_string(), schema: generator.root_schema_for::(), required: true, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for SomeFn { type_: "i32".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/array.gen b/src/wasm-lib/derive-docs/tests/array.gen index 44b941bd5..f10b98c8a 100644 --- a/src/wasm-lib/derive-docs/tests/array.gen +++ b/src/wasm-lib/derive-docs/tests/array.gen @@ -108,6 +108,10 @@ impl crate::docs::StdLibFn for Show { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -117,6 +121,7 @@ impl crate::docs::StdLibFn for Show { type_: "[number]".to_string(), schema: generator.root_schema_for::<[f64; 2usize]>(), required: true, + label_required: true, }] } @@ -130,6 +135,7 @@ impl crate::docs::StdLibFn for Show { type_: "number".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/box.gen b/src/wasm-lib/derive-docs/tests/box.gen index 322bd58e1..e4ca3c235 100644 --- a/src/wasm-lib/derive-docs/tests/box.gen +++ b/src/wasm-lib/derive-docs/tests/box.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for Show { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for Show { type_: "number".to_string(), schema: generator.root_schema_for::(), required: true, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for Show { type_: "number".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen index 60ccaaa76..614864821 100644 --- a/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen +++ b/src/wasm-lib/derive-docs/tests/doc_comment_with_code.gen @@ -108,6 +108,10 @@ impl crate::docs::StdLibFn for MyFunc { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -117,6 +121,7 @@ impl crate::docs::StdLibFn for MyFunc { type_: "kittycad::types::InputFormat".to_string(), schema: generator.root_schema_for::>(), required: false, + label_required: true, }] } @@ -130,6 +135,7 @@ impl crate::docs::StdLibFn for MyFunc { type_: "[Sketch]".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/lineTo.gen b/src/wasm-lib/derive-docs/tests/lineTo.gen index 00e587e3c..712c4cbe8 100644 --- a/src/wasm-lib/derive-docs/tests/lineTo.gen +++ b/src/wasm-lib/derive-docs/tests/lineTo.gen @@ -108,6 +108,10 @@ impl crate::docs::StdLibFn for LineTo { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -118,12 +122,14 @@ impl crate::docs::StdLibFn for LineTo { type_: "LineToData".to_string(), schema: generator.root_schema_for::(), required: true, + label_required: true, }, crate::docs::StdLibFnArg { name: "sketch".to_string(), type_: "Sketch".to_string(), schema: generator.root_schema_for::(), required: true, + label_required: true, }, ] } @@ -138,6 +144,7 @@ impl crate::docs::StdLibFn for LineTo { type_: "Sketch".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/min.gen b/src/wasm-lib/derive-docs/tests/min.gen index 402e3ebd1..a5c9caf39 100644 --- a/src/wasm-lib/derive-docs/tests/min.gen +++ b/src/wasm-lib/derive-docs/tests/min.gen @@ -108,6 +108,10 @@ impl crate::docs::StdLibFn for Min { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -117,6 +121,7 @@ impl crate::docs::StdLibFn for Min { type_: "[number]".to_string(), schema: generator.root_schema_for::>(), required: true, + label_required: true, }] } @@ -130,6 +135,7 @@ impl crate::docs::StdLibFn for Min { type_: "number".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/option.gen b/src/wasm-lib/derive-docs/tests/option.gen index b83afd894..6bcca3a1c 100644 --- a/src/wasm-lib/derive-docs/tests/option.gen +++ b/src/wasm-lib/derive-docs/tests/option.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for Show { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for Show { type_: "number".to_string(), schema: generator.root_schema_for::>(), required: false, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for Show { type_: "number".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/option_input_format.gen b/src/wasm-lib/derive-docs/tests/option_input_format.gen index 077ee7aec..431709623 100644 --- a/src/wasm-lib/derive-docs/tests/option_input_format.gen +++ b/src/wasm-lib/derive-docs/tests/option_input_format.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for Import { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for Import { type_: "kittycad::types::InputFormat".to_string(), schema: generator.root_schema_for::>(), required: false, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for Import { type_: "number".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen index a7acb1e69..987a8ee29 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_box_sketch.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for Import { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for Import { type_: "kittycad::types::InputFormat".to_string(), schema: generator.root_schema_for::>(), required: false, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for Import { type_: "[Sketch]".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen index 12c405f4f..72d034a78 100644 --- a/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen +++ b/src/wasm-lib/derive-docs/tests/return_vec_sketch.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for Import { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for Import { type_: "kittycad::types::InputFormat".to_string(), schema: generator.root_schema_for::>(), required: false, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for Import { type_: "[Sketch]".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/show.gen b/src/wasm-lib/derive-docs/tests/show.gen index 5740b8b3e..d0414b063 100644 --- a/src/wasm-lib/derive-docs/tests/show.gen +++ b/src/wasm-lib/derive-docs/tests/show.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for Show { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -83,6 +87,7 @@ impl crate::docs::StdLibFn for Show { type_: "[number]".to_string(), schema: generator.root_schema_for::>(), required: true, + label_required: true, }] } @@ -96,6 +101,7 @@ impl crate::docs::StdLibFn for Show { type_: "()".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen index 01d697696..e7e9410ce 100644 --- a/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen +++ b/src/wasm-lib/derive-docs/tests/test_args_with_exec_state.gen @@ -74,6 +74,10 @@ impl crate::docs::StdLibFn for SomeFunction { vec![] } + fn keyword_arguments(&self) -> bool { + false + } + fn args(&self, inline_subschemas: bool) -> Vec { let mut settings = schemars::gen::SchemaSettings::openapi3(); settings.inline_subschemas = inline_subschemas; @@ -91,6 +95,7 @@ impl crate::docs::StdLibFn for SomeFunction { type_: "i32".to_string(), schema, required: true, + label_required: true, }) } diff --git a/src/wasm-lib/kcl/src/docs/mod.rs b/src/wasm-lib/kcl/src/docs/mod.rs index 69f8ebef9..22c39f337 100644 --- a/src/wasm-lib/kcl/src/docs/mod.rs +++ b/src/wasm-lib/kcl/src/docs/mod.rs @@ -27,6 +27,8 @@ pub struct StdLibFnData { pub description: String, /// The tags of the function. pub tags: Vec, + /// If this function uses keyword arguments, or positional arguments. + pub keyword_arguments: bool, /// The args of the function. pub args: Vec, /// The return value of the function. @@ -55,6 +57,18 @@ pub struct StdLibFnArg { pub schema: schemars::schema::RootSchema, /// If the argument is required. pub required: bool, + /// Even in functions that use keyword arguments, not every parameter requires a label (most do though). + /// Some functions allow one unlabeled parameter, which has to be first in the + /// argument list. + /// + /// This field is ignored for functions that still use positional arguments. + /// Defaults to true. + #[serde(default = "its_true")] + pub label_required: bool, +} + +fn its_true() -> bool { + true } impl StdLibFnArg { @@ -120,6 +134,9 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { /// The description of the function. fn description(&self) -> String; + /// Does this use keyword arguments, or positional? + fn keyword_arguments(&self) -> bool; + /// The tags of the function. fn tags(&self) -> Vec; @@ -151,6 +168,7 @@ pub trait StdLibFn: std::fmt::Debug + Send + Sync { summary: self.summary(), description: self.description(), tags: self.tags(), + keyword_arguments: self.keyword_arguments(), args: self.args(false), return_value: self.return_value(false), unpublished: self.unpublished(), @@ -806,7 +824,7 @@ mod tests { #[test] fn test_deserialize_function() { - let some_function_string = r#"{"type":"StdLib","func":{"name":"line","summary":"","description":"","tags":[],"returnValue":{"type":"","required":false,"name":"","schema":{},"schemaDefinitions":{}},"args":[],"unpublished":false,"deprecated":false, "examples": []}}"#; + let some_function_string = r#"{"type":"StdLib","func":{"name":"line","keywordArguments":false,"summary":"","description":"","tags":[],"returnValue":{"type":"","required":false,"name":"","schema":{},"schemaDefinitions":{}},"args":[],"unpublished":false,"deprecated":false, "examples": []}}"#; let some_function: crate::parsing::ast::types::Function = serde_json::from_str(some_function_string).unwrap(); assert_eq!( diff --git a/src/wasm-lib/kcl/src/parsing/ast/execute.rs b/src/wasm-lib/kcl/src/parsing/ast/execute.rs index 123217faa..146fa406b 100644 --- a/src/wasm-lib/kcl/src/parsing/ast/execute.rs +++ b/src/wasm-lib/kcl/src/parsing/ast/execute.rs @@ -358,8 +358,47 @@ async fn inner_execute_pipe_body( } impl Node { - pub async fn execute(&self, _exec_state: &mut ExecState, _ctx: &ExecutorContext) -> Result { - todo!() + #[async_recursion] + pub async fn execute(&self, exec_state: &mut ExecState, ctx: &ExecutorContext) -> Result { + let fn_name = &self.callee.name; + + // Build a hashmap from argument labels to the final evaluated values. + let mut fn_args = HashMap::with_capacity(self.arguments.len()); + for arg_expr in &self.arguments { + let source_range = SourceRange::from(arg_expr.arg.clone()); + let metadata = Metadata { source_range }; + let value = ctx + .execute_expr(&arg_expr.arg, exec_state, &metadata, StatementKind::Expression) + .await?; + fn_args.insert(arg_expr.label.name.clone(), Arg::new(value, source_range)); + } + let fn_args = fn_args; // remove mutability + + // Evaluate the unlabeled first param, if any exists. + let unlabeled = if let Some(ref arg_expr) = self.unlabeled { + let source_range = SourceRange::from(arg_expr.clone()); + let metadata = Metadata { source_range }; + let value = ctx + .execute_expr(arg_expr, exec_state, &metadata, StatementKind::Expression) + .await?; + Some(Arg::new(value, source_range)) + } else { + None + }; + + let args = crate::std::Args::new_kw(fn_args, unlabeled, self.into(), ctx.clone()); + match ctx.stdlib.get_either(fn_name) { + FunctionKind::Core(func) => { + // Attempt to call the function. + let mut result = func.std_lib_fn()(exec_state, args).await?; + update_memory_for_tags_of_geometry(&mut result, exec_state)?; + Ok(result) + } + FunctionKind::UserDefined => { + todo!("Part of modeling-app#4600: Support keyword arguments for user-defined functions") + } + FunctionKind::Std(_) => todo!("There is no KCL std anymore, it's all core."), + } } } @@ -381,76 +420,12 @@ impl Node { fn_args.push(arg); } - match ctx.stdlib.get_either(&self.callee.name) { + match ctx.stdlib.get_either(fn_name) { FunctionKind::Core(func) => { // Attempt to call the function. let args = crate::std::Args::new(fn_args, self.into(), ctx.clone()); let mut result = func.std_lib_fn()(exec_state, args).await?; - - // If the return result is a sketch or solid, we want to update the - // memory for the tags of the group. - // TODO: This could probably be done in a better way, but as of now this was my only idea - // and it works. - match result { - KclValue::Sketch { value: ref mut sketch } => { - for (_, tag) in sketch.tags.iter() { - exec_state.memory.update_tag(&tag.value, tag.clone())?; - } - } - KclValue::Solid(ref mut solid) => { - for value in &solid.value { - if let Some(tag) = value.get_tag() { - // Get the past tag and update it. - let mut t = if let Some(t) = solid.sketch.tags.get(&tag.name) { - t.clone() - } else { - // It's probably a fillet or a chamfer. - // Initialize it. - TagIdentifier { - value: tag.name.clone(), - info: Some(TagEngineInfo { - id: value.get_id(), - surface: Some(value.clone()), - path: None, - sketch: solid.id, - }), - meta: vec![Metadata { - source_range: tag.clone().into(), - }], - } - }; - - let Some(ref info) = t.info else { - return Err(KclError::Semantic(KclErrorDetails { - message: format!("Tag {} does not have path info", tag.name), - source_ranges: vec![tag.into()], - })); - }; - - let mut info = info.clone(); - info.surface = Some(value.clone()); - info.sketch = solid.id; - t.info = Some(info); - - exec_state.memory.update_tag(&tag.name, t.clone())?; - - // update the sketch tags. - solid.sketch.tags.insert(tag.name.clone(), t); - } - } - - // Find the stale sketch in memory and update it. - if let Some(current_env) = exec_state - .memory - .environments - .get_mut(exec_state.memory.current_env.index()) - { - current_env.update_sketch_tags(&solid.sketch); - } - } - _ => {} - } - + update_memory_for_tags_of_geometry(&mut result, exec_state)?; Ok(result) } FunctionKind::Std(func) => { @@ -570,6 +545,73 @@ impl Node { } } +fn update_memory_for_tags_of_geometry(result: &mut KclValue, exec_state: &mut ExecState) -> Result<(), KclError> { + // If the return result is a sketch or solid, we want to update the + // memory for the tags of the group. + // TODO: This could probably be done in a better way, but as of now this was my only idea + // and it works. + match result { + KclValue::Sketch { value: ref mut sketch } => { + for (_, tag) in sketch.tags.iter() { + exec_state.memory.update_tag(&tag.value, tag.clone())?; + } + } + KclValue::Solid(ref mut solid) => { + for value in &solid.value { + if let Some(tag) = value.get_tag() { + // Get the past tag and update it. + let mut t = if let Some(t) = solid.sketch.tags.get(&tag.name) { + t.clone() + } else { + // It's probably a fillet or a chamfer. + // Initialize it. + TagIdentifier { + value: tag.name.clone(), + info: Some(TagEngineInfo { + id: value.get_id(), + surface: Some(value.clone()), + path: None, + sketch: solid.id, + }), + meta: vec![Metadata { + source_range: tag.clone().into(), + }], + } + }; + + let Some(ref info) = t.info else { + return Err(KclError::Semantic(KclErrorDetails { + message: format!("Tag {} does not have path info", tag.name), + source_ranges: vec![tag.into()], + })); + }; + + let mut info = info.clone(); + info.surface = Some(value.clone()); + info.sketch = solid.id; + t.info = Some(info); + + exec_state.memory.update_tag(&tag.name, t.clone())?; + + // update the sketch tags. + solid.sketch.tags.insert(tag.name.clone(), t); + } + } + + // Find the stale sketch in memory and update it. + if let Some(current_env) = exec_state + .memory + .environments + .get_mut(exec_state.memory.current_env.index()) + { + current_env.update_sketch_tags(&solid.sketch); + } + } + _ => {} + } + Ok(()) +} + impl Node { pub async fn execute(&self, exec_state: &mut ExecState) -> Result { let memory_item = KclValue::TagIdentifier(Box::new(TagIdentifier { diff --git a/src/wasm-lib/kcl/src/std/args.rs b/src/wasm-lib/kcl/src/std/args.rs index e65ddee9d..f75718c83 100644 --- a/src/wasm-lib/kcl/src/std/args.rs +++ b/src/wasm-lib/kcl/src/std/args.rs @@ -1,4 +1,4 @@ -use std::{any::type_name, num::NonZeroU32}; +use std::{any::type_name, collections::HashMap, num::NonZeroU32}; use anyhow::Result; use kcmc::{websocket::OkWebSocketResponseData, ModelingCmd}; @@ -45,7 +45,12 @@ impl Arg { #[derive(Debug, Clone)] pub struct Args { + /// Positional args. pub args: Vec, + /// Keyword args. + pub kw_args: HashMap, + /// Unlabeled keyword args. Currently only the first arg can be unlabeled. + pub unlabeled_kw_arg: Option, pub source_range: SourceRange, pub ctx: ExecutorContext, } @@ -54,6 +59,24 @@ impl Args { pub fn new(args: Vec, source_range: SourceRange, ctx: ExecutorContext) -> Self { Self { args, + kw_args: Default::default(), + unlabeled_kw_arg: Default::default(), + source_range, + ctx, + } + } + + /// Collect the given keyword arguments. + pub fn new_kw( + kw_args: HashMap, + unlabeled_kw_arg: Option, + source_range: SourceRange, + ctx: ExecutorContext, + ) -> Self { + Self { + args: Default::default(), + kw_args, + unlabeled_kw_arg, source_range, ctx, } @@ -65,6 +88,8 @@ impl Args { Ok(Self { args: Vec::new(), + kw_args: Default::default(), + unlabeled_kw_arg: Default::default(), source_range: SourceRange::default(), ctx: ExecutorContext { engine: Arc::new(Box::new(crate::engine::conn_mock::EngineConnection::new().await?)), @@ -76,6 +101,50 @@ impl Args { }) } + /// Get a keyword argument. If not set, returns None. + pub(crate) fn get_kw_arg_opt<'a, T>(&'a self, label: &str) -> Option + where + T: FromKclValue<'a>, + { + self.kw_args.get(label).and_then(|arg| T::from_kcl_val(&arg.value)) + } + + /// Get a keyword argument. If not set, returns Err. + pub(crate) fn get_kw_arg<'a, T>(&'a self, label: &str) -> Result + where + T: FromKclValue<'a>, + { + self.get_kw_arg_opt(label).ok_or_else(|| { + KclError::Semantic(KclErrorDetails { + source_ranges: vec![self.source_range], + message: format!("This function requires a keyword argument '{label}'"), + }) + }) + } + + /// Get the unlabeled keyword argument. If not set, returns Err. + pub(crate) fn get_unlabeled_kw_arg<'a, T>(&'a self, label: &str) -> Result + where + T: FromKclValue<'a>, + { + let Some(ref arg) = self.unlabeled_kw_arg else { + return Err(KclError::Semantic(KclErrorDetails { + source_ranges: vec![self.source_range], + message: format!("This function requires a value for the special unlabeled first parameter, '{label}'"), + })); + }; + T::from_kcl_val(&arg.value).ok_or_else(|| { + KclError::Semantic(KclErrorDetails { + source_ranges: arg.source_ranges(), + message: format!( + "Expected a {} but found {}", + type_name::(), + arg.value.human_friendly_type() + ), + }) + }) + } + // Add a modeling command to the batch but don't fire it right away. pub(crate) async fn batch_modeling_cmd( &self, diff --git a/src/wasm-lib/kcl/src/std/math.rs b/src/wasm-lib/kcl/src/std/math.rs index 4567594fa..7dc313598 100644 --- a/src/wasm-lib/kcl/src/std/math.rs +++ b/src/wasm-lib/kcl/src/std/math.rs @@ -3,7 +3,6 @@ use anyhow::Result; use derive_docs::stdlib; -use super::args::FromArgs; use crate::{ errors::{KclError, KclErrorDetails}, executor::{ExecState, KclValue}, @@ -13,7 +12,8 @@ use crate::{ /// Compute the remainder after dividing `num` by `div`. /// If `num` is negative, the result will be too. pub async fn rem(_exec_state: &mut ExecState, args: Args) -> Result { - let (n, d) = FromArgs::from_args(&args, 0)?; + let n = args.get_unlabeled_kw_arg("number to divide")?; + let d = args.get_kw_arg("divisor")?; let result = inner_rem(n, d)?; Ok(args.make_user_val_from_i64(result)) @@ -23,13 +23,15 @@ pub async fn rem(_exec_state: &mut ExecState, args: Args) -> Result Result { Ok(num % divisor)