Compare commits

...

26 Commits

Author SHA1 Message Date
200a9af61f add react perf plugin (#5645)
Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-03-06 18:57:46 +00:00
2696ddb996 Lf94/hidpi hovering fix (#5541)
* Fix hover highlights on HiDPI screens

* Fix flakey tests with new toolbar.exitSketch

* tsc && lint && fmt

* Disable pw electron thing again

* Fix test

---------

Co-authored-by: 49lf <ircsurfer33@gmail.com>
2025-03-06 11:19:13 -05:00
4e1b0daacb close websocket after test (#5652)
close the websocket properly
2025-03-06 03:09:00 +00:00
8aa46099a8 Types on test settings (#5643)
* type check the test settings

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* fix another

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-05 21:03:49 -05:00
00ff6371ed Bugfix: show proper error toast when user tries to rename project to conflicting name (#5613)
* Correct error toast behavior so rename error comes through

* Add rename error state to E2E test
2025-03-06 10:00:36 +11:00
b947dad6e9 Change step back shortcut in command palette to Shift+Backspace (#5604)
* Change cmdbar step back shortcut to Shift+Backspace

* Add visual button for step back

* Make the shortcut apply no matter what's in the input
2025-03-06 09:57:47 +11:00
c13bdbb749 Allow users to delete sketches on offset planes via feature tree (#5641)
* Add sketch-on-offset plane deletion cleanup logic

* Add an E2E test for this behavior
2025-03-06 09:56:28 +11:00
e500fad0e1 Don't crash when trying to apply lastSelectionEvent selection that is out-of-range (#5644)
* Dumbest possible fix: don't let the `throw` propogate

* Add E2E test

* Fix lint
2025-03-06 09:52:48 +11:00
bcac4d3798 Snapshots, yee shall kneel. (#5627)
* Give snapshotter a better chance of getting a good snapshot

* fmt tsc lint

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* Fix tests

* Again

* Make cmdBarFixture Locators getters

* Fix export error test

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-05 14:09:21 -05:00
63897bd60e Bump taiki-e/install-action from 2.49.11 to 2.49.15 (#5632)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.49.11 to 2.49.15.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.49.11...v2.49.15)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-05 10:03:01 -08:00
d429e868ac Bump @types/node from 22.13.1 to 22.13.9 in /packages/codemirror-lsp-client (#5638) 2025-03-05 10:15:18 -05:00
faa51ddc18 Bump eslint-plugin-react from 7.37.3 to 7.37.4 (#5637) 2025-03-05 10:14:54 -05:00
c28eb360c0 Bump google-github-actions/auth from 2.1.7 to 2.1.8 (#5630) 2025-03-05 09:47:00 -05:00
69cac17543 Bump @types/node from 22.13.1 to 22.13.9 (#5635) 2025-03-05 09:20:16 -05:00
50c7356b6a Bump google-github-actions/upload-cloud-storage from 2.2.1 to 2.2.2 (#5633) 2025-03-05 09:19:00 -05:00
37715d9fa8 Move lsp server to this repo (#5619) 2025-03-04 22:21:12 -08:00
e8af61e11f Code completions for @settings (#5622)
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-03-05 16:23:46 +13:00
de85c31e71 Make memory accessible from multiple threads/tasks (#5530)
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-03-05 12:03:32 +13:00
725c56ea6f Fix to not specify the rust toolchain version everywhere (#5614)
* Fix to not specify the rust toolchain version everywhere

* Fix to source

* Fix warning about non-portable option to cp

* Fix to use built-in Swatinem/rust-cache

* Fix Swatinem/rust-cache to use the right directory
2025-03-04 20:39:22 +00:00
1b958ee29f Only save the themeColor setting on end of input (#5618)
* Only save the themeColor setting on end of input

Closes #4463 by making this input sliders less eager to write to disk,
which was gumming up the works.

* fmt
2025-03-04 14:11:38 -05:00
4b0f67e604 Explicitly set shell to bash for retry action in CI (#5610)
* Explicitly set shell to bash for retry action in CI

* Do not run tests on dep install failure

* Use single quotes for string

* Had the wrong name
2025-03-04 13:18:36 -05:00
8ba1a5cd4d Add button in settings menu to manually check for updates (#5607)
* Expose an electron handler for checking for updates

* Add "Check for updates" button to settings
2025-03-04 12:41:35 -05:00
df278c7e6a Various hover improvements (#5617)
* Show more info on hover for variables

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Move hover impls to lsp module

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Make hover work on names inside calls, fix doc line breaking, trim docs in tool tips

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Test the new hovers; fix signature syntax

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Hover tips for kwargs

Signed-off-by: Nick Cameron <nrc@ncameron.org>

---------

Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-03-04 09:53:31 +00:00
6e57a80c13 Bump script for kcl crates (#5612)
* start of kcl-bumper

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* works!

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* add readme

Signed-off-by: Jess Frazelle <github@jessfraz.com>

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-03-03 16:03:18 -06:00
efe6565857 Bump taiki-e/install-action from 2.48.20 to 2.49.11 (#5608)
Bumps [taiki-e/install-action](https://github.com/taiki-e/install-action) from 2.48.20 to 2.49.11.
- [Release notes](https://github.com/taiki-e/install-action/releases)
- [Commits](https://github.com/taiki-e/install-action/compare/v2.48.20...v2.49.11)

---
updated-dependencies:
- dependency-name: taiki-e/install-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 20:48:50 +00:00
fa0a34585b Bump once_cell from 1.20.2 to 1.20.3 in /rust (#5592)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.20.2 to 1.20.3.
- [Changelog](https://github.com/matklad/once_cell/blob/master/CHANGELOG.md)
- [Commits](https://github.com/matklad/once_cell/compare/v1.20.2...v1.20.3)

---
updated-dependencies:
- dependency-name: once_cell
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 11:58:20 -08:00
331 changed files with 15636 additions and 5419 deletions

View File

@ -1,4 +1,6 @@
rust/*
rust/**/*.ts
!rust/kcl-language-server/client/src/**/*.ts
*.typegen.ts
packages/codemirror-lsp-client/dist/*
e2e/playwright/snapshots/prompt-to-edit/*
.vscode-test

View File

@ -4,6 +4,7 @@
"project": "./tsconfig.json"
},
"plugins": [
"react-perf",
"css-modules",
"jest",
"jsx-a11y",

View File

@ -0,0 +1,8 @@
FROM node:slim
COPY . /action
WORKDIR /action
RUN npm install --production
ENTRYPOINT ["node", "/action/main.js"]

View File

@ -0,0 +1,21 @@
# github-release
Copy-pasted from
https://github.com/bytecodealliance/wasmtime/tree/8acfdbdd8aa550d1b84e0ce1e6222a6605d14e38/.github/actions/github-release
An action used to publish GitHub releases for `wasmtime`.
As of the time of this writing there's a few actions floating around which
perform github releases but they all tend to have their set of drawbacks.
Additionally nothing handles deleting releases which we need for our rolling
`dev` release.
To handle all this, this action rolls its own implementation using the
actions/toolkit repository and packages published there. These run in a Docker
container and take various inputs to orchestrate the release from the build.
More comments can be found in `main.js`.
Testing this is really hard. If you want to try though run `npm install` and
then `node main.js`. You'll have to configure a bunch of env vars though to get
anything reasonably working.

View File

@ -0,0 +1,15 @@
name: "wasmtime github releases"
description: "wasmtime github releases"
inputs:
token:
description: ""
required: true
name:
description: ""
required: true
files:
description: ""
required: true
runs:
using: "docker"
image: "Dockerfile"

143
.github/actions/github-release/main.js vendored Normal file
View File

@ -0,0 +1,143 @@
const core = require("@actions/core");
const path = require("path");
const fs = require("fs");
const github = require("@actions/github");
const glob = require("glob");
function sleep(milliseconds) {
return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
async function runOnce() {
// Load all our inputs and env vars. Note that `getInput` reads from `INPUT_*`
const files = core.getInput("files");
const name = core.getInput("name");
const token = core.getInput("token");
const slug = process.env.GITHUB_REPOSITORY;
const owner = slug.split("/")[0];
const repo = slug.split("/")[1];
const sha = process.env.HEAD_SHA;
core.info(`files: ${files}`);
core.info(`name: ${name}`);
const options = {
request: {
timeout: 30000,
},
};
const octokit = github.getOctokit(token, options);
// Delete the previous release since we can't overwrite one. This may happen
// due to retrying an upload or it may happen because we're doing the dev
// release.
const releases = await octokit.paginate("GET /repos/:owner/:repo/releases", { owner, repo });
for (const release of releases) {
if (release.tag_name !== name) {
continue;
}
const release_id = release.id;
core.info(`deleting release ${release_id}`);
await octokit.rest.repos.deleteRelease({ owner, repo, release_id });
}
// We also need to update the `dev` tag while we're at it on the `dev` branch.
if (name == "nightly") {
try {
core.info(`updating nightly tag`);
await octokit.rest.git.updateRef({
owner,
repo,
ref: "tags/nightly",
sha,
force: true,
});
} catch (e) {
core.error(e);
core.info(`creating nightly tag`);
await octokit.rest.git.createTag({
owner,
repo,
tag: "nightly",
message: "nightly release",
object: sha,
type: "commit",
});
}
}
// Creates an official GitHub release for this `tag`, and if this is `dev`
// then we know that from the previous block this should be a fresh release.
core.info(`creating a release`);
const release = await octokit.rest.repos.createRelease({
owner,
repo,
name,
tag_name: name,
target_commitish: sha,
prerelease: name === "nightly",
});
const release_id = release.data.id;
// Upload all the relevant assets for this release as just general blobs.
for (const file of glob.sync(files)) {
const size = fs.statSync(file).size;
const name = path.basename(file);
await runWithRetry(async function () {
// We can't overwrite assets, so remove existing ones from a previous try.
let assets = await octokit.rest.repos.listReleaseAssets({
owner,
repo,
release_id,
});
for (const asset of assets.data) {
if (asset.name === name) {
core.info(`delete asset ${name}`);
const asset_id = asset.id;
await octokit.rest.repos.deleteReleaseAsset({ owner, repo, asset_id });
}
}
core.info(`upload ${file}`);
const headers = { "content-length": size, "content-type": "application/octet-stream" };
const data = fs.createReadStream(file);
await octokit.rest.repos.uploadReleaseAsset({
data,
headers,
name,
url: release.data.upload_url,
});
});
}
}
async function runWithRetry(f) {
const retries = 10;
const maxDelay = 4000;
let delay = 1000;
for (let i = 0; i < retries; i++) {
try {
await f();
break;
} catch (e) {
if (i === retries - 1) throw e;
core.error(e);
const currentDelay = Math.round(Math.random() * delay);
core.info(`sleeping ${currentDelay} ms`);
await sleep(currentDelay);
delay = Math.min(delay * 2, maxDelay);
}
}
}
async function run() {
await runWithRetry(runOnce);
}
run().catch((err) => {
core.error(err);
core.setFailed(err.message);
});

View File

@ -0,0 +1,10 @@
{
"name": "wasmtime-github-release",
"version": "0.0.0",
"main": "main.js",
"dependencies": {
"@actions/core": "^1.6",
"@actions/github": "^5.0",
"glob": "^7.1.5"
}
}

View File

@ -10,6 +10,7 @@ updates:
- '/'
- '/packages/codemirror-lang-kcl/'
- '/packages/codemirror-lsp-client/'
- '/rust/kcl-language-server/'
schedule:
interval: weekly
day: monday

View File

@ -22,7 +22,7 @@ jobs:
uses: Swatinem/rust-cache@v2
with:
workspaces: './rust'
- uses: taiki-e/install-action@2dbeb927f58939d3aa13bf06ba0c0a34b76b9bfb
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- name: build wasm

View File

@ -41,7 +41,7 @@ jobs:
workspaces: './rust'
# TODO: see if we can fetch from main instead if no diff at rust
- uses: taiki-e/install-action@2dbeb927f58939d3aa13bf06ba0c0a34b76b9bfb
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
@ -134,6 +134,7 @@ jobs:
# Windows is picky sometimes and fails on fetch. Step takes about ~30s
uses: nick-fields/retry@v3.0.2
with:
shell: bash
timeout_minutes: 2
max_attempts: 3
command: yarn install
@ -185,6 +186,7 @@ jobs:
# TODO: Fix electron-notarize flakes. The logs above should help gather more data on failures
uses: nick-fields/retry@v3.0.2
with:
shell: bash
timeout_minutes: 10
max_attempts: 3
command: yarn tronb:package:prod
@ -246,6 +248,7 @@ jobs:
# TODO: Fix electron-notarize flakes. The logs above should help gather more data on failures
uses: nick-fields/retry@v3.0.2
with:
shell: bash
timeout_minutes: 10
max_attempts: 3
command: yarn tronb:package:prod

View File

@ -19,15 +19,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install latest rust
uses: actions-rs/toolchain@v1
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.85
override: true
default: true
- name: Rust Cache
uses: Swatinem/rust-cache@v2.6.1
cache-workspaces: rust
- name: Run check
run: |

View File

@ -26,16 +26,15 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: taiki-e/install-action@just
- name: Install latest rust
uses: actions-rs/toolchain@v1
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.85
override: true
default: true
components: clippy
- name: Rust Cache
uses: Swatinem/rust-cache@v2.6.1
cache-workspaces: rust
components: clippy
- name: Run clippy
run: |

View File

@ -28,16 +28,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install latest rust
uses: actions-rs/toolchain@v1
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.85
override: true
default: true
components: rustfmt
- name: Rust Cache
uses: Swatinem/rust-cache@v2.6.1
cache-workspaces: rust
components: rustfmt
- name: Run cargo fmt
run: |

View File

@ -16,12 +16,14 @@ jobs:
runs-on: ubuntu-latest-8-cores
steps:
- uses: actions/checkout@v4
- name: Install latest rust
uses: actions-rs/toolchain@v1
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.85
override: true
default: true
cache: false # Configured below.
- name: Install vector
run: |
curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh
@ -40,6 +42,8 @@ jobs:
- uses: taiki-e/install-action@nextest
- name: Rust Cache
uses: Swatinem/rust-cache@v2.6.1
with:
workspaces: rust
- name: cargo test
shell: bash
run: |-

View File

@ -51,6 +51,7 @@ jobs:
node-version-file: '.nvmrc'
cache: 'yarn'
- name: Install dependencies
id: deps-install
shell: bash
run: yarn
- name: Cache Playwright Browsers
@ -80,7 +81,7 @@ jobs:
continue-on-error: true
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- uses: taiki-e/install-action@2dbeb927f58939d3aa13bf06ba0c0a34b76b9bfb
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- name: Cache Wasm (because rust diff)
@ -133,7 +134,7 @@ jobs:
# TODO: break this in its own job, for now it's not slowing down the overall execution as ubuntu is the quickest,
# but we could do better. This forces a large 1/1 shard of all 20 snapshot tests that runs in about 3 minutes.
run: |
PLATFORM=web yarn playwright test --config=playwright.config.ts --retries="3" --update-snapshots --grep=@snapshot --trace=on --shard=1/1
yarn test:snapshots
env:
CI: true
NODE_ENV: development
@ -193,9 +194,10 @@ jobs:
path: test-results/
- name: Run playwright/electron flow (with retries)
id: retry
if: ${{ !cancelled() && (success() || failure()) }}
if: ${{ !cancelled() && steps.deps-install.outcome == 'success' }}
uses: nick-fields/retry@v3.0.2
with:
shell: bash
command: .github/ci-cd-scripts/playwright-electron.sh ${{matrix.shardIndex}} ${{matrix.shardTotal}} ${{matrix.os}}
timeout_minutes: 30
max_attempts: 25

View File

@ -0,0 +1,401 @@
name: kcl-language-server
on:
push:
branches:
- main
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- 'rust/kcl-language-server/**'
- '**.rs'
- .github/workflows/kcl-language-server.yml
tags:
- 'kcl-*'
pull_request:
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- 'rust/kcl-language-server/**'
- '**.rs'
- .github/workflows/kcl-language-server.yml
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
CARGO_INCREMENTAL: 0
CARGO_NET_RETRY: 10
RUSTFLAGS: ""
RUSTUP_MAX_RETRIES: 10
FETCH_DEPTH: 0 # pull in the tags for the version string
MACOSX_DEPLOYMENT_TARGET: 10.15
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
CARGO_TARGET_ARM_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
jobs:
test:
name: vscode tests
strategy:
fail-fast: false
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
- name: Install dependencies
run: |
yarn install
cd rust/kcl-language-server
yarn install
- name: Run tests
run: |
cd rust/kcl-language-server
yarn build
yarn test-compile
ls -la dist
xvfb-run -a yarn test
if: runner.os == 'Linux'
- name: Run tests
run: |
cd rust/kcl-language-server
yarn test
if: runner.os != 'Linux'
build-release:
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
code-target:
win32-x64
#- os: windows-latest
#target: i686-pc-windows-msvc
#code-target:
#win32-ia32
#- os: windows-latest
#target: aarch64-pc-windows-msvc
#code-target: win32-arm64
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
code-target:
linux-x64
#- os: ubuntu-latest
#target: aarch64-unknown-linux-musl
#code-target: linux-arm64
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
code-target: linux-arm64
- os: ubuntu-latest
target: arm-unknown-linux-gnueabihf
code-target: linux-armhf
- os: macos-latest
target: x86_64-apple-darwin
code-target: darwin-x64
- os: macos-latest
target: aarch64-apple-darwin
code-target: darwin-arm64
name: build-release (${{ matrix.target }})
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
env:
RA_TARGET: ${{ matrix.target }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.FETCH_DEPTH }}
- name: Use correct Rust toolchain
shell: bash
run: |
rm rust/rust-toolchain.toml
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache: rust
components: rust-src
target: ${{ matrix.target }}
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
- name: Update apt repositories
if: matrix.target == 'aarch64-unknown-linux-gnu' || matrix.target == 'arm-unknown-linux-gnueabihf' || matrix.os == 'ubuntu-latest'
run: sudo apt-get update
- if: ${{ matrix.os == 'ubuntu-latest' }}
name: Install deps
shell: bash
run: |
sudo apt install -y \
ca-certificates \
clang \
cmake \
curl \
g++ \
gcc \
gcc-mingw-w64-i686 \
gcc-mingw-w64 \
jq \
libmpc-dev \
libmpfr-dev \
libgmp-dev \
libssl-dev \
libxml2-dev \
mingw-w64 \
wget \
zlib1g-dev
cargo install cross
- name: Install AArch64 target toolchain
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: sudo apt-get install gcc-aarch64-linux-gnu
- name: Install ARM target toolchain
if: matrix.target == 'arm-unknown-linux-gnueabihf'
run: sudo apt-get install gcc-arm-linux-gnueabihf
- name: build
run: |
cd rust
cargo kcl-language-server-release build --client-patch-version ${{ github.run_number }}
- name: Install dependencies
run: |
cd rust/kcl-language-server
yarn install
- name: Package Extension (release)
if: startsWith(github.event.ref, 'refs/tags/')
run: |
cd rust/kcl-language-server
npx vsce package -o "../build/kcl-language-server-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }}
- name: Package Extension (nightly)
if: startsWith(github.event.ref, 'refs/tags/') == false
run: |
cd rust/kcl-language-server
npx vsce package -o "../build/kcl-language-server-${{ matrix.code-target }}.vsix" --target ${{ matrix.code-target }} --pre-release
- name: remove server
if: matrix.target == 'x86_64-unknown-linux-gnu'
run: |
cd rust/kcl-language-server
rm -rf server
- name: Package Extension (no server, release)
if: matrix.target == 'x86_64-unknown-linux-gnu' && startsWith(github.event.ref, 'refs/tags/')
run: |
cd rust/kcl-language-server
npx vsce package -o ../build/kcl-language-server-no-server.vsix
- name: Package Extension (no server, nightly)
if: matrix.target == 'x86_64-unknown-linux-gnu' && startsWith(github.event.ref, 'refs/tags/') == false
run: |
cd rust/kcl-language-server
npx vsce package -o ../build/kcl-language-server-no-server.vsix --pre-release
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: release-${{ matrix.target }}
path: ./rust/build
build-release-x86_64-unknown-linux-musl:
name: build-release (x86_64-unknown-linux-musl)
runs-on: ubuntu-latest
env:
RA_TARGET: x86_64-unknown-linux-musl
# For some reason `-crt-static` is not working for clang without lld
RUSTFLAGS: "-C link-arg=-fuse-ld=lld -C target-feature=-crt-static"
container:
image: alpine:latest
volumes:
- /usr/local/cargo/registry:/usr/local/cargo/registry
steps:
- name: Install dependencies
run: |
apk add --no-cache \
bash \
curl \
git \
clang \
lld \
musl-dev \
nodejs \
yarn \
npm
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.FETCH_DEPTH }}
- name: Use correct Rust toolchain
shell: bash
run: |
rm rust/rust-toolchain.toml
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache: rust
components: rust-src
target: ${{ matrix.target }}
- name: build
run: |
cd rust
cargo kcl-language-server-release build --client-patch-version ${{ github.run_number }}
- name: Install dependencies
run: |
cd rust/kcl-language-server
yarn install
- name: Package Extension (release)
if: startsWith(github.event.ref, 'refs/tags/')
run: |
cd rust/kcl-language-server
npx vsce package -o "../build/kcl-language-server-alpine-x64.vsix" --target alpine-x64
- name: Package Extension (release)
if: startsWith(github.event.ref, 'refs/tags/') == false
run: |
cd rust/kcl-language-server
npx vsce package -o "../build/kcl-language-server-alpine-x64.vsix" --target alpine-x64 --pre-release
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: release-x86_64-unknown-linux-musl
path: ./rust/build
publish:
name: publish
runs-on: ubuntu-latest
needs: ["build-release", "build-release-x86_64-unknown-linux-musl"]
if: startsWith(github.event.ref, 'refs/tags')
permissions:
contents: write
steps:
- run: echo "TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- run: 'echo "TAG: $TAG"'
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: ${{ env.FETCH_DEPTH }}
- name: Install Nodejs
uses: actions/setup-node@v4
with:
node-version-file: ".nvmrc"
- run: echo "HEAD_SHA=$(git rev-parse HEAD)" >> $GITHUB_ENV
- run: 'echo "HEAD_SHA: $HEAD_SHA"'
- uses: actions/download-artifact@v4
with:
name: release-aarch64-apple-darwin
path: rust/build
- uses: actions/download-artifact@v4
with:
name: release-x86_64-apple-darwin
path: rust/build
- uses: actions/download-artifact@v4
with:
name: release-x86_64-unknown-linux-gnu
path: rust/build
- uses: actions/download-artifact@v4
with:
name: release-x86_64-unknown-linux-musl
path: rust/build
- uses: actions/download-artifact@v4
with:
name: release-aarch64-unknown-linux-gnu
path: rust/build
- uses: actions/download-artifact@v4
with:
name: release-arm-unknown-linux-gnueabihf
path: rust/build
- uses: actions/download-artifact@v4
with:
name: release-x86_64-pc-windows-msvc
path:
rust/build
#- uses: actions/download-artifact@v4
#with:
#name: release-i686-pc-windows-msvc
#path:
#build
#- uses: actions/download-artifact@v4
#with:
#name: release-aarch64-pc-windows-msvc
#path: rust/build
- run: ls -al ./rust/build
- name: Publish Release
uses: ./.github/actions/github-release
with:
files: "rust/build/*"
name: ${{ env.TAG }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: move files to dir for upload
shell: bash
run: |
cd rust
mkdir -p releases/language-server/${{ env.TAG }}
cp -r build/* releases/language-server/${{ env.TAG }}
- name: "Authenticate to Google Cloud"
uses: "google-github-actions/auth@v2.1.8"
with:
credentials_json: "${{ secrets.GOOGLE_CLOUD_DL_SA }}"
- name: Set up Cloud SDK
uses: google-github-actions/setup-gcloud@v2.1.2
with:
project_id: kittycadapi
- name: "upload files to gcp"
id: upload-files
uses: google-github-actions/upload-cloud-storage@v2.2.2
with:
path: rust/releases
destination: dl.kittycad.io
- run: rm rust/build/kcl-language-server-no-server.vsix
- name: Publish Extension (Code Marketplace, release)
# token from https://dev.azure.com/kcl-language-server/
run: |
cd rust/kcl-language-server
npx vsce publish --pat ${{ secrets.VSCE_PAT }} --packagePath ../build/kcl-language-server-*.vsix
- name: Publish Extension (OpenVSX, release)
run: |
cd rust/kcl-language-server
npx ovsx publish --pat ${{ secrets.OPENVSX_TOKEN }} --packagePath ../build/kcl-language-server-*.vsix
timeout-minutes: 2

View File

@ -37,7 +37,7 @@ jobs:
node-version-file: '.nvmrc'
cache: 'yarn'
- run: yarn install
- uses: taiki-e/install-action@2dbeb927f58939d3aa13bf06ba0c0a34b76b9bfb
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- run: yarn build:wasm
@ -52,11 +52,12 @@ jobs:
node-version-file: '.nvmrc'
cache: 'yarn'
- run: yarn install
- run: yarn --cwd ./rust/kcl-language-server --modules-folder node_modules install
- uses: Swatinem/rust-cache@v2
with:
workspaces: './rust'
- uses: taiki-e/install-action@2dbeb927f58939d3aa13bf06ba0c0a34b76b9bfb
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- run: yarn build:wasm
@ -72,6 +73,7 @@ jobs:
node-version-file: '.nvmrc'
cache: 'yarn'
- run: yarn install
- run: yarn --cwd ./rust/kcl-language-server --modules-folder node_modules install
- run: yarn lint
python-codespell:
@ -98,7 +100,7 @@ jobs:
cache: 'yarn'
- run: yarn install
- uses: taiki-e/install-action@2dbeb927f58939d3aa13bf06ba0c0a34b76b9bfb
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- run: yarn build:wasm
@ -127,7 +129,7 @@ jobs:
cache: 'yarn'
- run: yarn install
- uses: taiki-e/install-action@2dbeb927f58939d3aa13bf06ba0c0a34b76b9bfb
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- run: yarn build:wasm
@ -141,7 +143,7 @@ jobs:
- name: run unit tests
if: ${{ github.event_name != 'release' && github.event_name != 'schedule' }}
run: yarn test:unit
run: xvfb-run -a yarn test:unit
env:
VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}

12
.gitignore vendored
View File

@ -1,7 +1,7 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
node_modules
/.pnp
.pnp.js
@ -9,7 +9,7 @@
/coverage
# production
/build
build
# misc
.DS_Store
@ -35,6 +35,10 @@ rust/lcov.info
rust/kcl-wasm-lib/pkg
*.snap.new
rust/kcl-lib/fuzz/Cargo.lock
rust/kcl-language-server-release/Cargo.lock
# kcl language server package
rust/kcl-language-server/dist/
e2e/playwright/playwright-secrets.env
e2e/playwright/temp1.png
@ -71,5 +75,7 @@ out/
# python
__pycache__/
uv.lock
rust/kcl-python-bindings/dist
dist
venv
.vscode-test

View File

@ -7,10 +7,10 @@ coverage
*.rs
*.hbs
target
rust/
e2e/playwright/export-snapshots
e2e/playwright/snapshots/prompt-to-edit
# XState generated files
src/machines/**.typegen.ts
.vscode-test

View File

@ -9,7 +9,7 @@ Compute the absolute value of a number.
```js
abs(num: number) -> number
abs(num: number): number
```
### Tags

View File

@ -9,7 +9,7 @@ Compute the arccosine of a number (in radians).
```js
acos(num: number) -> number
acos(num: number): number
```
### Tags

View File

@ -13,7 +13,7 @@ angleToMatchLengthX(
tag: TagIdentifier,
to: number,
sketch: Sketch,
) -> number
): number
```

View File

@ -13,7 +13,7 @@ angleToMatchLengthY(
tag: TagIdentifier,
to: number,
sketch: Sketch,
) -> number
): number
```

View File

@ -1,19 +1,19 @@
---
title: "angledLine"
excerpt: "Draw a line segment relative to the current origin using the polar"
excerpt: "Draw a line segment relative to the current origin using the polar measure of some angle and distance."
layout: manual
---
Draw a line segment relative to the current origin using the polar
Draw a line segment relative to the current origin using the polar measure of some angle and distance.
measure of some angle and distance.
```js
angledLine(
data: AngledLineData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -1,19 +1,19 @@
---
title: "angledLineOfXLength"
excerpt: "Create a line segment from the current 2-dimensional sketch origin"
excerpt: "Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some relative length in the 'x' dimension."
layout: manual
---
Create a line segment from the current 2-dimensional sketch origin
Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some relative length in the 'x' dimension.
along some angle (in degrees) for some relative length in the 'x' dimension.
```js
angledLineOfXLength(
data: AngledLineData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -1,19 +1,19 @@
---
title: "angledLineOfYLength"
excerpt: "Create a line segment from the current 2-dimensional sketch origin"
excerpt: "Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some relative length in the 'y' dimension."
layout: manual
---
Create a line segment from the current 2-dimensional sketch origin
Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some relative length in the 'y' dimension.
along some angle (in degrees) for some relative length in the 'y' dimension.
```js
angledLineOfYLength(
data: AngledLineData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -1,19 +1,19 @@
---
title: "angledLineThatIntersects"
excerpt: "Draw an angled line from the current origin, constructing a line segment"
excerpt: "Draw an angled line from the current origin, constructing a line segment such that the newly created line intersects the desired target line segment."
layout: manual
---
Draw an angled line from the current origin, constructing a line segment
Draw an angled line from the current origin, constructing a line segment such that the newly created line intersects the desired target line segment.
such that the newly created line intersects the desired target line segment.
```js
angledLineThatIntersects(
data: AngledLineThatIntersectsData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -1,19 +1,19 @@
---
title: "angledLineToX"
excerpt: "Create a line segment from the current 2-dimensional sketch origin"
excerpt: "Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some length, ending at the provided value in the 'x' dimension."
layout: manual
---
Create a line segment from the current 2-dimensional sketch origin
Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some length, ending at the provided value in the 'x' dimension.
along some angle (in degrees) for some length, ending at the provided value in the 'x' dimension.
```js
angledLineToX(
data: AngledLineToData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -1,19 +1,19 @@
---
title: "angledLineToY"
excerpt: "Create a line segment from the current 2-dimensional sketch origin"
excerpt: "Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some length, ending at the provided value in the 'y' dimension."
layout: manual
---
Create a line segment from the current 2-dimensional sketch origin
Create a line segment from the current 2-dimensional sketch origin along some angle (in degrees) for some length, ending at the provided value in the 'y' dimension.
along some angle (in degrees) for some length, ending at the provided value in the 'y' dimension.
```js
angledLineToY(
data: AngledLineToData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -14,7 +14,7 @@ appearance(
color: String,
metalness?: number,
roughness?: number,
) -> SolidSet
): SolidSet
```

View File

@ -15,7 +15,7 @@ arc(
data: ArcData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -1,10 +1,10 @@
---
title: "arcTo"
excerpt: "Draw a 3 point arc."
excerpt: "Draw a three point arc."
layout: manual
---
Draw a 3 point arc.
Draw a three point arc.
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.
@ -13,7 +13,7 @@ arcTo(
data: ArcToData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -9,7 +9,7 @@ Compute the arcsine of a number (in radians).
```js
asin(num: number) -> number
asin(num: number): number
```
### Tags

View File

@ -1,18 +1,18 @@
---
title: "assert"
excerpt: "Check a value at runtime, and raise an error if the argument provided"
excerpt: "Check a value at runtime, and raise an error if the argument provided is false."
layout: manual
---
Check a value at runtime, and raise an error if the argument provided
Check a value at runtime, and raise an error if the argument provided is false.
is false.
```js
assert(
data: bool,
message: string,
) -> ()
): ()
```

View File

@ -1,12 +1,12 @@
---
title: "assertEqual"
excerpt: "Check that a numerical value equals another at runtime,"
excerpt: "Check that a numerical value equals another at runtime, otherwise raise an error."
layout: manual
---
Check that a numerical value equals another at runtime,
Check that a numerical value equals another at runtime, otherwise raise an error.
otherwise raise an error.
```js
assertEqual(
@ -14,7 +14,7 @@ assertEqual(
right: number,
epsilon: number,
message: string,
) -> ()
): ()
```

View File

@ -1,19 +1,19 @@
---
title: "assertGreaterThan"
excerpt: "Check that a numerical value is greater than another at runtime,"
excerpt: "Check that a numerical value is greater than another at runtime, otherwise raise an error."
layout: manual
---
Check that a numerical value is greater than another at runtime,
Check that a numerical value is greater than another at runtime, otherwise raise an error.
otherwise raise an error.
```js
assertGreaterThan(
left: number,
right: number,
message: string,
) -> ()
): ()
```

View File

@ -1,19 +1,19 @@
---
title: "assertGreaterThanOrEq"
excerpt: "Check that a numerical value is greater than or equal to another at runtime,"
excerpt: "Check that a numerical value is greater than or equal to another at runtime, otherwise raise an error."
layout: manual
---
Check that a numerical value is greater than or equal to another at runtime,
Check that a numerical value is greater than or equal to another at runtime, otherwise raise an error.
otherwise raise an error.
```js
assertGreaterThanOrEq(
left: number,
right: number,
message: string,
) -> ()
): ()
```

View File

@ -1,19 +1,19 @@
---
title: "assertLessThan"
excerpt: "Check that a numerical value is less than to another at runtime,"
excerpt: "Check that a numerical value is less than to another at runtime, otherwise raise an error."
layout: manual
---
Check that a numerical value is less than to another at runtime,
Check that a numerical value is less than to another at runtime, otherwise raise an error.
otherwise raise an error.
```js
assertLessThan(
left: number,
right: number,
message: string,
) -> ()
): ()
```

View File

@ -1,19 +1,19 @@
---
title: "assertLessThanOrEq"
excerpt: "Check that a numerical value is less than or equal to another at runtime,"
excerpt: "Check that a numerical value is less than or equal to another at runtime, otherwise raise an error."
layout: manual
---
Check that a numerical value is less than or equal to another at runtime,
Check that a numerical value is less than or equal to another at runtime, otherwise raise an error.
otherwise raise an error.
```js
assertLessThanOrEq(
left: number,
right: number,
message: string,
) -> ()
): ()
```

View File

@ -9,7 +9,7 @@ Compute the arctangent of a number (in radians).
```js
atan(num: number) -> number
atan(num: number): number
```
### Tags

View File

@ -12,7 +12,7 @@ Compute the four quadrant arctangent of Y and X (in radians).
atan2(
y: number,
x: number,
) -> number
): number
```
### Tags

View File

@ -1,19 +1,19 @@
---
title: "bezierCurve"
excerpt: "Draw a smooth, continuous, curved line segment from the current origin to"
excerpt: "Draw a smooth, continuous, curved line segment from the current origin to the desired (x, y), using a number of control points to shape the curve's shape."
layout: manual
---
Draw a smooth, continuous, curved line segment from the current origin to
Draw a smooth, continuous, curved line segment from the current origin to the desired (x, y), using a number of control points to shape the curve's shape.
the desired (x, y), using a number of control points to shape the curve's shape.
```js
bezierCurve(
data: BezierData,
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -9,7 +9,7 @@ Compute the smallest integer greater than or equal to a number.
```js
ceil(num: number) -> number
ceil(num: number): number
```
### Tags

View File

@ -14,7 +14,7 @@ chamfer(
length: number,
tags: [EdgeReference],
tag?: TagDeclarator,
) -> Solid
): Solid
```

View File

@ -1,12 +1,12 @@
---
title: "circle"
excerpt: "Construct a 2-dimensional circle, of the specified radius, centered at"
excerpt: "Construct a 2-dimensional circle, of the specified radius, centered at the provided (x, y) origin point."
layout: manual
---
Construct a 2-dimensional circle, of the specified radius, centered at
Construct a 2-dimensional circle, of the specified radius, centered at the provided (x, y) origin point.
the provided (x, y) origin point.
```js
circle(
@ -14,7 +14,7 @@ circle(
center: [number],
radius: number,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -15,7 +15,7 @@ circleThreePoint(
p3: [number],
sketchSurfaceOrGroup: SketchOrSurface,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -1,18 +1,18 @@
---
title: "close"
excerpt: "Construct a line segment from the current origin back to the profile's"
excerpt: "Construct a line segment from the current origin back to the profile's origin, ensuring the resulting 2-dimensional sketch is not open-ended."
layout: manual
---
Construct a line segment from the current origin back to the profile's
Construct a line segment from the current origin back to the profile's origin, ensuring the resulting 2-dimensional sketch is not open-ended.
origin, ensuring the resulting 2-dimensional sketch is not open-ended.
```js
close(
sketch: Sketch,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -15,7 +15,7 @@ For example, if the current project uses inches, this function will return `0.39
We merely provide these functions for convenience and readability, as `10 * cm()` is more readable that your intent is "I want 10 centimeters" than `10 * 10`, if the project settings are in millimeters.
```js
cm() -> number
cm(): number
```
### Tags

View File

@ -11,7 +11,7 @@ Return the value of Eulers number `e`.
**DEPRECATED** use the constant E
```js
e() -> number
e(): number
```
### Tags

View File

@ -1,18 +1,18 @@
---
title: "extrude"
excerpt: "Extend a 2-dimensional sketch through a third dimension in order to"
excerpt: "Extend a 2-dimensional sketch through a third dimension in order to create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid."
layout: manual
---
Extend a 2-dimensional sketch through a third dimension in order to
Extend a 2-dimensional sketch through a third dimension in order to create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid.
create new 3-dimensional volume, or if extruded into an existing volume, cut into an existing solid.
```js
extrude(
sketchSet: SketchSet,
length: number,
) -> SolidSet
): SolidSet
```

View File

@ -15,7 +15,7 @@ fillet(
tags: [EdgeReference],
tolerance?: number,
tag?: TagDeclarator,
) -> Solid
): Solid
```

View File

@ -9,7 +9,7 @@ Compute the largest integer less than or equal to a number.
```js
floor(num: number) -> number
floor(num: number): number
```
### Tags

View File

@ -15,7 +15,7 @@ For example, if the current project uses inches, this function will return `12`.
We merely provide these functions for convenience and readability, as `10 * ft()` is more readable that your intent is "I want 10 feet" than `10 * 304.8`, if the project settings are in millimeters.
```js
ft() -> number
ft(): number
```
### Tags

View File

@ -9,7 +9,7 @@ Get the next adjacent edge to the edge given.
```js
getNextAdjacentEdge(tag: TagIdentifier) -> Uuid
getNextAdjacentEdge(tag: TagIdentifier): Uuid
```

View File

@ -9,7 +9,7 @@ Get the opposite edge to the edge given.
```js
getOppositeEdge(tag: TagIdentifier) -> Uuid
getOppositeEdge(tag: TagIdentifier): Uuid
```

View File

@ -9,7 +9,7 @@ Get the previous adjacent edge to the edge given.
```js
getPreviousAdjacentEdge(tag: TagIdentifier) -> Uuid
getPreviousAdjacentEdge(tag: TagIdentifier): Uuid
```

View File

@ -16,7 +16,7 @@ helix(
radius: number,
axis: Axis3dOrEdgeReference,
length?: number,
) -> HelixValue
): HelixValue
```

View File

@ -12,7 +12,7 @@ Create a helix on a cylinder.
helixRevolutions(
data: HelixRevolutionsData,
solid: Solid,
) -> Solid
): Solid
```

View File

@ -12,7 +12,7 @@ Use a 2-dimensional sketch to cut a hole in another 2-dimensional sketch.
hole(
holeSketch: SketchSet,
sketch: Sketch,
) -> Sketch
): Sketch
```

View File

@ -12,7 +12,7 @@ Remove volume from a 3-dimensional shape such that a wall of the provided thickn
hollow(
thickness: number,
solid: Solid,
) -> Solid
): Solid
```

View File

@ -18,7 +18,7 @@ Note: The import command currently only works when using the native Modeling App
import(
filePath: String,
options?: ImportFormat,
) -> ImportedGeometry
): ImportedGeometry
```

View File

@ -15,7 +15,7 @@ For example, if the current project uses inches, this function will return `1`.
We merely provide these functions for convenience and readability, as `10 * inch()` is more readable that your intent is "I want 10 inches" than `10 * 25.4`, if the project settings are in millimeters.
```js
inch() -> number
inch(): number
```
### Tags

View File

@ -11,7 +11,7 @@ Convert a number to an integer.
DEPRECATED use floor(), ceil(), or round().
```js
int(num: number) -> number
int(num: number): number
```
### Tags

View File

@ -1,15 +1,15 @@
---
title: "lastSegX"
excerpt: "Extract the 'x' axis value of the last line segment in the provided 2-d"
excerpt: "Extract the 'x' axis value of the last line segment in the provided 2-d sketch."
layout: manual
---
Extract the 'x' axis value of the last line segment in the provided 2-d
Extract the 'x' axis value of the last line segment in the provided 2-d sketch.
sketch.
```js
lastSegX(sketch: Sketch) -> number
lastSegX(sketch: Sketch): number
```

View File

@ -1,15 +1,15 @@
---
title: "lastSegY"
excerpt: "Extract the 'y' axis value of the last line segment in the provided 2-d"
excerpt: "Extract the 'y' axis value of the last line segment in the provided 2-d sketch."
layout: manual
---
Extract the 'y' axis value of the last line segment in the provided 2-d
Extract the 'y' axis value of the last line segment in the provided 2-d sketch.
sketch.
```js
lastSegY(sketch: Sketch) -> number
lastSegY(sketch: Sketch): number
```

View File

@ -12,7 +12,7 @@ Compute the angle of the given leg for x.
legAngX(
hypotenuse: number,
leg: number,
) -> number
): number
```
### Tags

View File

@ -12,7 +12,7 @@ Compute the angle of the given leg for y.
legAngY(
hypotenuse: number,
leg: number,
) -> number
): number
```
### Tags

View File

@ -12,7 +12,7 @@ Compute the length of the given leg.
legLen(
hypotenuse: number,
leg: number,
) -> number
): number
```
### Tags

View File

@ -14,7 +14,7 @@ line(
endAbsolute?: [number],
end?: [number],
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -9,7 +9,7 @@ Compute the natural logarithm of the number.
```js
ln(num: number) -> number
ln(num: number): number
```
### Tags

View File

@ -15,7 +15,7 @@ loft(
bezApproximateRational: bool,
baseCurveIndex?: integer,
tolerance?: number,
) -> Solid
): Solid
```

View File

@ -12,7 +12,7 @@ The result might not be correctly rounded owing to implementation details; `log2
log(
num: number,
base: number,
) -> number
): number
```
### Tags

View File

@ -9,7 +9,7 @@ Compute the base 10 logarithm of the number.
```js
log10(num: number) -> number
log10(num: number): number
```
### Tags

View File

@ -9,7 +9,7 @@ Compute the base 2 logarithm of the number.
```js
log2(num: number) -> number
log2(num: number): number
```
### Tags

View File

@ -15,7 +15,7 @@ For example, if the current project uses inches, this function will return `39.3
We merely provide these functions for convenience and readability, as `10 * m()` is more readable that your intent is "I want 10 meters" than `10 * 1000`, if the project settings are in millimeters.
```js
m() -> number
m(): number
```
### Tags

View File

@ -12,7 +12,7 @@ Given a list like `[a, b, c]`, and a function like `f`, returns `[f(a), f(b), f(
map(
array: [KclValue],
mapFn: FunctionSource,
) -> [KclValue]
): [KclValue]
```

View File

@ -9,7 +9,7 @@ Compute the maximum of the given arguments.
```js
max(args: [number]) -> number
max(args: [number]): number
```
### Tags

View File

@ -9,7 +9,7 @@ Compute the minimum of the given arguments.
```js
min(args: [number]) -> number
min(args: [number]): number
```
### Tags

View File

@ -14,7 +14,7 @@ Mirror occurs around a local sketch axis rather than a global axis.
mirror2d(
data: Mirror2dData,
sketchSet: SketchSet,
) -> [Sketch]
): [Sketch]
```

View File

@ -15,7 +15,7 @@ For example, if the current project uses inches, this function will return `(1/2
We merely provide these functions for convenience and readability, as `10 * mm()` is more readable that your intent is "I want 10 millimeters" than `10 * (1/25.4)`, if the project settings are in inches.
```js
mm() -> number
mm(): number
```
### Tags

View File

@ -12,7 +12,7 @@ For example, if you offset the 'XZ' plane by 10, the new plane will be parallel
offsetPlane(
plane: PlaneData,
offset: number,
) -> Plane
): Plane
```

View File

@ -1,12 +1,12 @@
---
title: "patternCircular2d"
excerpt: "Repeat a 2-dimensional sketch some number of times along a partial or"
excerpt: "Repeat a 2-dimensional sketch some number of times along a partial or 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."
layout: manual
---
Repeat a 2-dimensional sketch some number of times along a partial or
Repeat a 2-dimensional sketch some number of times along a partial or 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.
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.
```js
patternCircular2d(
@ -16,7 +16,7 @@ patternCircular2d(
arcDegrees: number,
rotateDuplicates: bool,
useOriginal?: bool,
) -> [Sketch]
): [Sketch]
```

View File

@ -1,12 +1,12 @@
---
title: "patternCircular3d"
excerpt: "Repeat a 3-dimensional solid some number of times along a partial or"
excerpt: "Repeat a 3-dimensional solid some number of times along a partial or 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."
layout: manual
---
Repeat a 3-dimensional solid some number of times along a partial or
Repeat a 3-dimensional solid some number of times along a partial or 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.
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.
```js
patternCircular3d(
@ -17,7 +17,7 @@ patternCircular3d(
arcDegrees: number,
rotateDuplicates: bool,
useOriginal?: bool,
) -> [Solid]
): [Solid]
```

View File

@ -1,12 +1,12 @@
---
title: "patternLinear2d"
excerpt: "Repeat a 2-dimensional sketch along some dimension, with a dynamic amount"
excerpt: "Repeat a 2-dimensional sketch along some dimension, with a dynamic amount of distance between each repetition, some specified number of times."
layout: manual
---
Repeat a 2-dimensional sketch along some dimension, with a dynamic amount
Repeat a 2-dimensional sketch along some dimension, with a dynamic amount of distance between each repetition, some specified number of times.
of distance between each repetition, some specified number of times.
```js
patternLinear2d(
@ -15,7 +15,7 @@ patternLinear2d(
distance: number,
axis: [number],
useOriginal?: bool,
) -> [Sketch]
): [Sketch]
```

View File

@ -1,12 +1,10 @@
---
title: "patternLinear3d"
excerpt: "Repeat a 3-dimensional solid along a linear path, with a dynamic amount"
excerpt: "Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times."
layout: manual
---
Repeat a 3-dimensional solid along a linear path, with a dynamic amount
of distance between each repetition, some specified number of times.
Repeat a 3-dimensional solid along a linear path, with a dynamic amount of distance between each repetition, some specified number of times.
///
@ -17,7 +15,7 @@ patternLinear3d(
distance: number,
axis: [number],
useOriginal?: bool,
) -> [Solid]
): [Solid]
```

View File

@ -40,7 +40,7 @@ patternTransform(
instances: integer,
transform: FunctionSource,
useOriginal?: bool,
) -> [Solid]
): [Solid]
```

View File

@ -14,7 +14,7 @@ patternTransform2d(
instances: integer,
transform: FunctionSource,
useOriginal?: bool,
) -> [Sketch]
): [Sketch]
```

View File

@ -11,7 +11,7 @@ Return the value of `pi`. Archimedes constant (π).
**DEPRECATED** use the constant PI
```js
pi() -> number
pi(): number
```
### Tags

View File

@ -1,15 +1,15 @@
---
title: "polar"
excerpt: "Convert polar/sphere (azimuth, elevation, distance) coordinates to"
excerpt: "Convert polar/sphere (azimuth, elevation, distance) coordinates to cartesian (x/y/z grid) coordinates."
layout: manual
---
Convert polar/sphere (azimuth, elevation, distance) coordinates to
Convert polar/sphere (azimuth, elevation, distance) coordinates to cartesian (x/y/z grid) coordinates.
cartesian (x/y/z grid) coordinates.
```js
polar(data: PolarCoordsData) -> [number]
polar(data: PolarCoordsData): [number]
```

View File

@ -13,7 +13,7 @@ polygon(
data: PolygonData,
sketchSurfaceOrGroup: SketchOrSurface,
tag?: TagDeclarator,
) -> Sketch
): Sketch
```

View File

@ -9,7 +9,7 @@ Remove the last element from an array.
Returns a new array with the last element removed.
```js
pop(array: [KclValue]) -> KclValue
pop(array: [KclValue]): KclValue
```

View File

@ -12,7 +12,7 @@ Compute the number to a power.
pow(
num: number,
pow: number,
) -> number
): number
```
### Tags

View File

@ -1,15 +1,15 @@
---
title: "profileStart"
excerpt: "Extract the provided 2-dimensional sketch's profile's origin"
excerpt: "Extract the provided 2-dimensional sketch's profile's origin value."
layout: manual
---
Extract the provided 2-dimensional sketch's profile's origin
Extract the provided 2-dimensional sketch's profile's origin value.
value.
```js
profileStart(sketch: Sketch) -> [number]
profileStart(sketch: Sketch): [number]
```

View File

@ -1,15 +1,15 @@
---
title: "profileStartX"
excerpt: "Extract the provided 2-dimensional sketch's profile's origin's 'x'"
excerpt: "Extract the provided 2-dimensional sketch's profile's origin's 'x' value."
layout: manual
---
Extract the provided 2-dimensional sketch's profile's origin's 'x'
Extract the provided 2-dimensional sketch's profile's origin's 'x' value.
value.
```js
profileStartX(sketch: Sketch) -> number
profileStartX(sketch: Sketch): number
```

View File

@ -1,15 +1,15 @@
---
title: "profileStartY"
excerpt: "Extract the provided 2-dimensional sketch's profile's origin's 'y'"
excerpt: "Extract the provided 2-dimensional sketch's profile's origin's 'y' value."
layout: manual
---
Extract the provided 2-dimensional sketch's profile's origin's 'y'
Extract the provided 2-dimensional sketch's profile's origin's 'y' value.
value.
```js
profileStartY(sketch: Sketch) -> number
profileStartY(sketch: Sketch): number
```

View File

@ -12,7 +12,7 @@ Returns a new array with the element appended.
push(
array: [KclValue],
elem: KclValue,
) -> KclValue
): KclValue
```

View File

@ -1,19 +1,19 @@
---
title: "reduce"
excerpt: "Take a starting value. Then, for each element of an array, calculate the next value,"
excerpt: "Take a starting value. Then, for each element of an array, calculate the next value, using the previous value and the element."
layout: manual
---
Take a starting value. Then, for each element of an array, calculate the next value,
Take a starting value. Then, for each element of an array, calculate the next value, using the previous value and the element.
using the previous value and the element.
```js
reduce(
array: [KclValue],
start: KclValue,
reduceFn: FunctionSource,
) -> KclValue
): KclValue
```

View File

@ -1,18 +1,18 @@
---
title: "rem"
excerpt: "Compute the remainder after dividing `num` by `div`."
excerpt: "Compute the remainder after dividing `num` by `div`. If `num` is negative, the result will be too."
layout: manual
---
Compute the remainder after dividing `num` by `div`.
Compute the remainder after dividing `num` by `div`. If `num` is negative, the result will be too.
If `num` is negative, the result will be too.
```js
rem(
num: number,
divisor: number,
) -> number
): number
```
### Tags

View File

@ -14,7 +14,7 @@ Revolve occurs around a local sketch axis rather than a global axis.
revolve(
data: RevolveData,
sketch: Sketch,
) -> Solid
): Solid
```

View File

@ -31,7 +31,7 @@ rotate(
axis?: [number],
angle?: number,
global?: bool,
) -> Solid
): Solid
```

Some files were not shown because too many files have changed in this diff Show More