difftreelog
ci use hercules
in: master
110 files changed
.envrcdiffbeforeafterboth--- a/.envrc
+++ b/.envrc
@@ -3,6 +3,6 @@
use flake
-if ! diff .github/hooks/pre-commit .git/hooks/pre-commit >/dev/null; then
+if ! test -d .jj && ! diff .github/hooks/pre-commit .git/hooks/pre-commit >/dev/null; then
echo -e "${RED}Hooks are updated, read .github/hooks/pre-commit, and then install it with cp .github/hooks/pre-commit .git/hooks/pre-commit${RESET}"
fi
.github/workflows/checks.yamldiffbeforeafterboth--- a/.github/workflows/checks.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Checks
-on: [ pull_request ]
-jobs:
- tests:
- name: Tests
- uses: ./.github/workflows/test.yaml
- lints:
- name: Lints
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4.1.4
- - uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
- - uses: auguwu/clippy-action@1.3.0
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- permissions:
- checks: write
- formatting:
- name: Formatting
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4.1.4
- - uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
- - uses: actions-rust-lang/rustfmt@v1.1.0
-
.github/workflows/release.yamldiffbeforeafterboth--- a/.github/workflows/release.yaml
+++ /dev/null
@@ -1,140 +0,0 @@
-name: Release
-on:
- push:
- tags: [ 'v*' ]
-jobs:
- tests:
- uses: ./.github/workflows/test.yaml
-
- cargo-release:
- if: !endsWith(github.ref, '-test')
- needs: [ tests ]
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4.1.4
- - name: Install stable toolchain
- uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
- with:
- toolchain: stable
- - run: cargo install cargo-release
- - run: cargo login ${{ secrets.CARGO_TOKEN }}
- - run: cargo release --no-dev-version --skip-push --skip-tag --no-confirm
-
- github-release:
- needs: [ tests ]
- strategy:
- matrix:
- target:
- # Linux build notes:
- # While musl targets are not as supported as gnu, those are most relevant to users,
- # which want to download binaries from github, as glibc has compatibility issues
- # with older distros
-
- # Tier 1
- - i686-pc-windows-msvc
- - x86_64-apple-darwin
- - x86_64-pc-windows-msvc
-
- # Tier 2
- - aarch64-apple-darwin
- - aarch64-unknown-linux-musl
- - i686-unknown-linux-musl
- - x86_64-unknown-linux-musl
- include:
- # Linux
- - target: aarch64-unknown-linux-musl
- os: ubuntu-latest
- bin: jrsonnet
- name: jrsonnet-linux-aarch64
- - target: i686-unknown-linux-musl
- os: ubuntu-latest
- bin: jrsonnet
- name: jrsonnet-linux-i686
- - target: x86_64-unknown-linux-musl
- os: ubuntu-latest
- bin: jrsonnet
- name: jrsonnet-linux-amd64
-
- # Windows
- - target: i686-pc-windows-msvc
- os: windows-latest
- bin: jrsonnet.exe
- name: jrsonnet-windows-i686.exe
- - target: x86_64-pc-windows-msvc
- os: windows-latest
- bin: jrsonnet.exe
- name: jrsonnet-windows-amd64.exe
-
- # Apple
- - target: aarch64-apple-darwin
- os: macOS-latest
- bin: jrsonnet
- name: jrsonnet-darwin-aarch64
- - target: x86_64-apple-darwin
- os: macOS-latest
- bin: jrsonnet
- name: jrsonnet-darwin-amd64
- runs-on: ${{ matrix.os }}
- steps:
- - name: Fetch apt repo updates
- if: ${{ startsWith(matrix.os, 'ubuntu-') }}
- run: sudo apt update
-
- - name: Install stable toolchain
- uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
- with:
- toolchain: stable
- target: ${{ matrix.target }}
-
- - uses: actions/checkout@v4.1.4
-
- - name: Add experimental flags
- if: ${{ endsWith(github.ref, '-test' )}}
- run: echo 'EXPERIMENTAL_FLAGS=--features=experimental' >> $GITHUB_ENV
-
- - name: Linux x86 cross compiler
- if: ${{ startsWith(matrix.target, 'i686-unknown-linux-') }}
- run: sudo apt install gcc-multilib
-
- - name: ARM cross compiler
- if: ${{ startsWith(matrix.target, 'aarch64-unknown-linux-') }}
- uses: actions-rs/cargo@v1
- with:
- command: install
- args: cross
-
- - name: ARM gcc
- if: ${{ startsWith(matrix.target, 'aarch64-unknown-linux-') }}
- run: sudo apt install gcc-aarch64-linux-gnu
-
- - name: Musl gcc
- if: ${{ endsWith(matrix.target, '-musl') }}
- run: sudo apt install musl musl-tools
-
- - name: Run cross build
- if: ${{ startsWith(matrix.target, 'aarch64-unknown-linux-') }}
- shell: bash
- run: cross build --bin=jrsonnet --release --target ${{ matrix.target }} ${{ env.EXPERIMENTAL_FLAGS }}
-
- - name: Run build
- if: ${{ !startsWith(matrix.target, 'aarch64-unknown-linux-') }}
- run: cargo build --bin=jrsonnet --release --target ${{ matrix.target }} ${{ env.EXPERIMENTAL_FLAGS }}
-
- - name: Package
- shell: bash
- run: |
- cd target/${{ matrix.target }}/release
-
- cp ${{ matrix.bin }} ../../../${{ matrix.name }}
- cd -
-
- - name: Generate SHA-256
- run: shasum -a 256 ${{ matrix.name }} > ${{ matrix.name }}.sha256
-
- - name: Publish
- uses: softprops/action-gh-release@v2.0.4
- with:
- draft: true
- files: "jrsonnet*"
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
.github/workflows/test.yamldiffbeforeafterboth--- a/.github/workflows/test.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-name: Test
-on: [ workflow_call ]
-jobs:
- test:
- name: Test
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4.1.4
- - uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
- - run: cargo test --all
- test-stable:
- name: Test on stable
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4.1.4
- - name: Install the latest stable toolchain
- uses: actions-rust-lang/setup-rust-toolchain@v1.8.0
- with:
- toolchain: stable
- - run: cargo test --all
-
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -9,7 +9,7 @@
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
dependencies = [
"cfg-if",
- "getrandom",
+ "getrandom 0.3.4",
"once_cell",
"version_check",
"zerocopy",
@@ -38,11 +38,12 @@
[[package]]
name = "annotate-snippets"
-version = "0.12.11"
+version = "0.12.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "16e4850548ff4a25a77ce3bda7241874e17fb702ea551f0cc62a2dbe052f1272"
+checksum = "74fc7650eedcb2fee505aad48491529e408f0e854c2d9f63eb86c1361b9b3f93"
dependencies = [
"anstyle",
+ "memchr",
"unicode-width",
]
@@ -59,9 +60,9 @@
[[package]]
name = "anstream"
-version = "0.6.21"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
+checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
dependencies = [
"anstyle",
"anstyle-parse",
@@ -74,15 +75,15 @@
[[package]]
name = "anstyle"
-version = "1.0.13"
+version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
+checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
[[package]]
name = "anstyle-parse"
-version = "0.2.7"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
+checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
dependencies = [
"utf8parse",
]
@@ -109,9 +110,9 @@
[[package]]
name = "anyhow"
-version = "1.0.101"
+version = "1.0.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea"
+checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]]
name = "ar_archive_writer"
@@ -142,9 +143,9 @@
[[package]]
name = "bitflags"
-version = "2.10.0"
+version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
+checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
[[package]]
name = "block-buffer"
@@ -167,18 +168,18 @@
[[package]]
name = "bumpalo"
-version = "3.19.1"
+version = "3.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
+checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
dependencies = [
"allocator-api2",
]
[[package]]
name = "cc"
-version = "1.2.55"
+version = "1.2.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b26a0954ae34af09b50f0de26458fa95369a0d478d8236d3f93082b219bd29"
+checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -192,9 +193,9 @@
[[package]]
name = "clap"
-version = "4.5.57"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6899ea499e3fb9305a65d5ebf6e3d2248c5fab291f300ad0a704fbe142eae31a"
+checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
dependencies = [
"clap_builder",
"clap_derive",
@@ -202,9 +203,9 @@
[[package]]
name = "clap_builder"
-version = "4.5.57"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b12c8b680195a62a8364d16b8447b01b6c2c8f9aaf68bee653be34d4245e238"
+checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
dependencies = [
"anstream",
"anstyle",
@@ -214,18 +215,18 @@
[[package]]
name = "clap_complete"
-version = "4.5.65"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "430b4dc2b5e3861848de79627b2bedc9f3342c7da5173a14eaa5d0f8dc18ae5d"
+checksum = "19c9f1dde76b736e3681f28cec9d5a61299cbaae0fce80a68e43724ad56031eb"
dependencies = [
"clap",
]
[[package]]
name = "clap_derive"
-version = "4.5.55"
+version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
+checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
dependencies = [
"heck 0.5.0",
"proc-macro2",
@@ -235,26 +236,25 @@
[[package]]
name = "clap_lex"
-version = "0.7.7"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32"
+checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
[[package]]
name = "colorchoice"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
+checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
[[package]]
name = "console"
-version = "0.15.11"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8"
+checksum = "d64e8af5551369d19cf50138de61f1c42074ab970f74e99be916646777f8fc87"
dependencies = [
"encode_unicode",
"libc",
- "once_cell",
- "windows-sys 0.59.0",
+ "windows-sys 0.61.2",
]
[[package]]
@@ -302,7 +302,7 @@
"bumpalo",
"hashbrown 0.15.5",
"indexmap",
- "rustc-hash 2.1.1",
+ "rustc-hash 2.1.2",
"serde",
"unicode-width",
]
@@ -451,12 +451,25 @@
"cfg-if",
"js-sys",
"libc",
- "r-efi",
+ "r-efi 5.3.0",
"wasip2",
"wasm-bindgen",
]
[[package]]
+name = "getrandom"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "r-efi 6.0.0",
+ "wasip2",
+ "wasip3",
+]
+
+[[package]]
name = "globset"
version = "0.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -538,6 +551,12 @@
]
[[package]]
+name = "id-arena"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
+
+[[package]]
name = "indexmap"
version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -560,9 +579,9 @@
[[package]]
name = "insta"
-version = "1.46.3"
+version = "1.47.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e82db8c87c7f1ccecb34ce0c24399b8a73081427f3c7c50a5d597925356115e4"
+checksum = "7b4a6248eb93a4401ed2f37dfe8ea592d3cf05b7cf4f8efa867b6895af7e094e"
dependencies = [
"console",
"globset",
@@ -589,13 +608,13 @@
[[package]]
name = "itoa"
-version = "1.0.17"
+version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
+checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "jrsonnet"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"clap",
"clap_complete",
@@ -612,7 +631,7 @@
[[package]]
name = "jrsonnet-cli"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"clap",
"jrsonnet-evaluator",
@@ -623,7 +642,7 @@
[[package]]
name = "jrsonnet-deps"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"clap",
"jrsonnet-cli",
@@ -634,7 +653,7 @@
[[package]]
name = "jrsonnet-evaluator"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"annotate-snippets",
"anyhow",
@@ -649,7 +668,7 @@
"jrsonnet-types",
"num-bigint",
"pathdiff",
- "rustc-hash 2.1.1",
+ "rustc-hash 2.1.2",
"rustversion",
"serde",
"stacker",
@@ -660,7 +679,7 @@
[[package]]
name = "jrsonnet-fmt"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"clap",
"hi-doc",
@@ -672,7 +691,7 @@
[[package]]
name = "jrsonnet-formatter"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"dprint-core",
"hi-doc",
@@ -704,16 +723,16 @@
[[package]]
name = "jrsonnet-interner"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"hashbrown 0.16.1",
"jrsonnet-gcmodule",
- "rustc-hash 2.1.1",
+ "rustc-hash 2.1.2",
]
[[package]]
name = "jrsonnet-ir"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"insta",
"jrsonnet-gcmodule",
@@ -724,7 +743,7 @@
[[package]]
name = "jrsonnet-ir-parser"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"insta",
"jrsonnet-gcmodule",
@@ -734,14 +753,14 @@
[[package]]
name = "jrsonnet-lexer"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"logos",
]
[[package]]
name = "jrsonnet-macros"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"proc-macro2",
"quote",
@@ -751,7 +770,7 @@
[[package]]
name = "jrsonnet-peg-parser"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"insta",
"jrsonnet-gcmodule",
@@ -761,7 +780,7 @@
[[package]]
name = "jrsonnet-rowan-parser"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"anyhow",
"drop_bomb",
@@ -776,7 +795,7 @@
[[package]]
name = "jrsonnet-stdlib"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"base64",
"jrsonnet-evaluator",
@@ -787,7 +806,7 @@
"md5",
"num-bigint",
"regex",
- "rustc-hash 2.1.1",
+ "rustc-hash 2.1.2",
"serde",
"serde-saphyr",
"serde_json",
@@ -798,7 +817,7 @@
[[package]]
name = "jrsonnet-types"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"jrsonnet-gcmodule",
"peg",
@@ -806,9 +825,9 @@
[[package]]
name = "js-sys"
-version = "0.3.85"
+version = "0.3.94"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c942ebf8e95485ca0d52d97da7c5a2c387d0e7f0ba4c35e93bfcaee045955b3"
+checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9"
dependencies = [
"once_cell",
"wasm-bindgen",
@@ -816,22 +835,28 @@
[[package]]
name = "keccak"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
+checksum = "cb26cec98cce3a3d96cbb7bced3c4b16e3d13f27ec56dbd62cbc8f39cfb9d653"
dependencies = [
"cpufeatures",
]
[[package]]
+name = "leb128fmt"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
+
+[[package]]
name = "libc"
-version = "0.2.180"
+version = "0.2.184"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
+checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
[[package]]
name = "libjsonnet"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
dependencies = [
"jrsonnet-evaluator",
"jrsonnet-gcmodule",
@@ -842,9 +867,9 @@
[[package]]
name = "linux-raw-sys"
-version = "0.11.0"
+version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
+checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
[[package]]
name = "log"
@@ -970,9 +995,9 @@
[[package]]
name = "once_cell"
-version = "1.21.3"
+version = "1.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
+checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
[[package]]
name = "once_cell_polyfill"
@@ -1047,6 +1072,16 @@
]
[[package]]
+name = "prettyplease"
+version = "0.2.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
+dependencies = [
+ "proc-macro2",
+ "syn",
+]
+
+[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1080,9 +1115,9 @@
[[package]]
name = "quote"
-version = "1.0.44"
+version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
+checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [
"proc-macro2",
]
@@ -1094,6 +1129,12 @@
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
[[package]]
+name = "r-efi"
+version = "6.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
+
+[[package]]
name = "rand"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1119,7 +1160,7 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
dependencies = [
- "getrandom",
+ "getrandom 0.3.4",
]
[[package]]
@@ -1165,9 +1206,9 @@
[[package]]
name = "regex-syntax"
-version = "0.8.9"
+version = "0.8.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c"
+checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
[[package]]
name = "rowan"
@@ -1189,15 +1230,15 @@
[[package]]
name = "rustc-hash"
-version = "2.1.1"
+version = "2.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
[[package]]
name = "rustix"
-version = "1.1.3"
+version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
+checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
dependencies = [
"bitflags",
"errno",
@@ -1233,6 +1274,12 @@
]
[[package]]
+name = "semver"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+
+[[package]]
name = "serde"
version = "1.0.228"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1252,7 +1299,7 @@
"annotate-snippets",
"base64",
"encoding_rs_io",
- "getrandom",
+ "getrandom 0.3.4",
"nohash-hasher",
"num-traits",
"regex",
@@ -1401,9 +1448,9 @@
[[package]]
name = "syn"
-version = "2.0.114"
+version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
+checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [
"proc-macro2",
"quote",
@@ -1423,12 +1470,12 @@
[[package]]
name = "tempfile"
-version = "3.24.0"
+version = "3.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c"
+checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
dependencies = [
"fastrand",
- "getrandom",
+ "getrandom 0.4.2",
"once_cell",
"rustix",
"windows-sys 0.61.2",
@@ -1474,9 +1521,9 @@
[[package]]
name = "tree-sitter"
-version = "0.26.5"
+version = "0.26.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12987371f54efc9b9306a20dc87ed5aaee9f320c8a8b115e28515c412b2efe39"
+checksum = "887bd495d0582c5e3e0d8ece2233666169fa56a9644d172fc22ad179ab2d0538"
dependencies = [
"cc",
"regex",
@@ -1488,9 +1535,9 @@
[[package]]
name = "tree-sitter-highlight"
-version = "0.26.5"
+version = "0.26.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b688407049ea1b55a7e872f138947d22389118b9c4d09b459cb34ca205e41c0"
+checksum = "ccde2b54a34b58313e69c02496a2a9ad38d59af79b196b5e1df063431752a7e0"
dependencies = [
"regex",
"streaming-iterator",
@@ -1524,9 +1571,9 @@
[[package]]
name = "unicode-ident"
-version = "1.0.22"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "unicode-width"
@@ -1535,6 +1582,12 @@
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
[[package]]
+name = "unicode-xid"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
+
+[[package]]
name = "utf8parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1575,10 +1628,19 @@
]
[[package]]
+name = "wasip3"
+version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
+dependencies = [
+ "wit-bindgen",
+]
+
+[[package]]
name = "wasm-bindgen"
-version = "0.2.108"
+version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64024a30ec1e37399cf85a7ffefebdb72205ca1c972291c51512360d90bd8566"
+checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0"
dependencies = [
"cfg-if",
"once_cell",
@@ -1589,9 +1651,9 @@
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.108"
+version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "008b239d9c740232e71bd39e8ef6429d27097518b6b30bdf9086833bd5b6d608"
+checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -1599,9 +1661,9 @@
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.108"
+version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5256bae2d58f54820e6490f9839c49780dff84c65aeab9e772f15d5f0e913a55"
+checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -1612,14 +1674,48 @@
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.108"
+version = "0.2.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f01b580c9ac74c8d8f0c0e4afb04eeef2acf145458e52c03845ee9cd23e3d12"
+checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b"
dependencies = [
"unicode-ident",
]
[[package]]
+name = "wasm-encoder"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
+dependencies = [
+ "leb128fmt",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasm-metadata"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
+dependencies = [
+ "anyhow",
+ "indexmap",
+ "wasm-encoder",
+ "wasmparser",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
+dependencies = [
+ "bitflags",
+ "hashbrown 0.15.5",
+ "indexmap",
+ "semver",
+]
+
+[[package]]
name = "winapi-util"
version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1721,6 +1817,88 @@
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
+dependencies = [
+ "wit-bindgen-rust-macro",
+]
+
+[[package]]
+name = "wit-bindgen-core"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
+dependencies = [
+ "anyhow",
+ "heck 0.5.0",
+ "wit-parser",
+]
+
+[[package]]
+name = "wit-bindgen-rust"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
+dependencies = [
+ "anyhow",
+ "heck 0.5.0",
+ "indexmap",
+ "prettyplease",
+ "syn",
+ "wasm-metadata",
+ "wit-bindgen-core",
+ "wit-component",
+]
+
+[[package]]
+name = "wit-bindgen-rust-macro"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
+dependencies = [
+ "anyhow",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wit-bindgen-core",
+ "wit-bindgen-rust",
+]
+
+[[package]]
+name = "wit-component"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
+dependencies = [
+ "anyhow",
+ "bitflags",
+ "indexmap",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "wasm-encoder",
+ "wasm-metadata",
+ "wasmparser",
+ "wit-parser",
+]
+
+[[package]]
+name = "wit-parser"
+version = "0.244.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "indexmap",
+ "log",
+ "semver",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "unicode-xid",
+ "wasmparser",
+]
[[package]]
name = "xshell"
@@ -1759,18 +1937,18 @@
[[package]]
name = "zerocopy"
-version = "0.8.39"
+version = "0.8.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a"
+checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.39"
+version = "0.8.48"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517"
+checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
dependencies = [
"proc-macro2",
"quote",
@@ -1779,6 +1957,6 @@
[[package]]
name = "zmij"
-version = "1.0.19"
+version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ff05f8caa9038894637571ae6b9e29466c1f4f829d26c9b28f869a29cbe3445"
+checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
Cargo.tomldiffbeforeafterboth--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,20 +8,20 @@
edition = "2021"
license = "MIT"
repository = "https://github.com/CertainLach/jrsonnet"
-version = "0.5.0-pre97"
+version = "0.5.0-pre98"
[workspace.dependencies]
-jrsonnet-evaluator = { path = "./crates/jrsonnet-evaluator", version = "0.5.0-pre97" }
-jrsonnet-macros = { path = "./crates/jrsonnet-macros", version = "0.5.0-pre97" }
-jrsonnet-ir = { path = "./crates/jrsonnet-ir", version = "0.5.0-pre97" }
-jrsonnet-ir-parser = { path = "./crates/jrsonnet-ir-parser", version = "0.5.0-pre97" }
-jrsonnet-peg-parser = { path = "./crates/jrsonnet-peg-parser", version = "0.5.0-pre97" }
-jrsonnet-rowan-parser = { path = "./crates/jrsonnet-rowan-parser", version = "0.5.0-pre97" }
-jrsonnet-interner = { path = "./crates/jrsonnet-interner", version = "0.5.0-pre97" }
-jrsonnet-stdlib = { path = "./crates/jrsonnet-stdlib", version = "0.5.0-pre97" }
-jrsonnet-cli = { path = "./crates/jrsonnet-cli", version = "0.5.0-pre97" }
-jrsonnet-types = { path = "./crates/jrsonnet-types", version = "0.5.0-pre97" }
-jrsonnet-formatter = { path = "./crates/jrsonnet-formatter", version = "0.5.0-pre97" }
+jrsonnet-evaluator = { path = "./crates/jrsonnet-evaluator", version = "0.5.0-pre98" }
+jrsonnet-macros = { path = "./crates/jrsonnet-macros", version = "0.5.0-pre98" }
+jrsonnet-ir = { path = "./crates/jrsonnet-ir", version = "0.5.0-pre98" }
+jrsonnet-ir-parser = { path = "./crates/jrsonnet-ir-parser", version = "0.5.0-pre98" }
+jrsonnet-peg-parser = { path = "./crates/jrsonnet-peg-parser", version = "0.5.0-pre98" }
+jrsonnet-rowan-parser = { path = "./crates/jrsonnet-rowan-parser", version = "0.5.0-pre98" }
+jrsonnet-interner = { path = "./crates/jrsonnet-interner", version = "0.5.0-pre98" }
+jrsonnet-stdlib = { path = "./crates/jrsonnet-stdlib", version = "0.5.0-pre98" }
+jrsonnet-cli = { path = "./crates/jrsonnet-cli", version = "0.5.0-pre98" }
+jrsonnet-types = { path = "./crates/jrsonnet-types", version = "0.5.0-pre98" }
+jrsonnet-formatter = { path = "./crates/jrsonnet-formatter", version = "0.5.0-pre98" }
jrsonnet-gcmodule = { version = "0.4.2" }
# Diagnostics.
# hi-doc is my library, which handles text formatting very well, but isn't polished enough yet
bindings/jsonnet/Cargo.tomldiffbeforeafterboth--- a/bindings/jsonnet/Cargo.toml
+++ b/bindings/jsonnet/Cargo.toml
@@ -39,5 +39,8 @@
interop-threading = []
experimental = ["exp-preserve-order", "exp-destruct"]
-exp-preserve-order = ["jrsonnet-evaluator/exp-preserve-order", "jrsonnet-stdlib/exp-preserve-order"]
+exp-preserve-order = [
+ "jrsonnet-evaluator/exp-preserve-order",
+ "jrsonnet-stdlib/exp-preserve-order",
+]
exp-destruct = ["jrsonnet-evaluator/exp-destruct"]
bindings/jsonnet/src/import.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/import.rs
+++ b/bindings/jsonnet/src/import.rs
@@ -5,16 +5,15 @@
cell::RefCell,
collections::HashMap,
env::current_dir,
- ffi::{c_void, CStr, CString},
+ ffi::{CStr, CString, c_void},
os::raw::{c_char, c_int},
path::PathBuf,
ptr::null_mut,
};
use jrsonnet_evaluator::{
- bail,
+ AsPathLike, ImportResolver, ResolvePath, bail,
error::{ErrorKind::*, Result},
- AsPathLike, ImportResolver, ResolvePath,
};
use jrsonnet_gcmodule::Acyclic;
use jrsonnet_ir::{SourceDirectory, SourceFile, SourcePath};
bindings/jsonnet/src/lib.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/lib.rs
+++ b/bindings/jsonnet/src/lib.rs
@@ -21,14 +21,13 @@
};
use jrsonnet_evaluator::{
- apply_tla, bail,
+ AsPathLike, FileImportResolver, IStr, ImportResolver, Result, State, Val, apply_tla, bail,
gc::WithCapacityExt as _,
manifest::{JsonFormat, ManifestFormat, ToStringFormat},
rustc_hash::FxHashMap,
stack::set_stack_depth_limit,
tla::TlaArg,
trace::{CompactFormat, PathResolver, TraceFormat},
- AsPathLike, FileImportResolver, IStr, ImportResolver, Result, State, Val,
};
use jrsonnet_gcmodule::Acyclic;
use jrsonnet_ir::SourcePath;
bindings/jsonnet/src/native.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/native.rs
+++ b/bindings/jsonnet/src/native.rs
@@ -1,13 +1,13 @@
use std::{
- ffi::{c_void, CStr},
+ ffi::{CStr, c_void},
os::raw::{c_char, c_int},
};
use jrsonnet_evaluator::{
+ IStr, Val,
error::{Error, ErrorKind},
function::builtin::{NativeCallback, NativeCallbackHandler},
typed::FromUntyped as _,
- IStr, Val,
};
use crate::VM;
bindings/jsonnet/src/val_make.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/val_make.rs
+++ b/bindings/jsonnet/src/val_make.rs
@@ -6,8 +6,8 @@
};
use jrsonnet_evaluator::{
+ ObjValue, Val,
val::{ArrValue, NumValue},
- ObjValue, Val,
};
use crate::VM;
bindings/jsonnet/src/val_modify.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/val_modify.rs
+++ b/bindings/jsonnet/src/val_modify.rs
@@ -4,7 +4,7 @@
use std::{ffi::CStr, os::raw::c_char};
-use jrsonnet_evaluator::{val::ArrValue, Thunk, Val};
+use jrsonnet_evaluator::{Thunk, Val, val::ArrValue};
use crate::VM;
bindings/jsonnet/src/vars_tlas.rsdiffbeforeafterboth--- a/bindings/jsonnet/src/vars_tlas.rs
+++ b/bindings/jsonnet/src/vars_tlas.rs
@@ -2,8 +2,7 @@
use std::{ffi::CStr, os::raw::c_char};
-use jrsonnet_evaluator::tla::TlaArg;
-use jrsonnet_evaluator::IStr;
+use jrsonnet_evaluator::{IStr, tla::TlaArg};
use crate::VM;
cmds/jrsonnet-deps/src/main.rsdiffbeforeafterboth--- a/cmds/jrsonnet-deps/src/main.rs
+++ b/cmds/jrsonnet-deps/src/main.rs
@@ -1,12 +1,10 @@
-use std::collections::BTreeSet;
-use std::process::exit;
+use std::{collections::BTreeSet, process::exit};
use clap::Parser;
+use jrsonnet_cli::MiscOpts;
use jrsonnet_evaluator::{FileImportResolver, ImportResolver};
-use jrsonnet_ir::{visit::Visitor, IStr, Source, SourcePath};
+use jrsonnet_ir::{IStr, Source, SourcePath, visit::Visitor};
use jrsonnet_ir_parser::ParserSettings;
-
-use jrsonnet_cli::MiscOpts;
#[derive(Parser)]
struct Opts {
cmds/jrsonnet-fmt/src/main.rsdiffbeforeafterboth--- a/cmds/jrsonnet-fmt/src/main.rs
+++ b/cmds/jrsonnet-fmt/src/main.rs
@@ -6,7 +6,7 @@
};
use clap::Parser;
-use jrsonnet_formatter::{format, FormatOptions};
+use jrsonnet_formatter::{FormatOptions, format};
#[derive(Parser)]
#[allow(clippy::struct_excessive_bools)]
@@ -51,8 +51,12 @@
}
fn main_result() -> Result<(), Error> {
- eprintln!("jrsonnet-fmt is a prototype of a jsonnet code formatter, do not expect it to produce meaningful results right now.");
- eprintln!("It is not expected for its output to match other implementations, it will be completly separate implementation with maybe different name.");
+ eprintln!(
+ "jrsonnet-fmt is a prototype of a jsonnet code formatter, do not expect it to produce meaningful results right now."
+ );
+ eprintln!(
+ "It is not expected for its output to match other implementations, it will be completly separate implementation with maybe different name."
+ );
let mut opts = Opts::parse();
let input = if opts.exec {
if opts.in_place {
cmds/jrsonnet/Cargo.tomldiffbeforeafterboth--- a/cmds/jrsonnet/Cargo.toml
+++ b/cmds/jrsonnet/Cargo.toml
@@ -12,19 +12,19 @@
[features]
experimental = [
- "exp-preserve-order",
- "exp-destruct",
- "exp-null-coaelse",
- "exp-object-iteration",
- "exp-bigint",
- "exp-apply",
+ "exp-preserve-order",
+ "exp-destruct",
+ "exp-null-coaelse",
+ "exp-object-iteration",
+ "exp-bigint",
+ "exp-apply",
]
# Use mimalloc as allocator
mimalloc = ["mimallocator"]
# Experimental feature, which allows to preserve order of object fields
exp-preserve-order = [
- "jrsonnet-evaluator/exp-preserve-order",
- "jrsonnet-cli/exp-preserve-order",
+ "jrsonnet-evaluator/exp-preserve-order",
+ "jrsonnet-cli/exp-preserve-order",
]
# Destructuring of locals
exp-destruct = ["jrsonnet-evaluator/exp-destruct"]
@@ -36,9 +36,9 @@
exp-regex = ["jrsonnet-cli/exp-regex"]
# obj?.field, obj?.['field']
exp-null-coaelse = [
- "jrsonnet-evaluator/exp-null-coaelse",
- "jrsonnet-ir/exp-null-coaelse",
- "jrsonnet-cli/exp-null-coaelse",
+ "jrsonnet-evaluator/exp-null-coaelse",
+ "jrsonnet-ir/exp-null-coaelse",
+ "jrsonnet-cli/exp-null-coaelse",
]
# --exp-apply
exp-apply = []
cmds/jrsonnet/src/main.rsdiffbeforeafterboth--- a/cmds/jrsonnet/src/main.rs
+++ b/cmds/jrsonnet/src/main.rs
@@ -1,5 +1,5 @@
use std::{
- fs::{create_dir_all, File},
+ fs::{File, create_dir_all},
io::{Read, Write},
};
@@ -7,9 +7,8 @@
use clap_complete::Shell;
use jrsonnet_cli::{GcOpts, ManifestOpts, MiscOpts, OutputOpts, StdOpts, TlaOpts, TraceOpts};
use jrsonnet_evaluator::{
- apply_tla, bail,
+ ResultExt, State, Val, apply_tla, bail,
error::{Error as JrError, ErrorKind},
- ResultExt, State, Val,
};
use jrsonnet_ir::{SourceDefaultIgnoreJpath, SourcePath};
crates/jrsonnet-cli/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-cli/Cargo.toml
+++ b/crates/jrsonnet-cli/Cargo.toml
@@ -12,20 +12,15 @@
[features]
exp-preserve-order = [
- "jrsonnet-evaluator/exp-preserve-order",
- "jrsonnet-stdlib/exp-preserve-order",
-]
-exp-bigint = [
- "jrsonnet-evaluator/exp-bigint",
- "jrsonnet-stdlib/exp-bigint",
+ "jrsonnet-evaluator/exp-preserve-order",
+ "jrsonnet-stdlib/exp-preserve-order",
]
+exp-bigint = ["jrsonnet-evaluator/exp-bigint", "jrsonnet-stdlib/exp-bigint"]
exp-null-coaelse = [
- "jrsonnet-evaluator/exp-null-coaelse",
- "jrsonnet-stdlib/exp-null-coaelse",
+ "jrsonnet-evaluator/exp-null-coaelse",
+ "jrsonnet-stdlib/exp-null-coaelse",
]
-exp-regex = [
- "jrsonnet-stdlib/exp-regex",
-]
+exp-regex = ["jrsonnet-stdlib/exp-regex"]
[dependencies]
jrsonnet-evaluator = { workspace = true, features = ["explaining-traces"] }
crates/jrsonnet-cli/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-cli/src/lib.rs
+++ b/crates/jrsonnet-cli/src/lib.rs
@@ -7,10 +7,10 @@
use clap::Parser;
use jrsonnet_evaluator::{
- stack::{limit_stack_depth, StackDepthLimitOverrideGuard},
FileImportResolver,
+ stack::{StackDepthLimitOverrideGuard, limit_stack_depth},
};
-use jrsonnet_gcmodule::{with_thread_object_space, ObjectSpace};
+use jrsonnet_gcmodule::{ObjectSpace, with_thread_object_space};
pub use manifest::*;
pub use stdlib::*;
pub use tla::*;
crates/jrsonnet-cli/src/stdlib.rsdiffbeforeafterboth--- a/crates/jrsonnet-cli/src/stdlib.rs
+++ b/crates/jrsonnet-cli/src/stdlib.rs
@@ -1,8 +1,7 @@
use std::str::FromStr;
use clap::Parser;
-use jrsonnet_evaluator::tla::TlaArg;
-use jrsonnet_evaluator::{trace::PathResolver, Result};
+use jrsonnet_evaluator::{Result, tla::TlaArg, trace::PathResolver};
use jrsonnet_stdlib::ContextInitializer;
#[derive(Clone)]
crates/jrsonnet-cli/src/tla.rsdiffbeforeafterboth--- a/crates/jrsonnet-cli/src/tla.rs
+++ b/crates/jrsonnet-cli/src/tla.rs
@@ -1,6 +1,7 @@
use clap::Parser;
-use jrsonnet_evaluator::tla::TlaArg;
-use jrsonnet_evaluator::{error::Result, gc::WithCapacityExt as _, rustc_hash::FxHashMap, IStr};
+use jrsonnet_evaluator::{
+ IStr, error::Result, gc::WithCapacityExt as _, rustc_hash::FxHashMap, tla::TlaArg,
+};
use crate::{ExtFile, ExtStr};
crates/jrsonnet-evaluator/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-evaluator/Cargo.toml
+++ b/crates/jrsonnet-evaluator/Cargo.toml
@@ -26,13 +26,19 @@
# Allows to preserve field order in objects
exp-preserve-order = []
# Implements field destructuring
-exp-destruct = ["jrsonnet-peg-parser?/exp-destruct", "jrsonnet-ir-parser?/exp-destruct"]
+exp-destruct = [
+ "jrsonnet-peg-parser?/exp-destruct",
+ "jrsonnet-ir-parser?/exp-destruct",
+]
# Iteration over objects yields [key, value] elements
exp-object-iteration = []
# Bigint type
exp-bigint = ["num-bigint", "jrsonnet-types/exp-bigint"]
# obj?.field, obj?.['field']
-exp-null-coaelse = ["jrsonnet-peg-parser?/exp-null-coaelse", "jrsonnet-ir-parser?/exp-null-coaelse"]
+exp-null-coaelse = [
+ "jrsonnet-peg-parser?/exp-null-coaelse",
+ "jrsonnet-ir-parser?/exp-null-coaelse",
+]
[dependencies]
jrsonnet-interner.workspace = true
@@ -63,7 +69,13 @@
num-bigint = { workspace = true, features = ["serde"], optional = true }
stacker = "0.1.23"
-educe = { version = "0.6.0", default-features = false, features = ["Clone", "Debug", "Eq", "Hash", "PartialEq"] }
+educe = { version = "0.6.0", default-features = false, features = [
+ "Clone",
+ "Debug",
+ "Eq",
+ "Hash",
+ "PartialEq",
+] }
[build-dependencies]
rustversion = "1.0.22"
crates/jrsonnet-evaluator/src/arr/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/arr/mod.rs
+++ b/crates/jrsonnet-evaluator/src/arr/mod.rs
@@ -5,11 +5,11 @@
rc::Rc,
};
-use jrsonnet_gcmodule::{cc_dyn, Cc};
+use jrsonnet_gcmodule::{Cc, cc_dyn};
use jrsonnet_interner::IBytes;
use jrsonnet_ir::Expr;
-use crate::{function::NativeFn, typed::IntoUntyped, Context, Result, Thunk, Val};
+use crate::{Context, Result, Thunk, Val, function::NativeFn, typed::IntoUntyped};
mod spec;
pub use spec::{ArrayLike, *};
crates/jrsonnet-evaluator/src/arr/spec.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/arr/spec.rs
+++ b/crates/jrsonnet-evaluator/src/arr/spec.rs
@@ -1,18 +1,17 @@
-use std::rc::Rc;
-use std::{any::Any, cell::RefCell, fmt::Debug, mem::replace};
+use std::{any::Any, cell::RefCell, fmt::Debug, mem::replace, rc::Rc};
use jrsonnet_gcmodule::{Cc, Trace};
use jrsonnet_interner::{IBytes, IStr};
use jrsonnet_ir::Expr;
use super::ArrValue;
-use crate::function::NativeFn;
use crate::{
+ Context, Error, ObjValue, Result, Thunk, Val,
error::ErrorKind::InfiniteRecursionDetected,
evaluate,
+ function::NativeFn,
typed::{IntoUntyped, Typed},
val::ThunkValue,
- Context, Error, ObjValue, Result, Thunk, Val,
};
pub trait ArrayLike: Any + Trace + Debug {
crates/jrsonnet-evaluator/src/async_import.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/async_import.rs
+++ b/crates/jrsonnet-evaluator/src/async_import.rs
@@ -1,9 +1,7 @@
-use std::rc::Rc;
-use std::{any::Any, cell::RefCell, future::Future};
+use std::{any::Any, cell::RefCell, future::Future, rc::Rc};
use jrsonnet_gcmodule::Acyclic;
-use jrsonnet_ir::visit::Visitor;
-use jrsonnet_ir::{IStr, Source, SourcePath};
+use jrsonnet_ir::{IStr, Source, SourcePath, visit::Visitor};
use rustc_hash::FxHashMap;
use crate::{AsPathLike, FileData, ImportResolver, ResolvePathOwned, State};
crates/jrsonnet-evaluator/src/ctx.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/ctx.rs
+++ b/crates/jrsonnet-evaluator/src/ctx.rs
@@ -6,8 +6,8 @@
use rustc_hash::FxHashMap;
use crate::{
- error::ErrorKind::*, gc::WithCapacityExt as _, map::LayeredHashMap, ObjValue, Pending, Result,
- SupThis, Thunk, Val,
+ ObjValue, Pending, Result, SupThis, Thunk, Val, error::ErrorKind::*, gc::WithCapacityExt as _,
+ map::LayeredHashMap,
};
/// Context keeps information about current lexical code location
///
crates/jrsonnet-evaluator/src/dynamic.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/dynamic.rs
+++ b/crates/jrsonnet-evaluator/src/dynamic.rs
@@ -3,7 +3,7 @@
use educe::Educe;
use jrsonnet_gcmodule::{Cc, Trace};
-use crate::{bail, error::ErrorKind::InfiniteRecursionDetected, val::ThunkValue, Result};
+use crate::{Result, bail, error::ErrorKind::InfiniteRecursionDetected, val::ThunkValue};
#[derive(Trace, Educe)]
#[educe(Clone)]
crates/jrsonnet-evaluator/src/error.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/error.rs
+++ b/crates/jrsonnet-evaluator/src/error.rs
@@ -7,11 +7,11 @@
use thiserror::Error;
use crate::{
+ ObjValue, ResolvePathOwned,
function::{CallLocation, FunctionSignature, ParamName},
stdlib::format::FormatError,
typed::TypeLocError,
val::ConvertNumValueError,
- ObjValue, ResolvePathOwned,
};
#[derive(Debug, Clone)]
@@ -78,7 +78,10 @@
if conf < 0.8 {
continue;
}
- assert!(field.as_str() != key.as_str(), "looks like string pooling failure, please write any info regarding this crash to https://github.com/CertainLach/jrsonnet/issues/113, thanks!");
+ assert!(
+ field.as_str() != key.as_str(),
+ "looks like string pooling failure, please write any info regarding this crash to https://github.com/CertainLach/jrsonnet/issues/113, thanks!"
+ );
heap.push((conf, field));
}
@@ -271,11 +274,11 @@
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- writeln!(f, "{}", self.0 .0)?;
- for el in &self.0 .1 .0 {
+ writeln!(f, "{}", self.0.0)?;
+ for el in &self.0.1.0 {
write!(f, "\t{}", el.desc)?;
if let Some(loc) = &el.location {
- write!(f, "at {}", loc.0 .0 .0)?;
+ write!(f, "at {}", loc.0.0.0)?;
loc.0.map_source_locations(&[loc.1, loc.2]);
}
writeln!(f)?;
crates/jrsonnet-evaluator/src/evaluate/destructure.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate/destructure.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate/destructure.rs
@@ -3,15 +3,14 @@
use jrsonnet_interner::IStr;
use jrsonnet_ir::{BindSpec, Destruct};
+#[cfg(feature = "exp-preserve-order")]
+use crate::evaluate;
use crate::{
- bail,
+ Context, Pending, Thunk, Val, bail,
error::{ErrorKind::*, Result},
- evaluate_method, evaluate_named_param, Context, Pending, Thunk, Val,
+ evaluate_method, evaluate_named_param,
};
-#[cfg(feature = "exp-preserve-order")]
-use crate::evaluate;
-
#[allow(clippy::too_many_lines)]
#[allow(unused_variables)]
pub fn destruct<H: BuildHasher>(
@@ -107,10 +106,11 @@
}
#[cfg(feature = "exp-destruct")]
Destruct::Object { fields, rest } => {
- use crate::ObjValueBuilder;
use jrsonnet_ir::DestructRest;
use rustc_hash::FxHashSet;
+ use crate::ObjValueBuilder;
+
let captured_fields: FxHashSet<_> = fields.iter().map(|f| f.0.clone()).collect();
let field_names: Vec<_> = fields
.iter()
crates/jrsonnet-evaluator/src/evaluate/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate/mod.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate/mod.rs
@@ -3,27 +3,28 @@
use jrsonnet_gcmodule::{Cc, Trace};
use jrsonnet_interner::IStr;
use jrsonnet_ir::{
- function::ParamName, ArgsDesc, AssertStmt, BinaryOpType, BindSpec, CompSpec, Expr, ExprParams,
- FieldMember, FieldName, ForSpecData, IfSpecData, ImportKind, LiteralType, ObjBody, ObjMembers,
- Spanned,
+ ArgsDesc, AssertStmt, BinaryOpType, BindSpec, CompSpec, Expr, ExprParams, FieldMember,
+ FieldName, ForSpecData, IfSpecData, ImportKind, LiteralType, ObjBody, ObjMembers, Spanned,
+ function::ParamName,
};
use jrsonnet_types::ValType;
use rustc_hash::FxHashMap;
use self::destructure::destruct;
use crate::{
+ Context, Error, ObjValue, ObjValueBuilder, ObjectAssertion, Pending, Result, ResultExt,
+ SupThis, Unbound, Val,
arr::ArrValue,
bail,
destructure::evaluate_dest,
- error::{suggest_object_fields, ErrorKind::*},
+ error::{ErrorKind::*, suggest_object_fields},
evaluate::operator::{evaluate_binary_op_special, evaluate_unary_op},
function::{CallLocation, FuncDesc, FuncVal},
gc::WithCapacityExt as _,
in_frame,
typed::{FromUntyped, IntoUntyped as _, Typed},
val::{CachedUnbound, IndexableVal, NumValue, StrValue, Thunk},
- with_state, Context, Error, ObjValue, ObjValueBuilder, ObjectAssertion, Pending, Result,
- ResultExt, SupThis, Unbound, Val,
+ with_state,
};
pub mod destructure;
pub mod operator;
crates/jrsonnet-evaluator/src/evaluate/operator.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/evaluate/operator.rs
+++ b/crates/jrsonnet-evaluator/src/evaluate/operator.rs
@@ -3,14 +3,14 @@
use jrsonnet_ir::{BinaryOpType, Expr, UnaryOpType};
use crate::{
+ Context, Result, Val,
arr::ArrValue,
bail,
error::ErrorKind::*,
evaluate,
stdlib::std_format,
typed::IntoUntyped as _,
- val::{equals, StrValue},
- Context, Result, Val,
+ val::{StrValue, equals},
};
pub fn evaluate_unary_op(op: UnaryOpType, b: &Val) -> Result<Val> {
crates/jrsonnet-evaluator/src/function/builtin.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/builtin.rs
+++ b/crates/jrsonnet-evaluator/src/function/builtin.rs
@@ -1,6 +1,6 @@
use std::any::Any;
-use jrsonnet_gcmodule::{cc_dyn, Trace, TraceBox};
+use jrsonnet_gcmodule::{Trace, TraceBox, cc_dyn};
use jrsonnet_ir::function::{FunctionSignature, ParamDefault, ParamName, ParamParse};
use super::CallLocation;
crates/jrsonnet-evaluator/src/function/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/mod.rs
+++ b/crates/jrsonnet-evaluator/src/function/mod.rs
@@ -9,11 +9,11 @@
use self::{
builtin::{Builtin, StaticBuiltin},
parse::{parse_builtin_call, parse_default_function_call, parse_function_call},
- prepared::{parse_prepared_builtin_call, parse_prepared_function_call, PreparedCall},
+ prepared::{PreparedCall, parse_prepared_builtin_call, parse_prepared_function_call},
};
use crate::{
- bail, error::ErrorKind::*, evaluate, evaluate_trivial, function::builtin::BuiltinFunc, Context,
- Result, Thunk, Val,
+ Context, Result, Thunk, Val, bail, error::ErrorKind::*, evaluate, evaluate_trivial,
+ function::builtin::BuiltinFunc,
};
pub mod builtin;
@@ -21,10 +21,9 @@
mod parse;
mod prepared;
+pub use jrsonnet_ir::function::*;
pub use native::NativeFn;
pub use prepared::PreparedFuncVal;
-
-pub use jrsonnet_ir::function::*;
/// Function callsite location.
/// Either from other jsonnet code, specified by expression location, or from native (without location).
crates/jrsonnet-evaluator/src/function/native.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/native.rs
+++ b/crates/jrsonnet-evaluator/src/function/native.rs
@@ -1,14 +1,14 @@
use std::marker::PhantomData;
use jrsonnet_gcmodule::Trace;
+use jrsonnet_types::{ComplexValType, ValType};
use super::PreparedFuncVal;
use crate::{
+ CallLocation, Result, Val,
function::FuncVal,
typed::{FromUntyped, IntoUntyped, Typed},
- CallLocation, Result, Val,
};
-use jrsonnet_types::{ComplexValType, ValType};
#[derive(Debug, Trace, Clone)]
pub struct NativeFn<D: 'static>(pub(crate) PreparedFuncVal, PhantomData<D>);
crates/jrsonnet-evaluator/src/function/parse.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/parse.rs
+++ b/crates/jrsonnet-evaluator/src/function/parse.rs
@@ -1,18 +1,17 @@
use std::rc::Rc;
use jrsonnet_ir::{
+ ArgsDesc, Expr, ExprParams,
function::{FunctionSignature, ParamName},
- ArgsDesc, Expr, ExprParams,
};
use rustc_hash::FxHashMap;
use crate::{
- bail,
+ Context, Pending, Thunk, Val, bail,
destructure::destruct,
error::{ErrorKind::*, Result},
evaluate, evaluate_named_param,
gc::WithCapacityExt as _,
- Context, Pending, Thunk, Val,
};
fn eval_arg(ctx: Context, arg: &Rc<Expr>, tailstrict: bool) -> Result<Thunk<Val>> {
crates/jrsonnet-evaluator/src/function/prepared.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/function/prepared.rs
+++ b/crates/jrsonnet-evaluator/src/function/prepared.rs
@@ -1,16 +1,14 @@
use std::rc::Rc;
use jrsonnet_gcmodule::{Acyclic, Trace};
-use jrsonnet_ir::function::FunctionSignature;
-use jrsonnet_ir::{ExprParams, IStr};
+use jrsonnet_ir::{ExprParams, IStr, function::FunctionSignature};
use rustc_hash::{FxHashMap, FxHashSet};
-
-use crate::destructure::destruct;
-use crate::gc::WithCapacityExt;
-use crate::{bail, error::ErrorKind::*, Result};
-use crate::{evaluate_named_param, Context, ContextBuilder, Pending, Thunk, Val};
use super::{CallLocation, FuncVal};
+use crate::{
+ Context, ContextBuilder, Pending, Result, Thunk, Val, bail, destructure::destruct,
+ error::ErrorKind::*, evaluate_named_param, gc::WithCapacityExt,
+};
#[derive(Debug, Trace, Clone)]
pub struct PreparedFuncVal {
crates/jrsonnet-evaluator/src/integrations/serde.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/integrations/serde.rs
+++ b/crates/jrsonnet-evaluator/src/integrations/serde.rs
@@ -2,17 +2,17 @@
use jrsonnet_interner::IStr;
use serde::{
+ Deserialize, Serialize, Serializer,
de::{self, Visitor},
ser::{
Error, SerializeMap, SerializeSeq, SerializeStruct, SerializeStructVariant, SerializeTuple,
SerializeTupleStruct, SerializeTupleVariant,
},
- Deserialize, Serialize, Serializer,
};
use crate::{
- arr::ArrValue, in_description_frame, runtime_error, val::NumValue, Error as JrError, ObjValue,
- ObjValueBuilder, Result, Val,
+ Error as JrError, ObjValue, ObjValueBuilder, Result, Val, arr::ArrValue, in_description_frame,
+ runtime_error, val::NumValue,
};
impl<'de> Deserialize<'de> for Val {
crates/jrsonnet-evaluator/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/lib.rs
+++ b/crates/jrsonnet-evaluator/src/lib.rs
@@ -40,7 +40,7 @@
pub use evaluate::*;
use function::CallLocation;
pub use import::*;
-use jrsonnet_gcmodule::{cc_dyn, Cc, Trace};
+use jrsonnet_gcmodule::{Cc, Trace, cc_dyn};
pub use jrsonnet_interner::{IBytes, IStr};
pub use jrsonnet_ir as parser;
use jrsonnet_ir::{Expr, Source, SourcePath};
crates/jrsonnet-evaluator/src/manifest.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/manifest.rs
+++ b/crates/jrsonnet-evaluator/src/manifest.rs
@@ -1,6 +1,6 @@
use std::{borrow::Cow, fmt::Write, ptr};
-use crate::{bail, in_description_frame, Result, ResultExt, Val};
+use crate::{Result, ResultExt, Val, bail, in_description_frame};
pub trait ManifestFormat {
fn manifest_buf(&self, val: Val, buf: &mut String) -> Result<()>;
crates/jrsonnet-evaluator/src/map.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/map.rs
+++ b/crates/jrsonnet-evaluator/src/map.rs
@@ -2,7 +2,7 @@
use jrsonnet_interner::IStr;
use rustc_hash::FxHashMap;
-use crate::{gc::WithCapacityExt as _, Thunk, Val};
+use crate::{Thunk, Val, gc::WithCapacityExt as _};
#[derive(Trace, Debug)]
#[trace(tracking(force))]
crates/jrsonnet-evaluator/src/obj/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/obj/mod.rs
+++ b/crates/jrsonnet-evaluator/src/obj/mod.rs
@@ -11,7 +11,7 @@
};
use educe::Educe;
-use jrsonnet_gcmodule::{cc_dyn, Acyclic, Cc, Trace, Weak};
+use jrsonnet_gcmodule::{Acyclic, Cc, Trace, Weak, cc_dyn};
use jrsonnet_interner::IStr;
use jrsonnet_ir::Span;
use rustc_hash::{FxHashMap, FxHashSet};
@@ -22,13 +22,13 @@
pub use oop::ObjValueBuilder;
use crate::{
+ CcUnbound, MaybeUnbound, Result, Thunk, Unbound, Val,
arr::{PickObjectKeyValues, PickObjectValues},
bail,
- error::{suggest_object_fields, ErrorKind::*},
+ error::{ErrorKind::*, suggest_object_fields},
identity_hash,
operator::evaluate_add_op,
val::{ArrValue, ThunkValue},
- CcUnbound, MaybeUnbound, Result, Thunk, Unbound, Val,
};
#[cfg(not(feature = "exp-preserve-order"))]
crates/jrsonnet-evaluator/src/obj/oop.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/obj/oop.rs
+++ b/crates/jrsonnet-evaluator/src/obj/oop.rs
@@ -1,21 +1,25 @@
-use std::cell::{Cell, RefCell};
-use std::ops::ControlFlow;
-use std::{fmt, mem};
+use std::{
+ cell::{Cell, RefCell},
+ fmt, mem,
+ ops::ControlFlow,
+};
-use crate::function::{CallLocation, FuncVal};
-use crate::gc::WithCapacityExt as _;
-use crate::{
- bail, error::ErrorKind::*, in_frame, CcUnbound, MaybeUnbound, Result, Thunk, Unbound, Val,
-};
use jrsonnet_gcmodule::{Cc, Trace};
use jrsonnet_ir::IStr;
use rustc_hash::{FxHashMap, FxHashSet};
-use super::ordering::{FieldIndex, SuperDepth};
use super::{
CcObjectAssertion, CcObjectCore, EnumFields, EnumFieldsHandler, FieldVisibility, GetFor,
HasFieldIncludeHidden, ObjMember, ObjMemberBuilder, ObjValue, ObjValueInner, ObjectAssertion,
ObjectCore, OmitFieldsCore, SupThis,
+ ordering::{FieldIndex, SuperDepth},
+};
+use crate::{
+ CcUnbound, MaybeUnbound, Result, Thunk, Unbound, Val, bail,
+ error::ErrorKind::*,
+ function::{CallLocation, FuncVal},
+ gc::WithCapacityExt as _,
+ in_frame,
};
#[allow(clippy::module_name_repetitions)]
crates/jrsonnet-evaluator/src/stdlib/format.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/stdlib/format.rs
+++ b/crates/jrsonnet-evaluator/src/stdlib/format.rs
@@ -7,10 +7,9 @@
use thiserror::Error;
use crate::{
- bail,
- error::{format_found, suggest_object_fields, ErrorKind::*},
+ Error, ObjValue, Result, Val, bail,
+ error::{ErrorKind::*, format_found, suggest_object_fields},
typed::FromUntyped,
- Error, ObjValue, Result, Val,
};
#[derive(Debug, Clone, Error, Trace)]
crates/jrsonnet-evaluator/src/stdlib/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/stdlib/mod.rs
+++ b/crates/jrsonnet-evaluator/src/stdlib/mod.rs
@@ -3,7 +3,7 @@
use format::{format_arr, format_obj};
-use crate::{function::CallLocation, in_frame, Result, Val};
+use crate::{Result, Val, function::CallLocation, in_frame};
pub mod format;
crates/jrsonnet-evaluator/src/tla.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/tla.rs
+++ b/crates/jrsonnet-evaluator/src/tla.rs
@@ -5,8 +5,9 @@
use jrsonnet_ir::{SourceFifo, SourcePath};
use crate::{
+ Result, Thunk, Val,
function::{CallLocation, PreparedFuncVal},
- in_description_frame, with_state, Result, Thunk, Val,
+ in_description_frame, with_state,
};
#[derive(Clone, Trace)]
crates/jrsonnet-evaluator/src/trace/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/trace/mod.rs
+++ b/crates/jrsonnet-evaluator/src/trace/mod.rs
@@ -10,7 +10,7 @@
#[cfg(feature = "explaining-traces")]
use jrsonnet_ir::Span;
-use crate::{error::ErrorKind, Error};
+use crate::{Error, error::ErrorKind};
/// The way paths should be displayed
#[derive(Clone, Trace)]
@@ -258,7 +258,7 @@
struct ResetData {
loc: Span,
}
- use hi_doc::{source_to_ansi, Formatting, SnippetBuilder, Text};
+ use hi_doc::{Formatting, SnippetBuilder, Text, source_to_ansi};
write!(out, "{}", error.error())?;
if let ErrorKind::ImportSyntaxError { path, error } = error.error() {
crates/jrsonnet-evaluator/src/typed/conversions.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/typed/conversions.rs
+++ b/crates/jrsonnet-evaluator/src/typed/conversions.rs
@@ -5,23 +5,23 @@
use jrsonnet_types::{ComplexValType, ValType};
use crate::{
+ ObjValue, ObjValueBuilder, Result, ResultExt, Thunk, Val,
arr::{ArrValue, BytesArray},
bail,
function::FuncVal,
typed::CheckType,
val::{IndexableVal, NumValue, StrValue, ThunkMapper},
- ObjValue, ObjValueBuilder, Result, ResultExt, Thunk, Val,
};
#[doc(hidden)]
pub mod __typed_macro_prelude {
pub use ::jrsonnet_evaluator::{
+ IStr, ObjValue, ObjValueBuilder, State, Val,
error::{ErrorKind, Result as JrResult},
typed::{
CheckType, ComplexValType, FromUntyped, IntoUntyped, ParseTypedObj, SerializeTypedObj,
Typed,
},
- IStr, ObjValue, ObjValueBuilder, State, Val,
};
}
pub use jrsonnet_macros::{FromUntyped, IntoUntyped, Typed};
crates/jrsonnet-evaluator/src/typed/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/typed/mod.rs
+++ b/crates/jrsonnet-evaluator/src/typed/mod.rs
@@ -7,8 +7,9 @@
use thiserror::Error;
use crate::{
+ Val,
error::{Error, ErrorKind, Result},
- in_description_frame, Val,
+ in_description_frame,
};
#[derive(Debug, Error, Clone, Acyclic)]
crates/jrsonnet-evaluator/src/val.rsdiffbeforeafterboth--- a/crates/jrsonnet-evaluator/src/val.rs
+++ b/crates/jrsonnet-evaluator/src/val.rs
@@ -9,7 +9,7 @@
rc::Rc,
};
-use jrsonnet_gcmodule::{cc_dyn, Acyclic, Cc, Trace};
+use jrsonnet_gcmodule::{Acyclic, Cc, Trace, cc_dyn};
use jrsonnet_interner::IStr;
pub use jrsonnet_macros::Thunk;
use jrsonnet_types::ValType;
@@ -18,13 +18,12 @@
pub use crate::arr::{ArrValue, ArrayLike};
use crate::{
- bail,
+ ObjValue, Result, SupThis, Unbound, WeakSupThis, bail,
error::{Error, ErrorKind::*},
function::FuncVal,
gc::WithCapacityExt as _,
manifest::{ManifestFormat, ToStringFormat},
typed::{BoundedUsize, MAX_SAFE_INTEGER, MIN_SAFE_INTEGER},
- ObjValue, Result, SupThis, Unbound, WeakSupThis,
};
pub trait ThunkValue: Trace {
crates/jrsonnet-formatter/src/children.rsdiffbeforeafterboth--- a/crates/jrsonnet-formatter/src/children.rs
+++ b/crates/jrsonnet-formatter/src/children.rs
@@ -3,8 +3,8 @@
use std::{fmt::Debug, mem};
use jrsonnet_rowan_parser::{
+ AstNode, AstToken, SyntaxElement, SyntaxNode, TS,
nodes::{CustomError, Trivia, TriviaKind},
- AstNode, AstToken, SyntaxElement, SyntaxNode, TS,
};
pub type ChildTrivia = Vec<Result<Trivia, String>>;
crates/jrsonnet-formatter/src/comments.rsdiffbeforeafterboth--- a/crates/jrsonnet-formatter/src/comments.rs
+++ b/crates/jrsonnet-formatter/src/comments.rs
@@ -1,7 +1,7 @@
use std::string::String;
use dprint_core::formatting::PrintItems;
-use jrsonnet_rowan_parser::{nodes::TriviaKind, AstToken};
+use jrsonnet_rowan_parser::{AstToken, nodes::TriviaKind};
use crate::{children::ChildTrivia, p, pi};
crates/jrsonnet-formatter/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-formatter/src/lib.rs
+++ b/crates/jrsonnet-formatter/src/lib.rs
@@ -2,26 +2,26 @@
use children::{children_between, trivia_before};
use dprint_core::formatting::{
+ ConditionResolver, ConditionResolverContext, LineNumber, PrintItems, PrintOptions,
condition_helpers::is_multiple_lines,
condition_resolvers::true_resolver,
ir_helpers::{new_line_group, with_indent},
- ConditionResolver, ConditionResolverContext, LineNumber, PrintItems, PrintOptions,
};
use hi_doc::{Formatting, SnippetBuilder};
use jrsonnet_lexer::collect_lexed_str_block;
use jrsonnet_rowan_parser::{
+ AstNode, AstToken as _, SyntaxToken,
nodes::{
Arg, ArgsDesc, Assertion, BinaryOperator, Bind, CompSpec, Destruct, DestructArrayPart,
DestructRest, Expr, ExprArray, ExprBase, FieldName, ForSpec, IfSpec, ImportKind, Literal,
Member, Name, Number, ObjBody, ObjLocal, ParamsDesc, SliceDesc, SourceFile, Stmt, Suffix,
Text, TextKind, UnaryOperator, Visibility,
},
- AstNode, AstToken as _, SyntaxToken,
};
use crate::{
- children::{trivia_after, Child, EndingComments},
- comments::{format_comments, CommentLocation},
+ children::{Child, EndingComments, trivia_after},
+ comments::{CommentLocation, format_comments},
};
mod children;
@@ -461,18 +461,10 @@
if mem.should_start_with_newline {
p!(out, nl);
}
- format_comments(
- &mem.before_trivia,
- CommentLocation::AboveItem,
- &mut out,
- );
- p!(&mut out, {mem.value});
+ format_comments(&mem.before_trivia, CommentLocation::AboveItem, &mut out);
+ p!(&mut out, { mem.value });
p!(out, if("trailing comma", multi_line, str(",")));
- format_comments(
- &mem.inline_trivia,
- CommentLocation::ItemInline,
- &mut out,
- );
+ format_comments(&mem.inline_trivia, CommentLocation::ItemInline, &mut out);
p!(out, if_else("member-comp sep", multi_line, nl)(sonl));
}
@@ -490,17 +482,9 @@
if mem.should_start_with_newline {
p!(out, nl);
}
- format_comments(
- &mem.before_trivia,
- CommentLocation::AboveItem,
- &mut out,
- );
+ format_comments(&mem.before_trivia, CommentLocation::AboveItem, &mut out);
p!(&mut out, { mem.value });
- format_comments(
- &mem.inline_trivia,
- CommentLocation::ItemInline,
- &mut out,
- );
+ format_comments(&mem.inline_trivia, CommentLocation::ItemInline, &mut out);
p!(out, if_else("comp spec sep", multi_line, nl)(sonl));
}
crates/jrsonnet-interner/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-interner/src/lib.rs
+++ b/crates/jrsonnet-interner/src/lib.rs
@@ -14,7 +14,7 @@
str,
};
-use hashbrown::{hash_map::RawEntryMut, HashMap};
+use hashbrown::{HashMap, hash_map::RawEntryMut};
use jrsonnet_gcmodule::{Acyclic, Trace};
use rustc_hash::FxBuildHasher;
@@ -242,7 +242,7 @@
pub mod interop {
use std::mem;
- use crate::{PoolMap, POOL};
+ use crate::{POOL, PoolMap};
/// Type-erased interned string pool
pub enum PoolState {}
crates/jrsonnet-ir-parser/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-ir-parser/Cargo.toml
+++ b/crates/jrsonnet-ir-parser/Cargo.toml
@@ -1,5 +1,6 @@
[package]
name = "jrsonnet-ir-parser"
+description = "Jrsonnet hand-rolled parser which parses source directly into IR"
authors.workspace = true
edition.workspace = true
license.workspace = true
crates/jrsonnet-ir-parser/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-ir-parser/src/lib.rs
+++ b/crates/jrsonnet-ir-parser/src/lib.rs
@@ -2,12 +2,12 @@
use jrsonnet_gcmodule::Acyclic;
use jrsonnet_ir::{
- unescape, ArgsDesc, AssertExpr, AssertStmt, BinaryOp, BinaryOpType, BindSpec, CompSpec,
- Destruct, Expr, ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IfElse,
- IfSpecData, ImportKind, IndexPart, LiteralType, Member, ObjBody, ObjComp, ObjMembers, Slice,
- SliceDesc, Source, Span, Spanned, UnaryOpType, Visibility,
+ ArgsDesc, AssertExpr, AssertStmt, BinaryOp, BinaryOpType, BindSpec, CompSpec, Destruct, Expr,
+ ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IfElse, IfSpecData,
+ ImportKind, IndexPart, LiteralType, Member, ObjBody, ObjComp, ObjMembers, Slice, SliceDesc,
+ Source, Span, Spanned, UnaryOpType, Visibility, unescape,
};
-use jrsonnet_lexer::{collect_lexed_str_block, Lexeme, Lexer, SyntaxKind, T};
+use jrsonnet_lexer::{Lexeme, Lexer, SyntaxKind, T, collect_lexed_str_block};
pub struct ParserSettings {
pub source: Source,
crates/jrsonnet-ir/src/function.rsdiffbeforeafterboth--- a/crates/jrsonnet-ir/src/function.rs
+++ b/crates/jrsonnet-ir/src/function.rs
@@ -1,6 +1,4 @@
-use std::fmt;
-use std::ops::Deref;
-use std::rc::Rc;
+use std::{fmt, ops::Deref, rc::Rc};
use jrsonnet_gcmodule::Acyclic;
use jrsonnet_interner::IStr;
@@ -50,11 +48,7 @@
}
impl ParamDefault {
pub const fn exists(is_exists: bool) -> Self {
- if is_exists {
- Self::Exists
- } else {
- Self::None
- }
+ if is_exists { Self::Exists } else { Self::None }
}
}
impl fmt::Display for ParamDefault {
crates/jrsonnet-ir/src/location.rsdiffbeforeafterboth--- a/crates/jrsonnet-ir/src/location.rs
+++ b/crates/jrsonnet-ir/src/location.rs
@@ -85,7 +85,7 @@
#[cfg(test)]
pub mod tests {
- use super::{offset_to_location, CodeLocation};
+ use super::{CodeLocation, offset_to_location};
#[test]
fn test() {
crates/jrsonnet-ir/src/source.rsdiffbeforeafterboth--- a/crates/jrsonnet-ir/src/source.rs
+++ b/crates/jrsonnet-ir/src/source.rs
@@ -9,7 +9,7 @@
use jrsonnet_gcmodule::Acyclic;
use jrsonnet_interner::{IBytes, IStr};
-use crate::location::{location_to_offset, offset_to_location, CodeLocation};
+use crate::location::{CodeLocation, location_to_offset, offset_to_location};
macro_rules! any_ext_methods {
($T:ident) => {
@@ -286,22 +286,22 @@
}
pub fn code(&self) -> &str {
- &self.0 .1
+ &self.0.1
}
pub fn source_path(&self) -> &SourcePath {
- &self.0 .0
+ &self.0.0
}
pub fn map_source_locations<const S: usize>(&self, locs: &[u32; S]) -> [CodeLocation; S] {
- offset_to_location(&self.0 .1, locs)
+ offset_to_location(&self.0.1, locs)
}
pub fn map_from_source_location(&self, line: usize, column: usize) -> Option<usize> {
- location_to_offset(&self.0 .1, line, column)
+ location_to_offset(&self.0.1, line, column)
}
}
impl fmt::Debug for Source {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "{:?}", self.0 .0)
+ write!(f, "{:?}", self.0.0)
}
}
crates/jrsonnet-lexer/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-lexer/Cargo.toml
+++ b/crates/jrsonnet-lexer/Cargo.toml
@@ -1,5 +1,6 @@
[package]
name = "jrsonnet-lexer"
+description = "Jrsonnet lexer shared between rowan and hand-rolled parser"
authors.workspace = true
edition.workspace = true
license.workspace = true
crates/jrsonnet-lexer/src/lex.rsdiffbeforeafterboth--- a/crates/jrsonnet-lexer/src/lex.rs
+++ b/crates/jrsonnet-lexer/src/lex.rs
@@ -1,12 +1,12 @@
use core::ops::Range;
use logos::Logos;
+
// use rowan::{TextRange, TextSize};
-
use crate::{
+ Span,
generated::syntax_kinds::SyntaxKind,
- string_block::{lex_str_block, StringBlockError},
- Span,
+ string_block::{StringBlockError, lex_str_block},
};
pub struct Lexer<'a> {
crates/jrsonnet-lexer/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-lexer/src/lib.rs
+++ b/crates/jrsonnet-lexer/src/lib.rs
@@ -7,4 +7,4 @@
pub use generated::syntax_kinds::SyntaxKind;
pub use lex::{Lexeme, Lexer};
-pub use string_block::{collect_lexed_str_block, CollectStrBlock};
+pub use string_block::{CollectStrBlock, collect_lexed_str_block};
crates/jrsonnet-lexer/src/string_block.rsdiffbeforeafterboth--- a/crates/jrsonnet-lexer/src/string_block.rs
+++ b/crates/jrsonnet-lexer/src/string_block.rs
@@ -6,8 +6,8 @@
MissingIndent,
}
+use StringBlockError::*;
use logos::Lexer;
-use StringBlockError::*;
use crate::generated::syntax_kinds::SyntaxKind;
crates/jrsonnet-macros/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-macros/src/lib.rs
+++ b/crates/jrsonnet-macros/src/lib.rs
@@ -3,14 +3,13 @@
use proc_macro2::TokenStream;
use quote::{quote, quote_spanned};
use syn::{
- parenthesized,
+ Attribute, DeriveInput, Error, Expr, ExprClosure, FnArg, GenericArgument, Ident, ItemFn,
+ LitStr, Meta, Pat, Path, PathArguments, Result, ReturnType, Token, Type, parenthesized,
parse::{Parse, ParseStream},
parse_macro_input,
punctuated::Punctuated,
spanned::Spanned,
token::Comma,
- Attribute, DeriveInput, Error, Expr, ExprClosure, FnArg, GenericArgument, Ident, ItemFn,
- LitStr, Meta, Pat, Path, PathArguments, Result, ReturnType, Token, Type,
};
use self::typed::{derive_from_untyped_inner, derive_into_untyped_inner, derive_typed_inner};
crates/jrsonnet-macros/src/typed.rsdiffbeforeafterboth--- a/crates/jrsonnet-macros/src/typed.rs
+++ b/crates/jrsonnet-macros/src/typed.rs
@@ -1,10 +1,13 @@
-use crate::names::Names;
-use crate::{extract_type_from_option, kw, parse_attr, type_is_path};
use proc_macro2::TokenStream;
use quote::quote;
-use syn::parse::{Parse, ParseStream};
-use syn::spanned::Spanned as _;
-use syn::{parenthesized, token, DeriveInput, Error, Ident, LitStr, Result, Token, Type};
+use syn::{
+ DeriveInput, Error, Ident, LitStr, Result, Token, Type, parenthesized,
+ parse::{Parse, ParseStream},
+ spanned::Spanned as _,
+ token,
+};
+
+use crate::{extract_type_from_option, kw, names::Names, parse_attr, type_is_path};
#[derive(Default)]
#[allow(clippy::struct_excessive_bools)]
crates/jrsonnet-peg-parser/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-peg-parser/src/lib.rs
+++ b/crates/jrsonnet-peg-parser/src/lib.rs
@@ -1,12 +1,13 @@
+use std::rc::Rc;
+
use jrsonnet_gcmodule::Acyclic;
use jrsonnet_ir::{
- unescape, ArgsDesc, AssertExpr, AssertStmt, BinaryOp, BindSpec, CompSpec, Destruct,
- DestructRest, Expr, ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IfElse,
- IfSpecData, ImportKind, IndexPart, LiteralType, Member, ObjBody, ObjComp, ObjMembers, Slice,
- SliceDesc, Source, Span, Spanned, Visibility,
+ ArgsDesc, AssertExpr, AssertStmt, BinaryOp, BindSpec, CompSpec, Destruct, DestructRest, Expr,
+ ExprParam, ExprParams, FieldMember, FieldName, ForSpecData, IStr, IfElse, IfSpecData,
+ ImportKind, IndexPart, LiteralType, Member, ObjBody, ObjComp, ObjMembers, Slice, SliceDesc,
+ Source, Span, Spanned, Visibility, unescape,
};
use peg::parser;
-use std::rc::Rc;
pub struct ParserSettings {
pub source: Source,
@@ -58,7 +59,7 @@
rule id() -> IStr = v:$(quiet!{ !reserved() alpha() (alpha() / digit())*} / expected!("<identifier>")) { v.into() }
rule keyword(id: &'static str) -> ()
- = ##parse_string_literal(id) end_of_ident()
+ = #parse_string_literal(id) end_of_ident()
pub rule param(s: &ParserSettings) -> ExprParam = destruct:destruct(s) expr:(_ "=" _ expr:expr(s){expr})? { ExprParam { destruct, default: expr.map(Rc::new) } }
pub rule params(s: &ParserSettings) -> ExprParams
@@ -429,7 +430,7 @@
use insta::{assert_snapshot, glob};
use jrsonnet_ir::{IStr, Source};
- use crate::{parse, ParserSettings};
+ use crate::{ParserSettings, parse};
#[test]
fn snapshots() {
crates/jrsonnet-rowan-parser/src/event.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/event.rs
+++ b/crates/jrsonnet-rowan-parser/src/event.rs
@@ -3,10 +3,10 @@
use rowan::{GreenNodeBuilder, Language, TextRange, TextSize};
use crate::{
+ AstToken, JsonnetLanguage, SyntaxKind,
lex::Lexeme,
nodes::Trivia,
parser::{LocatedSyntaxError, Parse, SyntaxError},
- AstToken, JsonnetLanguage, SyntaxKind,
};
#[derive(Clone, Debug)]
crates/jrsonnet-rowan-parser/src/generated/nodes.rsdiffbeforeafterboth1//! This is a generated file, please do not edit manually. Changes can be2//! made in codegeneration that lives in `xtask` top-level dir.34#![allow(non_snake_case, clippy::match_like_matches_macro)]5use crate::{6 ast::{support, AstChildren, AstNode, AstToken},7 SyntaxKind::{self, *},8 SyntaxNode, SyntaxToken, T,9};1011#[derive(Debug, Clone, PartialEq, Eq, Hash)]12pub struct SourceFile {13 pub(crate) syntax: SyntaxNode,14}15impl SourceFile {16 pub fn expr(&self) -> Option<Expr> {17 support::children(&self.syntax).next()18 }19}2021#[derive(Debug, Clone, PartialEq, Eq, Hash)]22pub struct Expr {23 pub(crate) syntax: SyntaxNode,24}25impl Expr {26 pub fn stmts(&self) -> AstChildren<Stmt> {27 support::children(&self.syntax)28 }29 pub fn expr_base(&self) -> Option<ExprBase> {30 support::children(&self.syntax).next()31 }32 pub fn suffixs(&self) -> AstChildren<Suffix> {33 support::children(&self.syntax)34 }35}3637#[derive(Debug, Clone, PartialEq, Eq, Hash)]38pub struct SuffixIndex {39 pub(crate) syntax: SyntaxNode,40}41impl SuffixIndex {42 pub fn question_mark_token(&self) -> Option<SyntaxToken> {43 support::token(&self.syntax, T![?])44 }45 pub fn dot_token(&self) -> Option<SyntaxToken> {46 support::token(&self.syntax, T![.])47 }48 pub fn index(&self) -> Option<Name> {49 support::children(&self.syntax).next()50 }51}5253#[derive(Debug, Clone, PartialEq, Eq, Hash)]54pub struct Name {55 pub(crate) syntax: SyntaxNode,56}57impl Name {58 pub fn ident_lit(&self) -> Option<SyntaxToken> {59 support::token(&self.syntax, IDENT)60 }61}6263#[derive(Debug, Clone, PartialEq, Eq, Hash)]64pub struct SuffixIndexExpr {65 pub(crate) syntax: SyntaxNode,66}67impl SuffixIndexExpr {68 pub fn question_mark_token(&self) -> Option<SyntaxToken> {69 support::token(&self.syntax, T![?])70 }71 pub fn dot_token(&self) -> Option<SyntaxToken> {72 support::token(&self.syntax, T![.])73 }74 pub fn l_brack_token(&self) -> Option<SyntaxToken> {75 support::token(&self.syntax, T!['['])76 }77 pub fn index(&self) -> Option<Expr> {78 support::children(&self.syntax).next()79 }80 pub fn r_brack_token(&self) -> Option<SyntaxToken> {81 support::token(&self.syntax, T![']'])82 }83}8485#[derive(Debug, Clone, PartialEq, Eq, Hash)]86pub struct SuffixSlice {87 pub(crate) syntax: SyntaxNode,88}89impl SuffixSlice {90 pub fn slice_desc(&self) -> Option<SliceDesc> {91 support::children(&self.syntax).next()92 }93}9495#[derive(Debug, Clone, PartialEq, Eq, Hash)]96pub struct SliceDesc {97 pub(crate) syntax: SyntaxNode,98}99impl SliceDesc {100 pub fn l_brack_token(&self) -> Option<SyntaxToken> {101 support::token(&self.syntax, T!['['])102 }103 pub fn from(&self) -> Option<Expr> {104 support::children(&self.syntax).next()105 }106 pub fn colon_token(&self) -> Option<SyntaxToken> {107 support::token(&self.syntax, T![:])108 }109 pub fn end(&self) -> Option<SliceDescEnd> {110 support::children(&self.syntax).next()111 }112 pub fn step(&self) -> Option<SliceDescStep> {113 support::children(&self.syntax).next()114 }115 pub fn r_brack_token(&self) -> Option<SyntaxToken> {116 support::token(&self.syntax, T![']'])117 }118}119120#[derive(Debug, Clone, PartialEq, Eq, Hash)]121pub struct SuffixApply {122 pub(crate) syntax: SyntaxNode,123}124impl SuffixApply {125 pub fn args_desc(&self) -> Option<ArgsDesc> {126 support::children(&self.syntax).next()127 }128 pub fn tailstrict_kw_token(&self) -> Option<SyntaxToken> {129 support::token(&self.syntax, T![tailstrict])130 }131}132133#[derive(Debug, Clone, PartialEq, Eq, Hash)]134pub struct ArgsDesc {135 pub(crate) syntax: SyntaxNode,136}137impl ArgsDesc {138 pub fn l_paren_token(&self) -> Option<SyntaxToken> {139 support::token(&self.syntax, T!['('])140 }141 pub fn args(&self) -> AstChildren<Arg> {142 support::children(&self.syntax)143 }144 pub fn r_paren_token(&self) -> Option<SyntaxToken> {145 support::token(&self.syntax, T![')'])146 }147}148149#[derive(Debug, Clone, PartialEq, Eq, Hash)]150pub struct StmtLocal {151 pub(crate) syntax: SyntaxNode,152}153impl StmtLocal {154 pub fn local_kw_token(&self) -> Option<SyntaxToken> {155 support::token(&self.syntax, T![local])156 }157 pub fn binds(&self) -> AstChildren<Bind> {158 support::children(&self.syntax)159 }160 pub fn semi_token(&self) -> Option<SyntaxToken> {161 support::token(&self.syntax, T![;])162 }163}164165#[derive(Debug, Clone, PartialEq, Eq, Hash)]166pub struct StmtAssert {167 pub(crate) syntax: SyntaxNode,168}169impl StmtAssert {170 pub fn assertion(&self) -> Option<Assertion> {171 support::children(&self.syntax).next()172 }173 pub fn semi_token(&self) -> Option<SyntaxToken> {174 support::token(&self.syntax, T![;])175 }176}177178#[derive(Debug, Clone, PartialEq, Eq, Hash)]179pub struct Assertion {180 pub(crate) syntax: SyntaxNode,181}182impl Assertion {183 pub fn assert_kw_token(&self) -> Option<SyntaxToken> {184 support::token(&self.syntax, T![assert])185 }186 pub fn condition(&self) -> Option<Expr> {187 support::children(&self.syntax).next()188 }189 pub fn colon_token(&self) -> Option<SyntaxToken> {190 support::token(&self.syntax, T![:])191 }192 pub fn message(&self) -> Option<Expr> {193 support::children(&self.syntax).nth(1usize)194 }195}196197#[derive(Debug, Clone, PartialEq, Eq, Hash)]198pub struct ExprBinary {199 pub(crate) syntax: SyntaxNode,200}201impl ExprBinary {202 pub fn lhs(&self) -> Option<Expr> {203 support::children(&self.syntax).next()204 }205 pub fn binary_operator(&self) -> Option<BinaryOperator> {206 support::token_child(&self.syntax)207 }208 pub fn rhs(&self) -> Option<Expr> {209 support::children(&self.syntax).nth(1usize)210 }211}212213#[derive(Debug, Clone, PartialEq, Eq, Hash)]214pub struct ExprUnary {215 pub(crate) syntax: SyntaxNode,216}217impl ExprUnary {218 pub fn unary_operator(&self) -> Option<UnaryOperator> {219 support::token_child(&self.syntax)220 }221 pub fn rhs(&self) -> Option<Expr> {222 support::children(&self.syntax).next()223 }224}225226#[derive(Debug, Clone, PartialEq, Eq, Hash)]227pub struct ExprObjExtend {228 pub(crate) syntax: SyntaxNode,229}230impl ExprObjExtend {231 pub fn lhs(&self) -> Option<Expr> {232 support::children(&self.syntax).next()233 }234 pub fn rhs(&self) -> Option<Expr> {235 support::children(&self.syntax).nth(1usize)236 }237}238239#[derive(Debug, Clone, PartialEq, Eq, Hash)]240pub struct ExprParened {241 pub(crate) syntax: SyntaxNode,242}243impl ExprParened {244 pub fn l_paren_token(&self) -> Option<SyntaxToken> {245 support::token(&self.syntax, T!['('])246 }247 pub fn expr(&self) -> Option<Expr> {248 support::children(&self.syntax).next()249 }250 pub fn r_paren_token(&self) -> Option<SyntaxToken> {251 support::token(&self.syntax, T![')'])252 }253}254255#[derive(Debug, Clone, PartialEq, Eq, Hash)]256pub struct ExprLiteral {257 pub(crate) syntax: SyntaxNode,258}259impl ExprLiteral {260 pub fn literal(&self) -> Option<Literal> {261 support::token_child(&self.syntax)262 }263}264265#[derive(Debug, Clone, PartialEq, Eq, Hash)]266pub struct ExprString {267 pub(crate) syntax: SyntaxNode,268}269impl ExprString {270 pub fn text(&self) -> Option<Text> {271 support::token_child(&self.syntax)272 }273}274275#[derive(Debug, Clone, PartialEq, Eq, Hash)]276pub struct ExprNumber {277 pub(crate) syntax: SyntaxNode,278}279impl ExprNumber {280 pub fn number(&self) -> Option<Number> {281 support::token_child(&self.syntax)282 }283}284285#[derive(Debug, Clone, PartialEq, Eq, Hash)]286pub struct ExprArray {287 pub(crate) syntax: SyntaxNode,288}289impl ExprArray {290 pub fn l_brack_token(&self) -> Option<SyntaxToken> {291 support::token(&self.syntax, T!['['])292 }293 pub fn exprs(&self) -> AstChildren<Expr> {294 support::children(&self.syntax)295 }296 pub fn r_brack_token(&self) -> Option<SyntaxToken> {297 support::token(&self.syntax, T![']'])298 }299}300301#[derive(Debug, Clone, PartialEq, Eq, Hash)]302pub struct ExprObject {303 pub(crate) syntax: SyntaxNode,304}305impl ExprObject {306 pub fn obj_body(&self) -> Option<ObjBody> {307 support::children(&self.syntax).next()308 }309}310311#[derive(Debug, Clone, PartialEq, Eq, Hash)]312pub struct ExprArrayComp {313 pub(crate) syntax: SyntaxNode,314}315impl ExprArrayComp {316 pub fn l_brack_token(&self) -> Option<SyntaxToken> {317 support::token(&self.syntax, T!['['])318 }319 pub fn expr(&self) -> Option<Expr> {320 support::children(&self.syntax).next()321 }322 pub fn comma_token(&self) -> Option<SyntaxToken> {323 support::token(&self.syntax, T![,])324 }325 pub fn comp_specs(&self) -> AstChildren<CompSpec> {326 support::children(&self.syntax)327 }328 pub fn r_brack_token(&self) -> Option<SyntaxToken> {329 support::token(&self.syntax, T![']'])330 }331}332333#[derive(Debug, Clone, PartialEq, Eq, Hash)]334pub struct ExprImport {335 pub(crate) syntax: SyntaxNode,336}337impl ExprImport {338 pub fn import_kind(&self) -> Option<ImportKind> {339 support::token_child(&self.syntax)340 }341 pub fn text(&self) -> Option<Text> {342 support::token_child(&self.syntax)343 }344}345346#[derive(Debug, Clone, PartialEq, Eq, Hash)]347pub struct ExprVar {348 pub(crate) syntax: SyntaxNode,349}350impl ExprVar {351 pub fn name(&self) -> Option<Name> {352 support::children(&self.syntax).next()353 }354}355356#[derive(Debug, Clone, PartialEq, Eq, Hash)]357pub struct ExprIfThenElse {358 pub(crate) syntax: SyntaxNode,359}360impl ExprIfThenElse {361 pub fn if_kw_token(&self) -> Option<SyntaxToken> {362 support::token(&self.syntax, T![if])363 }364 pub fn cond(&self) -> Option<Expr> {365 support::children(&self.syntax).next()366 }367 pub fn then_kw_token(&self) -> Option<SyntaxToken> {368 support::token(&self.syntax, T![then])369 }370 pub fn then(&self) -> Option<TrueExpr> {371 support::children(&self.syntax).next()372 }373 pub fn else_kw_token(&self) -> Option<SyntaxToken> {374 support::token(&self.syntax, T![else])375 }376 pub fn else_(&self) -> Option<FalseExpr> {377 support::children(&self.syntax).next()378 }379}380381#[derive(Debug, Clone, PartialEq, Eq, Hash)]382pub struct TrueExpr {383 pub(crate) syntax: SyntaxNode,384}385impl TrueExpr {386 pub fn expr(&self) -> Option<Expr> {387 support::children(&self.syntax).next()388 }389}390391#[derive(Debug, Clone, PartialEq, Eq, Hash)]392pub struct FalseExpr {393 pub(crate) syntax: SyntaxNode,394}395impl FalseExpr {396 pub fn expr(&self) -> Option<Expr> {397 support::children(&self.syntax).next()398 }399}400401#[derive(Debug, Clone, PartialEq, Eq, Hash)]402pub struct ExprFunction {403 pub(crate) syntax: SyntaxNode,404}405impl ExprFunction {406 pub fn function_kw_token(&self) -> Option<SyntaxToken> {407 support::token(&self.syntax, T![function])408 }409 pub fn l_paren_token(&self) -> Option<SyntaxToken> {410 support::token(&self.syntax, T!['('])411 }412 pub fn params_desc(&self) -> Option<ParamsDesc> {413 support::children(&self.syntax).next()414 }415 pub fn r_paren_token(&self) -> Option<SyntaxToken> {416 support::token(&self.syntax, T![')'])417 }418 pub fn expr(&self) -> Option<Expr> {419 support::children(&self.syntax).next()420 }421}422423#[derive(Debug, Clone, PartialEq, Eq, Hash)]424pub struct ParamsDesc {425 pub(crate) syntax: SyntaxNode,426}427impl ParamsDesc {428 pub fn l_paren_token(&self) -> Option<SyntaxToken> {429 support::token(&self.syntax, T!['('])430 }431 pub fn params(&self) -> AstChildren<Param> {432 support::children(&self.syntax)433 }434 pub fn r_paren_token(&self) -> Option<SyntaxToken> {435 support::token(&self.syntax, T![')'])436 }437}438439#[derive(Debug, Clone, PartialEq, Eq, Hash)]440pub struct ExprError {441 pub(crate) syntax: SyntaxNode,442}443impl ExprError {444 pub fn error_kw_token(&self) -> Option<SyntaxToken> {445 support::token(&self.syntax, T![error])446 }447 pub fn expr(&self) -> Option<Expr> {448 support::children(&self.syntax).next()449 }450}451452#[derive(Debug, Clone, PartialEq, Eq, Hash)]453pub struct SliceDescEnd {454 pub(crate) syntax: SyntaxNode,455}456impl SliceDescEnd {457 pub fn expr(&self) -> Option<Expr> {458 support::children(&self.syntax).next()459 }460}461462#[derive(Debug, Clone, PartialEq, Eq, Hash)]463pub struct SliceDescStep {464 pub(crate) syntax: SyntaxNode,465}466impl SliceDescStep {467 pub fn expr(&self) -> Option<Expr> {468 support::children(&self.syntax).next()469 }470}471472#[derive(Debug, Clone, PartialEq, Eq, Hash)]473pub struct Arg {474 pub(crate) syntax: SyntaxNode,475}476impl Arg {477 pub fn name(&self) -> Option<Name> {478 support::children(&self.syntax).next()479 }480 pub fn assign_token(&self) -> Option<SyntaxToken> {481 support::token(&self.syntax, T![=])482 }483 pub fn expr(&self) -> Option<Expr> {484 support::children(&self.syntax).next()485 }486}487488#[derive(Debug, Clone, PartialEq, Eq, Hash)]489pub struct ObjBodyComp {490 pub(crate) syntax: SyntaxNode,491}492impl ObjBodyComp {493 pub fn l_brace_token(&self) -> Option<SyntaxToken> {494 support::token(&self.syntax, T!['{'])495 }496 pub fn member_comps(&self) -> AstChildren<MemberComp> {497 support::children(&self.syntax)498 }499 pub fn comp_specs(&self) -> AstChildren<CompSpec> {500 support::children(&self.syntax)501 }502 pub fn r_brace_token(&self) -> Option<SyntaxToken> {503 support::token(&self.syntax, T!['}'])504 }505}506507#[derive(Debug, Clone, PartialEq, Eq, Hash)]508pub struct ObjBodyMemberList {509 pub(crate) syntax: SyntaxNode,510}511impl ObjBodyMemberList {512 pub fn l_brace_token(&self) -> Option<SyntaxToken> {513 support::token(&self.syntax, T!['{'])514 }515 pub fn members(&self) -> AstChildren<Member> {516 support::children(&self.syntax)517 }518 pub fn r_brace_token(&self) -> Option<SyntaxToken> {519 support::token(&self.syntax, T!['}'])520 }521}522523#[derive(Debug, Clone, PartialEq, Eq, Hash)]524pub struct MemberBindStmt {525 pub(crate) syntax: SyntaxNode,526}527impl MemberBindStmt {528 pub fn obj_local(&self) -> Option<ObjLocal> {529 support::children(&self.syntax).next()530 }531}532533#[derive(Debug, Clone, PartialEq, Eq, Hash)]534pub struct ObjLocal {535 pub(crate) syntax: SyntaxNode,536}537impl ObjLocal {538 pub fn local_kw_token(&self) -> Option<SyntaxToken> {539 support::token(&self.syntax, T![local])540 }541 pub fn bind(&self) -> Option<Bind> {542 support::children(&self.syntax).next()543 }544}545546#[derive(Debug, Clone, PartialEq, Eq, Hash)]547pub struct MemberAssertStmt {548 pub(crate) syntax: SyntaxNode,549}550impl MemberAssertStmt {551 pub fn assertion(&self) -> Option<Assertion> {552 support::children(&self.syntax).next()553 }554}555556#[derive(Debug, Clone, PartialEq, Eq, Hash)]557pub struct MemberFieldNormal {558 pub(crate) syntax: SyntaxNode,559}560impl MemberFieldNormal {561 pub fn field_name(&self) -> Option<FieldName> {562 support::children(&self.syntax).next()563 }564 pub fn plus_token(&self) -> Option<SyntaxToken> {565 support::token(&self.syntax, T![+])566 }567 pub fn visibility(&self) -> Option<Visibility> {568 support::children(&self.syntax).next()569 }570 pub fn expr(&self) -> Option<Expr> {571 support::children(&self.syntax).next()572 }573}574575#[derive(Debug, Clone, PartialEq, Eq, Hash)]576pub struct Visibility {577 pub(crate) syntax: SyntaxNode,578}579impl Visibility {580 pub fn colon_token(&self) -> Option<SyntaxToken> {581 support::token(&self.syntax, T![:])582 }583}584585#[derive(Debug, Clone, PartialEq, Eq, Hash)]586pub struct MemberFieldMethod {587 pub(crate) syntax: SyntaxNode,588}589impl MemberFieldMethod {590 pub fn field_name(&self) -> Option<FieldName> {591 support::children(&self.syntax).next()592 }593 pub fn params_desc(&self) -> Option<ParamsDesc> {594 support::children(&self.syntax).next()595 }596 pub fn visibility(&self) -> Option<Visibility> {597 support::children(&self.syntax).next()598 }599 pub fn expr(&self) -> Option<Expr> {600 support::children(&self.syntax).next()601 }602}603604#[derive(Debug, Clone, PartialEq, Eq, Hash)]605pub struct FieldNameFixed {606 pub(crate) syntax: SyntaxNode,607}608impl FieldNameFixed {609 pub fn id(&self) -> Option<Name> {610 support::children(&self.syntax).next()611 }612 pub fn text(&self) -> Option<Text> {613 support::token_child(&self.syntax)614 }615}616617#[derive(Debug, Clone, PartialEq, Eq, Hash)]618pub struct FieldNameDynamic {619 pub(crate) syntax: SyntaxNode,620}621impl FieldNameDynamic {622 pub fn l_brack_token(&self) -> Option<SyntaxToken> {623 support::token(&self.syntax, T!['['])624 }625 pub fn expr(&self) -> Option<Expr> {626 support::children(&self.syntax).next()627 }628 pub fn r_brack_token(&self) -> Option<SyntaxToken> {629 support::token(&self.syntax, T![']'])630 }631}632633#[derive(Debug, Clone, PartialEq, Eq, Hash)]634pub struct ForSpec {635 pub(crate) syntax: SyntaxNode,636}637impl ForSpec {638 pub fn for_kw_token(&self) -> Option<SyntaxToken> {639 support::token(&self.syntax, T![for])640 }641 pub fn bind(&self) -> Option<Destruct> {642 support::children(&self.syntax).next()643 }644 pub fn in_kw_token(&self) -> Option<SyntaxToken> {645 support::token(&self.syntax, T![in])646 }647 pub fn expr(&self) -> Option<Expr> {648 support::children(&self.syntax).next()649 }650}651652#[derive(Debug, Clone, PartialEq, Eq, Hash)]653pub struct IfSpec {654 pub(crate) syntax: SyntaxNode,655}656impl IfSpec {657 pub fn if_kw_token(&self) -> Option<SyntaxToken> {658 support::token(&self.syntax, T![if])659 }660 pub fn expr(&self) -> Option<Expr> {661 support::children(&self.syntax).next()662 }663}664665#[derive(Debug, Clone, PartialEq, Eq, Hash)]666pub struct BindDestruct {667 pub(crate) syntax: SyntaxNode,668}669impl BindDestruct {670 pub fn into(&self) -> Option<Destruct> {671 support::children(&self.syntax).next()672 }673 pub fn assign_token(&self) -> Option<SyntaxToken> {674 support::token(&self.syntax, T![=])675 }676 pub fn value(&self) -> Option<Expr> {677 support::children(&self.syntax).next()678 }679}680681#[derive(Debug, Clone, PartialEq, Eq, Hash)]682pub struct BindFunction {683 pub(crate) syntax: SyntaxNode,684}685impl BindFunction {686 pub fn name(&self) -> Option<Name> {687 support::children(&self.syntax).next()688 }689 pub fn params(&self) -> Option<ParamsDesc> {690 support::children(&self.syntax).next()691 }692 pub fn assign_token(&self) -> Option<SyntaxToken> {693 support::token(&self.syntax, T![=])694 }695 pub fn value(&self) -> Option<Expr> {696 support::children(&self.syntax).next()697 }698}699700#[derive(Debug, Clone, PartialEq, Eq, Hash)]701pub struct Param {702 pub(crate) syntax: SyntaxNode,703}704impl Param {705 pub fn destruct(&self) -> Option<Destruct> {706 support::children(&self.syntax).next()707 }708 pub fn assign_token(&self) -> Option<SyntaxToken> {709 support::token(&self.syntax, T![=])710 }711 pub fn expr(&self) -> Option<Expr> {712 support::children(&self.syntax).next()713 }714}715716#[derive(Debug, Clone, PartialEq, Eq, Hash)]717pub struct DestructFull {718 pub(crate) syntax: SyntaxNode,719}720impl DestructFull {721 pub fn name(&self) -> Option<Name> {722 support::children(&self.syntax).next()723 }724}725726#[derive(Debug, Clone, PartialEq, Eq, Hash)]727pub struct DestructSkip {728 pub(crate) syntax: SyntaxNode,729}730impl DestructSkip {731 pub fn question_mark_token(&self) -> Option<SyntaxToken> {732 support::token(&self.syntax, T![?])733 }734}735736#[derive(Debug, Clone, PartialEq, Eq, Hash)]737pub struct DestructArray {738 pub(crate) syntax: SyntaxNode,739}740impl DestructArray {741 pub fn l_brack_token(&self) -> Option<SyntaxToken> {742 support::token(&self.syntax, T!['['])743 }744 pub fn destruct_array_parts(&self) -> AstChildren<DestructArrayPart> {745 support::children(&self.syntax)746 }747 pub fn r_brack_token(&self) -> Option<SyntaxToken> {748 support::token(&self.syntax, T![']'])749 }750}751752#[derive(Debug, Clone, PartialEq, Eq, Hash)]753pub struct DestructObject {754 pub(crate) syntax: SyntaxNode,755}756impl DestructObject {757 pub fn l_brace_token(&self) -> Option<SyntaxToken> {758 support::token(&self.syntax, T!['{'])759 }760 pub fn destruct_object_fields(&self) -> AstChildren<DestructObjectField> {761 support::children(&self.syntax)762 }763 pub fn destruct_rest(&self) -> Option<DestructRest> {764 support::children(&self.syntax).next()765 }766 pub fn comma_token(&self) -> Option<SyntaxToken> {767 support::token(&self.syntax, T![,])768 }769 pub fn r_brace_token(&self) -> Option<SyntaxToken> {770 support::token(&self.syntax, T!['}'])771 }772}773774#[derive(Debug, Clone, PartialEq, Eq, Hash)]775pub struct DestructObjectField {776 pub(crate) syntax: SyntaxNode,777}778impl DestructObjectField {779 pub fn field(&self) -> Option<Name> {780 support::children(&self.syntax).next()781 }782 pub fn colon_token(&self) -> Option<SyntaxToken> {783 support::token(&self.syntax, T![:])784 }785 pub fn destruct(&self) -> Option<Destruct> {786 support::children(&self.syntax).next()787 }788 pub fn assign_token(&self) -> Option<SyntaxToken> {789 support::token(&self.syntax, T![=])790 }791 pub fn expr(&self) -> Option<Expr> {792 support::children(&self.syntax).next()793 }794}795796#[derive(Debug, Clone, PartialEq, Eq, Hash)]797pub struct DestructRest {798 pub(crate) syntax: SyntaxNode,799}800impl DestructRest {801 pub fn dotdotdot_token(&self) -> Option<SyntaxToken> {802 support::token(&self.syntax, T![...])803 }804 pub fn into(&self) -> Option<Name> {805 support::children(&self.syntax).next()806 }807}808809#[derive(Debug, Clone, PartialEq, Eq, Hash)]810pub struct DestructArrayElement {811 pub(crate) syntax: SyntaxNode,812}813impl DestructArrayElement {814 pub fn destruct(&self) -> Option<Destruct> {815 support::children(&self.syntax).next()816 }817}818819#[derive(Debug, Clone, PartialEq, Eq, Hash)]820pub enum Suffix {821 SuffixIndex(SuffixIndex),822 SuffixIndexExpr(SuffixIndexExpr),823 SuffixSlice(SuffixSlice),824 SuffixApply(SuffixApply),825}826827#[derive(Debug, Clone, PartialEq, Eq, Hash)]828pub enum Bind {829 BindDestruct(BindDestruct),830 BindFunction(BindFunction),831}832833#[derive(Debug, Clone, PartialEq, Eq, Hash)]834pub enum Stmt {835 StmtLocal(StmtLocal),836 StmtAssert(StmtAssert),837}838839#[derive(Debug, Clone, PartialEq, Eq, Hash)]840pub enum ObjBody {841 ObjBodyComp(ObjBodyComp),842 ObjBodyMemberList(ObjBodyMemberList),843}844845#[derive(Debug, Clone, PartialEq, Eq, Hash)]846pub enum CompSpec {847 ForSpec(ForSpec),848 IfSpec(IfSpec),849}850851#[derive(Debug, Clone, PartialEq, Eq, Hash)]852pub enum ExprBase {853 ExprBinary(ExprBinary),854 ExprUnary(ExprUnary),855 ExprObjExtend(ExprObjExtend),856 ExprParened(ExprParened),857 ExprString(ExprString),858 ExprNumber(ExprNumber),859 ExprLiteral(ExprLiteral),860 ExprArray(ExprArray),861 ExprObject(ExprObject),862 ExprArrayComp(ExprArrayComp),863 ExprImport(ExprImport),864 ExprVar(ExprVar),865 ExprIfThenElse(ExprIfThenElse),866 ExprFunction(ExprFunction),867 ExprError(ExprError),868}869870#[derive(Debug, Clone, PartialEq, Eq, Hash)]871pub enum MemberComp {872 MemberBindStmt(MemberBindStmt),873 MemberFieldNormal(MemberFieldNormal),874 MemberFieldMethod(MemberFieldMethod),875}876877#[derive(Debug, Clone, PartialEq, Eq, Hash)]878pub enum Member {879 MemberBindStmt(MemberBindStmt),880 MemberAssertStmt(MemberAssertStmt),881 MemberFieldNormal(MemberFieldNormal),882 MemberFieldMethod(MemberFieldMethod),883}884885#[derive(Debug, Clone, PartialEq, Eq, Hash)]886pub enum FieldName {887 FieldNameFixed(FieldNameFixed),888 FieldNameDynamic(FieldNameDynamic),889}890891#[derive(Debug, Clone, PartialEq, Eq, Hash)]892pub enum Destruct {893 DestructFull(DestructFull),894 DestructSkip(DestructSkip),895 DestructArray(DestructArray),896 DestructObject(DestructObject),897}898899#[derive(Debug, Clone, PartialEq, Eq, Hash)]900pub enum DestructArrayPart {901 DestructArrayElement(DestructArrayElement),902 DestructRest(DestructRest),903}904905#[derive(Debug, Clone, PartialEq, Eq, Hash)]906pub struct BinaryOperator {907 syntax: SyntaxToken,908 kind: BinaryOperatorKind,909}910911#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]912pub enum BinaryOperatorKind {913 Or,914 NullCoaelse,915 And,916 BitOr,917 BitXor,918 BitAnd,919 Eq,920 Ne,921 Lt,922 Gt,923 Le,924 Ge,925 InKw,926 Lhs,927 Rhs,928 Plus,929 Minus,930 Mul,931 Div,932 Modulo,933 MetaObjectApply,934 ErrorNoOperator,935}936937#[derive(Debug, Clone, PartialEq, Eq, Hash)]938pub struct UnaryOperator {939 syntax: SyntaxToken,940 kind: UnaryOperatorKind,941}942943#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]944pub enum UnaryOperatorKind {945 Minus,946 Not,947 BitNot,948}949950#[derive(Debug, Clone, PartialEq, Eq, Hash)]951pub struct Literal {952 syntax: SyntaxToken,953 kind: LiteralKind,954}955956#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]957pub enum LiteralKind {958 NullKw,959 TrueKw,960 FalseKw,961 SelfKw,962 Dollar,963 SuperKw,964}965966#[derive(Debug, Clone, PartialEq, Eq, Hash)]967pub struct Text {968 syntax: SyntaxToken,969 kind: TextKind,970}971972#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]973pub enum TextKind {974 StringDouble,975 ErrorStringDoubleUnterminated,976 StringSingle,977 ErrorStringSingleUnterminated,978 StringDoubleVerbatim,979 ErrorStringDoubleVerbatimUnterminated,980 StringSingleVerbatim,981 ErrorStringSingleVerbatimUnterminated,982 ErrorStringVerbatimMissingQuotes,983 StringBlock,984 ErrorStringBlockUnexpectedEnd,985 ErrorStringBlockMissingNewLine,986 ErrorStringBlockMissingTermination,987 ErrorStringBlockMissingIndent,988}989990#[derive(Debug, Clone, PartialEq, Eq, Hash)]991pub struct Number {992 syntax: SyntaxToken,993 kind: NumberKind,994}995996#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]997pub enum NumberKind {998 Float,999 ErrorFloatJunkAfterPoint,1000 ErrorFloatJunkAfterExponent,1001 ErrorFloatJunkAfterExponentSign,1002}10031004#[derive(Debug, Clone, PartialEq, Eq, Hash)]1005pub struct ImportKind {1006 syntax: SyntaxToken,1007 kind: ImportKindKind,1008}10091010#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1011pub enum ImportKindKind {1012 ImportstrKw,1013 ImportbinKw,1014 ImportKw,1015}10161017#[derive(Debug, Clone, PartialEq, Eq, Hash)]1018pub struct Trivia {1019 syntax: SyntaxToken,1020 kind: TriviaKind,1021}10221023#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1024pub enum TriviaKind {1025 Whitespace,1026 MultiLineComment,1027 ErrorCommentTooShort,1028 ErrorCommentUnterminated,1029 SingleLineHashComment,1030 SingleLineSlashComment,1031}10321033#[derive(Debug, Clone, PartialEq, Eq, Hash)]1034pub struct CustomError {1035 syntax: SyntaxToken,1036 kind: CustomErrorKind,1037}10381039#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]1040pub enum CustomErrorKind {1041 ErrorMissingToken,1042 ErrorUnexpectedToken,1043 ErrorCustom,1044}1045impl AstNode for SourceFile {1046 fn can_cast(kind: SyntaxKind) -> bool {1047 kind == SOURCE_FILE1048 }1049 fn cast(syntax: SyntaxNode) -> Option<Self> {1050 if Self::can_cast(syntax.kind()) {1051 Some(Self { syntax })1052 } else {1053 None1054 }1055 }1056 fn syntax(&self) -> &SyntaxNode {1057 &self.syntax1058 }1059}1060impl AstNode for Expr {1061 fn can_cast(kind: SyntaxKind) -> bool {1062 kind == EXPR1063 }1064 fn cast(syntax: SyntaxNode) -> Option<Self> {1065 if Self::can_cast(syntax.kind()) {1066 Some(Self { syntax })1067 } else {1068 None1069 }1070 }1071 fn syntax(&self) -> &SyntaxNode {1072 &self.syntax1073 }1074}1075impl AstNode for SuffixIndex {1076 fn can_cast(kind: SyntaxKind) -> bool {1077 kind == SUFFIX_INDEX1078 }1079 fn cast(syntax: SyntaxNode) -> Option<Self> {1080 if Self::can_cast(syntax.kind()) {1081 Some(Self { syntax })1082 } else {1083 None1084 }1085 }1086 fn syntax(&self) -> &SyntaxNode {1087 &self.syntax1088 }1089}1090impl AstNode for Name {1091 fn can_cast(kind: SyntaxKind) -> bool {1092 kind == NAME1093 }1094 fn cast(syntax: SyntaxNode) -> Option<Self> {1095 if Self::can_cast(syntax.kind()) {1096 Some(Self { syntax })1097 } else {1098 None1099 }1100 }1101 fn syntax(&self) -> &SyntaxNode {1102 &self.syntax1103 }1104}1105impl AstNode for SuffixIndexExpr {1106 fn can_cast(kind: SyntaxKind) -> bool {1107 kind == SUFFIX_INDEX_EXPR1108 }1109 fn cast(syntax: SyntaxNode) -> Option<Self> {1110 if Self::can_cast(syntax.kind()) {1111 Some(Self { syntax })1112 } else {1113 None1114 }1115 }1116 fn syntax(&self) -> &SyntaxNode {1117 &self.syntax1118 }1119}1120impl AstNode for SuffixSlice {1121 fn can_cast(kind: SyntaxKind) -> bool {1122 kind == SUFFIX_SLICE1123 }1124 fn cast(syntax: SyntaxNode) -> Option<Self> {1125 if Self::can_cast(syntax.kind()) {1126 Some(Self { syntax })1127 } else {1128 None1129 }1130 }1131 fn syntax(&self) -> &SyntaxNode {1132 &self.syntax1133 }1134}1135impl AstNode for SliceDesc {1136 fn can_cast(kind: SyntaxKind) -> bool {1137 kind == SLICE_DESC1138 }1139 fn cast(syntax: SyntaxNode) -> Option<Self> {1140 if Self::can_cast(syntax.kind()) {1141 Some(Self { syntax })1142 } else {1143 None1144 }1145 }1146 fn syntax(&self) -> &SyntaxNode {1147 &self.syntax1148 }1149}1150impl AstNode for SuffixApply {1151 fn can_cast(kind: SyntaxKind) -> bool {1152 kind == SUFFIX_APPLY1153 }1154 fn cast(syntax: SyntaxNode) -> Option<Self> {1155 if Self::can_cast(syntax.kind()) {1156 Some(Self { syntax })1157 } else {1158 None1159 }1160 }1161 fn syntax(&self) -> &SyntaxNode {1162 &self.syntax1163 }1164}1165impl AstNode for ArgsDesc {1166 fn can_cast(kind: SyntaxKind) -> bool {1167 kind == ARGS_DESC1168 }1169 fn cast(syntax: SyntaxNode) -> Option<Self> {1170 if Self::can_cast(syntax.kind()) {1171 Some(Self { syntax })1172 } else {1173 None1174 }1175 }1176 fn syntax(&self) -> &SyntaxNode {1177 &self.syntax1178 }1179}1180impl AstNode for StmtLocal {1181 fn can_cast(kind: SyntaxKind) -> bool {1182 kind == STMT_LOCAL1183 }1184 fn cast(syntax: SyntaxNode) -> Option<Self> {1185 if Self::can_cast(syntax.kind()) {1186 Some(Self { syntax })1187 } else {1188 None1189 }1190 }1191 fn syntax(&self) -> &SyntaxNode {1192 &self.syntax1193 }1194}1195impl AstNode for StmtAssert {1196 fn can_cast(kind: SyntaxKind) -> bool {1197 kind == STMT_ASSERT1198 }1199 fn cast(syntax: SyntaxNode) -> Option<Self> {1200 if Self::can_cast(syntax.kind()) {1201 Some(Self { syntax })1202 } else {1203 None1204 }1205 }1206 fn syntax(&self) -> &SyntaxNode {1207 &self.syntax1208 }1209}1210impl AstNode for Assertion {1211 fn can_cast(kind: SyntaxKind) -> bool {1212 kind == ASSERTION1213 }1214 fn cast(syntax: SyntaxNode) -> Option<Self> {1215 if Self::can_cast(syntax.kind()) {1216 Some(Self { syntax })1217 } else {1218 None1219 }1220 }1221 fn syntax(&self) -> &SyntaxNode {1222 &self.syntax1223 }1224}1225impl AstNode for ExprBinary {1226 fn can_cast(kind: SyntaxKind) -> bool {1227 kind == EXPR_BINARY1228 }1229 fn cast(syntax: SyntaxNode) -> Option<Self> {1230 if Self::can_cast(syntax.kind()) {1231 Some(Self { syntax })1232 } else {1233 None1234 }1235 }1236 fn syntax(&self) -> &SyntaxNode {1237 &self.syntax1238 }1239}1240impl AstNode for ExprUnary {1241 fn can_cast(kind: SyntaxKind) -> bool {1242 kind == EXPR_UNARY1243 }1244 fn cast(syntax: SyntaxNode) -> Option<Self> {1245 if Self::can_cast(syntax.kind()) {1246 Some(Self { syntax })1247 } else {1248 None1249 }1250 }1251 fn syntax(&self) -> &SyntaxNode {1252 &self.syntax1253 }1254}1255impl AstNode for ExprObjExtend {1256 fn can_cast(kind: SyntaxKind) -> bool {1257 kind == EXPR_OBJ_EXTEND1258 }1259 fn cast(syntax: SyntaxNode) -> Option<Self> {1260 if Self::can_cast(syntax.kind()) {1261 Some(Self { syntax })1262 } else {1263 None1264 }1265 }1266 fn syntax(&self) -> &SyntaxNode {1267 &self.syntax1268 }1269}1270impl AstNode for ExprParened {1271 fn can_cast(kind: SyntaxKind) -> bool {1272 kind == EXPR_PARENED1273 }1274 fn cast(syntax: SyntaxNode) -> Option<Self> {1275 if Self::can_cast(syntax.kind()) {1276 Some(Self { syntax })1277 } else {1278 None1279 }1280 }1281 fn syntax(&self) -> &SyntaxNode {1282 &self.syntax1283 }1284}1285impl AstNode for ExprLiteral {1286 fn can_cast(kind: SyntaxKind) -> bool {1287 kind == EXPR_LITERAL1288 }1289 fn cast(syntax: SyntaxNode) -> Option<Self> {1290 if Self::can_cast(syntax.kind()) {1291 Some(Self { syntax })1292 } else {1293 None1294 }1295 }1296 fn syntax(&self) -> &SyntaxNode {1297 &self.syntax1298 }1299}1300impl AstNode for ExprString {1301 fn can_cast(kind: SyntaxKind) -> bool {1302 kind == EXPR_STRING1303 }1304 fn cast(syntax: SyntaxNode) -> Option<Self> {1305 if Self::can_cast(syntax.kind()) {1306 Some(Self { syntax })1307 } else {1308 None1309 }1310 }1311 fn syntax(&self) -> &SyntaxNode {1312 &self.syntax1313 }1314}1315impl AstNode for ExprNumber {1316 fn can_cast(kind: SyntaxKind) -> bool {1317 kind == EXPR_NUMBER1318 }1319 fn cast(syntax: SyntaxNode) -> Option<Self> {1320 if Self::can_cast(syntax.kind()) {1321 Some(Self { syntax })1322 } else {1323 None1324 }1325 }1326 fn syntax(&self) -> &SyntaxNode {1327 &self.syntax1328 }1329}1330impl AstNode for ExprArray {1331 fn can_cast(kind: SyntaxKind) -> bool {1332 kind == EXPR_ARRAY1333 }1334 fn cast(syntax: SyntaxNode) -> Option<Self> {1335 if Self::can_cast(syntax.kind()) {1336 Some(Self { syntax })1337 } else {1338 None1339 }1340 }1341 fn syntax(&self) -> &SyntaxNode {1342 &self.syntax1343 }1344}1345impl AstNode for ExprObject {1346 fn can_cast(kind: SyntaxKind) -> bool {1347 kind == EXPR_OBJECT1348 }1349 fn cast(syntax: SyntaxNode) -> Option<Self> {1350 if Self::can_cast(syntax.kind()) {1351 Some(Self { syntax })1352 } else {1353 None1354 }1355 }1356 fn syntax(&self) -> &SyntaxNode {1357 &self.syntax1358 }1359}1360impl AstNode for ExprArrayComp {1361 fn can_cast(kind: SyntaxKind) -> bool {1362 kind == EXPR_ARRAY_COMP1363 }1364 fn cast(syntax: SyntaxNode) -> Option<Self> {1365 if Self::can_cast(syntax.kind()) {1366 Some(Self { syntax })1367 } else {1368 None1369 }1370 }1371 fn syntax(&self) -> &SyntaxNode {1372 &self.syntax1373 }1374}1375impl AstNode for ExprImport {1376 fn can_cast(kind: SyntaxKind) -> bool {1377 kind == EXPR_IMPORT1378 }1379 fn cast(syntax: SyntaxNode) -> Option<Self> {1380 if Self::can_cast(syntax.kind()) {1381 Some(Self { syntax })1382 } else {1383 None1384 }1385 }1386 fn syntax(&self) -> &SyntaxNode {1387 &self.syntax1388 }1389}1390impl AstNode for ExprVar {1391 fn can_cast(kind: SyntaxKind) -> bool {1392 kind == EXPR_VAR1393 }1394 fn cast(syntax: SyntaxNode) -> Option<Self> {1395 if Self::can_cast(syntax.kind()) {1396 Some(Self { syntax })1397 } else {1398 None1399 }1400 }1401 fn syntax(&self) -> &SyntaxNode {1402 &self.syntax1403 }1404}1405impl AstNode for ExprIfThenElse {1406 fn can_cast(kind: SyntaxKind) -> bool {1407 kind == EXPR_IF_THEN_ELSE1408 }1409 fn cast(syntax: SyntaxNode) -> Option<Self> {1410 if Self::can_cast(syntax.kind()) {1411 Some(Self { syntax })1412 } else {1413 None1414 }1415 }1416 fn syntax(&self) -> &SyntaxNode {1417 &self.syntax1418 }1419}1420impl AstNode for TrueExpr {1421 fn can_cast(kind: SyntaxKind) -> bool {1422 kind == TRUE_EXPR1423 }1424 fn cast(syntax: SyntaxNode) -> Option<Self> {1425 if Self::can_cast(syntax.kind()) {1426 Some(Self { syntax })1427 } else {1428 None1429 }1430 }1431 fn syntax(&self) -> &SyntaxNode {1432 &self.syntax1433 }1434}1435impl AstNode for FalseExpr {1436 fn can_cast(kind: SyntaxKind) -> bool {1437 kind == FALSE_EXPR1438 }1439 fn cast(syntax: SyntaxNode) -> Option<Self> {1440 if Self::can_cast(syntax.kind()) {1441 Some(Self { syntax })1442 } else {1443 None1444 }1445 }1446 fn syntax(&self) -> &SyntaxNode {1447 &self.syntax1448 }1449}1450impl AstNode for ExprFunction {1451 fn can_cast(kind: SyntaxKind) -> bool {1452 kind == EXPR_FUNCTION1453 }1454 fn cast(syntax: SyntaxNode) -> Option<Self> {1455 if Self::can_cast(syntax.kind()) {1456 Some(Self { syntax })1457 } else {1458 None1459 }1460 }1461 fn syntax(&self) -> &SyntaxNode {1462 &self.syntax1463 }1464}1465impl AstNode for ParamsDesc {1466 fn can_cast(kind: SyntaxKind) -> bool {1467 kind == PARAMS_DESC1468 }1469 fn cast(syntax: SyntaxNode) -> Option<Self> {1470 if Self::can_cast(syntax.kind()) {1471 Some(Self { syntax })1472 } else {1473 None1474 }1475 }1476 fn syntax(&self) -> &SyntaxNode {1477 &self.syntax1478 }1479}1480impl AstNode for ExprError {1481 fn can_cast(kind: SyntaxKind) -> bool {1482 kind == EXPR_ERROR1483 }1484 fn cast(syntax: SyntaxNode) -> Option<Self> {1485 if Self::can_cast(syntax.kind()) {1486 Some(Self { syntax })1487 } else {1488 None1489 }1490 }1491 fn syntax(&self) -> &SyntaxNode {1492 &self.syntax1493 }1494}1495impl AstNode for SliceDescEnd {1496 fn can_cast(kind: SyntaxKind) -> bool {1497 kind == SLICE_DESC_END1498 }1499 fn cast(syntax: SyntaxNode) -> Option<Self> {1500 if Self::can_cast(syntax.kind()) {1501 Some(Self { syntax })1502 } else {1503 None1504 }1505 }1506 fn syntax(&self) -> &SyntaxNode {1507 &self.syntax1508 }1509}1510impl AstNode for SliceDescStep {1511 fn can_cast(kind: SyntaxKind) -> bool {1512 kind == SLICE_DESC_STEP1513 }1514 fn cast(syntax: SyntaxNode) -> Option<Self> {1515 if Self::can_cast(syntax.kind()) {1516 Some(Self { syntax })1517 } else {1518 None1519 }1520 }1521 fn syntax(&self) -> &SyntaxNode {1522 &self.syntax1523 }1524}1525impl AstNode for Arg {1526 fn can_cast(kind: SyntaxKind) -> bool {1527 kind == ARG1528 }1529 fn cast(syntax: SyntaxNode) -> Option<Self> {1530 if Self::can_cast(syntax.kind()) {1531 Some(Self { syntax })1532 } else {1533 None1534 }1535 }1536 fn syntax(&self) -> &SyntaxNode {1537 &self.syntax1538 }1539}1540impl AstNode for ObjBodyComp {1541 fn can_cast(kind: SyntaxKind) -> bool {1542 kind == OBJ_BODY_COMP1543 }1544 fn cast(syntax: SyntaxNode) -> Option<Self> {1545 if Self::can_cast(syntax.kind()) {1546 Some(Self { syntax })1547 } else {1548 None1549 }1550 }1551 fn syntax(&self) -> &SyntaxNode {1552 &self.syntax1553 }1554}1555impl AstNode for ObjBodyMemberList {1556 fn can_cast(kind: SyntaxKind) -> bool {1557 kind == OBJ_BODY_MEMBER_LIST1558 }1559 fn cast(syntax: SyntaxNode) -> Option<Self> {1560 if Self::can_cast(syntax.kind()) {1561 Some(Self { syntax })1562 } else {1563 None1564 }1565 }1566 fn syntax(&self) -> &SyntaxNode {1567 &self.syntax1568 }1569}1570impl AstNode for MemberBindStmt {1571 fn can_cast(kind: SyntaxKind) -> bool {1572 kind == MEMBER_BIND_STMT1573 }1574 fn cast(syntax: SyntaxNode) -> Option<Self> {1575 if Self::can_cast(syntax.kind()) {1576 Some(Self { syntax })1577 } else {1578 None1579 }1580 }1581 fn syntax(&self) -> &SyntaxNode {1582 &self.syntax1583 }1584}1585impl AstNode for ObjLocal {1586 fn can_cast(kind: SyntaxKind) -> bool {1587 kind == OBJ_LOCAL1588 }1589 fn cast(syntax: SyntaxNode) -> Option<Self> {1590 if Self::can_cast(syntax.kind()) {1591 Some(Self { syntax })1592 } else {1593 None1594 }1595 }1596 fn syntax(&self) -> &SyntaxNode {1597 &self.syntax1598 }1599}1600impl AstNode for MemberAssertStmt {1601 fn can_cast(kind: SyntaxKind) -> bool {1602 kind == MEMBER_ASSERT_STMT1603 }1604 fn cast(syntax: SyntaxNode) -> Option<Self> {1605 if Self::can_cast(syntax.kind()) {1606 Some(Self { syntax })1607 } else {1608 None1609 }1610 }1611 fn syntax(&self) -> &SyntaxNode {1612 &self.syntax1613 }1614}1615impl AstNode for MemberFieldNormal {1616 fn can_cast(kind: SyntaxKind) -> bool {1617 kind == MEMBER_FIELD_NORMAL1618 }1619 fn cast(syntax: SyntaxNode) -> Option<Self> {1620 if Self::can_cast(syntax.kind()) {1621 Some(Self { syntax })1622 } else {1623 None1624 }1625 }1626 fn syntax(&self) -> &SyntaxNode {1627 &self.syntax1628 }1629}1630impl AstNode for Visibility {1631 fn can_cast(kind: SyntaxKind) -> bool {1632 kind == VISIBILITY1633 }1634 fn cast(syntax: SyntaxNode) -> Option<Self> {1635 if Self::can_cast(syntax.kind()) {1636 Some(Self { syntax })1637 } else {1638 None1639 }1640 }1641 fn syntax(&self) -> &SyntaxNode {1642 &self.syntax1643 }1644}1645impl AstNode for MemberFieldMethod {1646 fn can_cast(kind: SyntaxKind) -> bool {1647 kind == MEMBER_FIELD_METHOD1648 }1649 fn cast(syntax: SyntaxNode) -> Option<Self> {1650 if Self::can_cast(syntax.kind()) {1651 Some(Self { syntax })1652 } else {1653 None1654 }1655 }1656 fn syntax(&self) -> &SyntaxNode {1657 &self.syntax1658 }1659}1660impl AstNode for FieldNameFixed {1661 fn can_cast(kind: SyntaxKind) -> bool {1662 kind == FIELD_NAME_FIXED1663 }1664 fn cast(syntax: SyntaxNode) -> Option<Self> {1665 if Self::can_cast(syntax.kind()) {1666 Some(Self { syntax })1667 } else {1668 None1669 }1670 }1671 fn syntax(&self) -> &SyntaxNode {1672 &self.syntax1673 }1674}1675impl AstNode for FieldNameDynamic {1676 fn can_cast(kind: SyntaxKind) -> bool {1677 kind == FIELD_NAME_DYNAMIC1678 }1679 fn cast(syntax: SyntaxNode) -> Option<Self> {1680 if Self::can_cast(syntax.kind()) {1681 Some(Self { syntax })1682 } else {1683 None1684 }1685 }1686 fn syntax(&self) -> &SyntaxNode {1687 &self.syntax1688 }1689}1690impl AstNode for ForSpec {1691 fn can_cast(kind: SyntaxKind) -> bool {1692 kind == FOR_SPEC1693 }1694 fn cast(syntax: SyntaxNode) -> Option<Self> {1695 if Self::can_cast(syntax.kind()) {1696 Some(Self { syntax })1697 } else {1698 None1699 }1700 }1701 fn syntax(&self) -> &SyntaxNode {1702 &self.syntax1703 }1704}1705impl AstNode for IfSpec {1706 fn can_cast(kind: SyntaxKind) -> bool {1707 kind == IF_SPEC1708 }1709 fn cast(syntax: SyntaxNode) -> Option<Self> {1710 if Self::can_cast(syntax.kind()) {1711 Some(Self { syntax })1712 } else {1713 None1714 }1715 }1716 fn syntax(&self) -> &SyntaxNode {1717 &self.syntax1718 }1719}1720impl AstNode for BindDestruct {1721 fn can_cast(kind: SyntaxKind) -> bool {1722 kind == BIND_DESTRUCT1723 }1724 fn cast(syntax: SyntaxNode) -> Option<Self> {1725 if Self::can_cast(syntax.kind()) {1726 Some(Self { syntax })1727 } else {1728 None1729 }1730 }1731 fn syntax(&self) -> &SyntaxNode {1732 &self.syntax1733 }1734}1735impl AstNode for BindFunction {1736 fn can_cast(kind: SyntaxKind) -> bool {1737 kind == BIND_FUNCTION1738 }1739 fn cast(syntax: SyntaxNode) -> Option<Self> {1740 if Self::can_cast(syntax.kind()) {1741 Some(Self { syntax })1742 } else {1743 None1744 }1745 }1746 fn syntax(&self) -> &SyntaxNode {1747 &self.syntax1748 }1749}1750impl AstNode for Param {1751 fn can_cast(kind: SyntaxKind) -> bool {1752 kind == PARAM1753 }1754 fn cast(syntax: SyntaxNode) -> Option<Self> {1755 if Self::can_cast(syntax.kind()) {1756 Some(Self { syntax })1757 } else {1758 None1759 }1760 }1761 fn syntax(&self) -> &SyntaxNode {1762 &self.syntax1763 }1764}1765impl AstNode for DestructFull {1766 fn can_cast(kind: SyntaxKind) -> bool {1767 kind == DESTRUCT_FULL1768 }1769 fn cast(syntax: SyntaxNode) -> Option<Self> {1770 if Self::can_cast(syntax.kind()) {1771 Some(Self { syntax })1772 } else {1773 None1774 }1775 }1776 fn syntax(&self) -> &SyntaxNode {1777 &self.syntax1778 }1779}1780impl AstNode for DestructSkip {1781 fn can_cast(kind: SyntaxKind) -> bool {1782 kind == DESTRUCT_SKIP1783 }1784 fn cast(syntax: SyntaxNode) -> Option<Self> {1785 if Self::can_cast(syntax.kind()) {1786 Some(Self { syntax })1787 } else {1788 None1789 }1790 }1791 fn syntax(&self) -> &SyntaxNode {1792 &self.syntax1793 }1794}1795impl AstNode for DestructArray {1796 fn can_cast(kind: SyntaxKind) -> bool {1797 kind == DESTRUCT_ARRAY1798 }1799 fn cast(syntax: SyntaxNode) -> Option<Self> {1800 if Self::can_cast(syntax.kind()) {1801 Some(Self { syntax })1802 } else {1803 None1804 }1805 }1806 fn syntax(&self) -> &SyntaxNode {1807 &self.syntax1808 }1809}1810impl AstNode for DestructObject {1811 fn can_cast(kind: SyntaxKind) -> bool {1812 kind == DESTRUCT_OBJECT1813 }1814 fn cast(syntax: SyntaxNode) -> Option<Self> {1815 if Self::can_cast(syntax.kind()) {1816 Some(Self { syntax })1817 } else {1818 None1819 }1820 }1821 fn syntax(&self) -> &SyntaxNode {1822 &self.syntax1823 }1824}1825impl AstNode for DestructObjectField {1826 fn can_cast(kind: SyntaxKind) -> bool {1827 kind == DESTRUCT_OBJECT_FIELD1828 }1829 fn cast(syntax: SyntaxNode) -> Option<Self> {1830 if Self::can_cast(syntax.kind()) {1831 Some(Self { syntax })1832 } else {1833 None1834 }1835 }1836 fn syntax(&self) -> &SyntaxNode {1837 &self.syntax1838 }1839}1840impl AstNode for DestructRest {1841 fn can_cast(kind: SyntaxKind) -> bool {1842 kind == DESTRUCT_REST1843 }1844 fn cast(syntax: SyntaxNode) -> Option<Self> {1845 if Self::can_cast(syntax.kind()) {1846 Some(Self { syntax })1847 } else {1848 None1849 }1850 }1851 fn syntax(&self) -> &SyntaxNode {1852 &self.syntax1853 }1854}1855impl AstNode for DestructArrayElement {1856 fn can_cast(kind: SyntaxKind) -> bool {1857 kind == DESTRUCT_ARRAY_ELEMENT1858 }1859 fn cast(syntax: SyntaxNode) -> Option<Self> {1860 if Self::can_cast(syntax.kind()) {1861 Some(Self { syntax })1862 } else {1863 None1864 }1865 }1866 fn syntax(&self) -> &SyntaxNode {1867 &self.syntax1868 }1869}1870impl From<SuffixIndex> for Suffix {1871 fn from(node: SuffixIndex) -> Suffix {1872 Suffix::SuffixIndex(node)1873 }1874}1875impl From<SuffixIndexExpr> for Suffix {1876 fn from(node: SuffixIndexExpr) -> Suffix {1877 Suffix::SuffixIndexExpr(node)1878 }1879}1880impl From<SuffixSlice> for Suffix {1881 fn from(node: SuffixSlice) -> Suffix {1882 Suffix::SuffixSlice(node)1883 }1884}1885impl From<SuffixApply> for Suffix {1886 fn from(node: SuffixApply) -> Suffix {1887 Suffix::SuffixApply(node)1888 }1889}1890impl AstNode for Suffix {1891 fn can_cast(kind: SyntaxKind) -> bool {1892 match kind {1893 SUFFIX_INDEX | SUFFIX_INDEX_EXPR | SUFFIX_SLICE | SUFFIX_APPLY => true,1894 _ => false,1895 }1896 }1897 fn cast(syntax: SyntaxNode) -> Option<Self> {1898 let res = match syntax.kind() {1899 SUFFIX_INDEX => Suffix::SuffixIndex(SuffixIndex { syntax }),1900 SUFFIX_INDEX_EXPR => Suffix::SuffixIndexExpr(SuffixIndexExpr { syntax }),1901 SUFFIX_SLICE => Suffix::SuffixSlice(SuffixSlice { syntax }),1902 SUFFIX_APPLY => Suffix::SuffixApply(SuffixApply { syntax }),1903 _ => return None,1904 };1905 Some(res)1906 }1907 fn syntax(&self) -> &SyntaxNode {1908 match self {1909 Suffix::SuffixIndex(it) => &it.syntax,1910 Suffix::SuffixIndexExpr(it) => &it.syntax,1911 Suffix::SuffixSlice(it) => &it.syntax,1912 Suffix::SuffixApply(it) => &it.syntax,1913 }1914 }1915}1916impl From<BindDestruct> for Bind {1917 fn from(node: BindDestruct) -> Bind {1918 Bind::BindDestruct(node)1919 }1920}1921impl From<BindFunction> for Bind {1922 fn from(node: BindFunction) -> Bind {1923 Bind::BindFunction(node)1924 }1925}1926impl AstNode for Bind {1927 fn can_cast(kind: SyntaxKind) -> bool {1928 match kind {1929 BIND_DESTRUCT | BIND_FUNCTION => true,1930 _ => false,1931 }1932 }1933 fn cast(syntax: SyntaxNode) -> Option<Self> {1934 let res = match syntax.kind() {1935 BIND_DESTRUCT => Bind::BindDestruct(BindDestruct { syntax }),1936 BIND_FUNCTION => Bind::BindFunction(BindFunction { syntax }),1937 _ => return None,1938 };1939 Some(res)1940 }1941 fn syntax(&self) -> &SyntaxNode {1942 match self {1943 Bind::BindDestruct(it) => &it.syntax,1944 Bind::BindFunction(it) => &it.syntax,1945 }1946 }1947}1948impl From<StmtLocal> for Stmt {1949 fn from(node: StmtLocal) -> Stmt {1950 Stmt::StmtLocal(node)1951 }1952}1953impl From<StmtAssert> for Stmt {1954 fn from(node: StmtAssert) -> Stmt {1955 Stmt::StmtAssert(node)1956 }1957}1958impl AstNode for Stmt {1959 fn can_cast(kind: SyntaxKind) -> bool {1960 match kind {1961 STMT_LOCAL | STMT_ASSERT => true,1962 _ => false,1963 }1964 }1965 fn cast(syntax: SyntaxNode) -> Option<Self> {1966 let res = match syntax.kind() {1967 STMT_LOCAL => Stmt::StmtLocal(StmtLocal { syntax }),1968 STMT_ASSERT => Stmt::StmtAssert(StmtAssert { syntax }),1969 _ => return None,1970 };1971 Some(res)1972 }1973 fn syntax(&self) -> &SyntaxNode {1974 match self {1975 Stmt::StmtLocal(it) => &it.syntax,1976 Stmt::StmtAssert(it) => &it.syntax,1977 }1978 }1979}1980impl From<ObjBodyComp> for ObjBody {1981 fn from(node: ObjBodyComp) -> ObjBody {1982 ObjBody::ObjBodyComp(node)1983 }1984}1985impl From<ObjBodyMemberList> for ObjBody {1986 fn from(node: ObjBodyMemberList) -> ObjBody {1987 ObjBody::ObjBodyMemberList(node)1988 }1989}1990impl AstNode for ObjBody {1991 fn can_cast(kind: SyntaxKind) -> bool {1992 match kind {1993 OBJ_BODY_COMP | OBJ_BODY_MEMBER_LIST => true,1994 _ => false,1995 }1996 }1997 fn cast(syntax: SyntaxNode) -> Option<Self> {1998 let res = match syntax.kind() {1999 OBJ_BODY_COMP => ObjBody::ObjBodyComp(ObjBodyComp { syntax }),2000 OBJ_BODY_MEMBER_LIST => ObjBody::ObjBodyMemberList(ObjBodyMemberList { syntax }),2001 _ => return None,2002 };2003 Some(res)2004 }2005 fn syntax(&self) -> &SyntaxNode {2006 match self {2007 ObjBody::ObjBodyComp(it) => &it.syntax,2008 ObjBody::ObjBodyMemberList(it) => &it.syntax,2009 }2010 }2011}2012impl From<ForSpec> for CompSpec {2013 fn from(node: ForSpec) -> CompSpec {2014 CompSpec::ForSpec(node)2015 }2016}2017impl From<IfSpec> for CompSpec {2018 fn from(node: IfSpec) -> CompSpec {2019 CompSpec::IfSpec(node)2020 }2021}2022impl AstNode for CompSpec {2023 fn can_cast(kind: SyntaxKind) -> bool {2024 match kind {2025 FOR_SPEC | IF_SPEC => true,2026 _ => false,2027 }2028 }2029 fn cast(syntax: SyntaxNode) -> Option<Self> {2030 let res = match syntax.kind() {2031 FOR_SPEC => CompSpec::ForSpec(ForSpec { syntax }),2032 IF_SPEC => CompSpec::IfSpec(IfSpec { syntax }),2033 _ => return None,2034 };2035 Some(res)2036 }2037 fn syntax(&self) -> &SyntaxNode {2038 match self {2039 CompSpec::ForSpec(it) => &it.syntax,2040 CompSpec::IfSpec(it) => &it.syntax,2041 }2042 }2043}2044impl From<ExprBinary> for ExprBase {2045 fn from(node: ExprBinary) -> ExprBase {2046 ExprBase::ExprBinary(node)2047 }2048}2049impl From<ExprUnary> for ExprBase {2050 fn from(node: ExprUnary) -> ExprBase {2051 ExprBase::ExprUnary(node)2052 }2053}2054impl From<ExprObjExtend> for ExprBase {2055 fn from(node: ExprObjExtend) -> ExprBase {2056 ExprBase::ExprObjExtend(node)2057 }2058}2059impl From<ExprParened> for ExprBase {2060 fn from(node: ExprParened) -> ExprBase {2061 ExprBase::ExprParened(node)2062 }2063}2064impl From<ExprString> for ExprBase {2065 fn from(node: ExprString) -> ExprBase {2066 ExprBase::ExprString(node)2067 }2068}2069impl From<ExprNumber> for ExprBase {2070 fn from(node: ExprNumber) -> ExprBase {2071 ExprBase::ExprNumber(node)2072 }2073}2074impl From<ExprLiteral> for ExprBase {2075 fn from(node: ExprLiteral) -> ExprBase {2076 ExprBase::ExprLiteral(node)2077 }2078}2079impl From<ExprArray> for ExprBase {2080 fn from(node: ExprArray) -> ExprBase {2081 ExprBase::ExprArray(node)2082 }2083}2084impl From<ExprObject> for ExprBase {2085 fn from(node: ExprObject) -> ExprBase {2086 ExprBase::ExprObject(node)2087 }2088}2089impl From<ExprArrayComp> for ExprBase {2090 fn from(node: ExprArrayComp) -> ExprBase {2091 ExprBase::ExprArrayComp(node)2092 }2093}2094impl From<ExprImport> for ExprBase {2095 fn from(node: ExprImport) -> ExprBase {2096 ExprBase::ExprImport(node)2097 }2098}2099impl From<ExprVar> for ExprBase {2100 fn from(node: ExprVar) -> ExprBase {2101 ExprBase::ExprVar(node)2102 }2103}2104impl From<ExprIfThenElse> for ExprBase {2105 fn from(node: ExprIfThenElse) -> ExprBase {2106 ExprBase::ExprIfThenElse(node)2107 }2108}2109impl From<ExprFunction> for ExprBase {2110 fn from(node: ExprFunction) -> ExprBase {2111 ExprBase::ExprFunction(node)2112 }2113}2114impl From<ExprError> for ExprBase {2115 fn from(node: ExprError) -> ExprBase {2116 ExprBase::ExprError(node)2117 }2118}2119impl AstNode for ExprBase {2120 fn can_cast(kind: SyntaxKind) -> bool {2121 match kind {2122 EXPR_BINARY | EXPR_UNARY | EXPR_OBJ_EXTEND | EXPR_PARENED | EXPR_STRING2123 | EXPR_NUMBER | EXPR_LITERAL | EXPR_ARRAY | EXPR_OBJECT | EXPR_ARRAY_COMP2124 | EXPR_IMPORT | EXPR_VAR | EXPR_IF_THEN_ELSE | EXPR_FUNCTION | EXPR_ERROR => true,2125 _ => false,2126 }2127 }2128 fn cast(syntax: SyntaxNode) -> Option<Self> {2129 let res = match syntax.kind() {2130 EXPR_BINARY => ExprBase::ExprBinary(ExprBinary { syntax }),2131 EXPR_UNARY => ExprBase::ExprUnary(ExprUnary { syntax }),2132 EXPR_OBJ_EXTEND => ExprBase::ExprObjExtend(ExprObjExtend { syntax }),2133 EXPR_PARENED => ExprBase::ExprParened(ExprParened { syntax }),2134 EXPR_STRING => ExprBase::ExprString(ExprString { syntax }),2135 EXPR_NUMBER => ExprBase::ExprNumber(ExprNumber { syntax }),2136 EXPR_LITERAL => ExprBase::ExprLiteral(ExprLiteral { syntax }),2137 EXPR_ARRAY => ExprBase::ExprArray(ExprArray { syntax }),2138 EXPR_OBJECT => ExprBase::ExprObject(ExprObject { syntax }),2139 EXPR_ARRAY_COMP => ExprBase::ExprArrayComp(ExprArrayComp { syntax }),2140 EXPR_IMPORT => ExprBase::ExprImport(ExprImport { syntax }),2141 EXPR_VAR => ExprBase::ExprVar(ExprVar { syntax }),2142 EXPR_IF_THEN_ELSE => ExprBase::ExprIfThenElse(ExprIfThenElse { syntax }),2143 EXPR_FUNCTION => ExprBase::ExprFunction(ExprFunction { syntax }),2144 EXPR_ERROR => ExprBase::ExprError(ExprError { syntax }),2145 _ => return None,2146 };2147 Some(res)2148 }2149 fn syntax(&self) -> &SyntaxNode {2150 match self {2151 ExprBase::ExprBinary(it) => &it.syntax,2152 ExprBase::ExprUnary(it) => &it.syntax,2153 ExprBase::ExprObjExtend(it) => &it.syntax,2154 ExprBase::ExprParened(it) => &it.syntax,2155 ExprBase::ExprString(it) => &it.syntax,2156 ExprBase::ExprNumber(it) => &it.syntax,2157 ExprBase::ExprLiteral(it) => &it.syntax,2158 ExprBase::ExprArray(it) => &it.syntax,2159 ExprBase::ExprObject(it) => &it.syntax,2160 ExprBase::ExprArrayComp(it) => &it.syntax,2161 ExprBase::ExprImport(it) => &it.syntax,2162 ExprBase::ExprVar(it) => &it.syntax,2163 ExprBase::ExprIfThenElse(it) => &it.syntax,2164 ExprBase::ExprFunction(it) => &it.syntax,2165 ExprBase::ExprError(it) => &it.syntax,2166 }2167 }2168}2169impl From<MemberBindStmt> for MemberComp {2170 fn from(node: MemberBindStmt) -> MemberComp {2171 MemberComp::MemberBindStmt(node)2172 }2173}2174impl From<MemberFieldNormal> for MemberComp {2175 fn from(node: MemberFieldNormal) -> MemberComp {2176 MemberComp::MemberFieldNormal(node)2177 }2178}2179impl From<MemberFieldMethod> for MemberComp {2180 fn from(node: MemberFieldMethod) -> MemberComp {2181 MemberComp::MemberFieldMethod(node)2182 }2183}2184impl AstNode for MemberComp {2185 fn can_cast(kind: SyntaxKind) -> bool {2186 match kind {2187 MEMBER_BIND_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => true,2188 _ => false,2189 }2190 }2191 fn cast(syntax: SyntaxNode) -> Option<Self> {2192 let res = match syntax.kind() {2193 MEMBER_BIND_STMT => MemberComp::MemberBindStmt(MemberBindStmt { syntax }),2194 MEMBER_FIELD_NORMAL => MemberComp::MemberFieldNormal(MemberFieldNormal { syntax }),2195 MEMBER_FIELD_METHOD => MemberComp::MemberFieldMethod(MemberFieldMethod { syntax }),2196 _ => return None,2197 };2198 Some(res)2199 }2200 fn syntax(&self) -> &SyntaxNode {2201 match self {2202 MemberComp::MemberBindStmt(it) => &it.syntax,2203 MemberComp::MemberFieldNormal(it) => &it.syntax,2204 MemberComp::MemberFieldMethod(it) => &it.syntax,2205 }2206 }2207}2208impl From<MemberBindStmt> for Member {2209 fn from(node: MemberBindStmt) -> Member {2210 Member::MemberBindStmt(node)2211 }2212}2213impl From<MemberAssertStmt> for Member {2214 fn from(node: MemberAssertStmt) -> Member {2215 Member::MemberAssertStmt(node)2216 }2217}2218impl From<MemberFieldNormal> for Member {2219 fn from(node: MemberFieldNormal) -> Member {2220 Member::MemberFieldNormal(node)2221 }2222}2223impl From<MemberFieldMethod> for Member {2224 fn from(node: MemberFieldMethod) -> Member {2225 Member::MemberFieldMethod(node)2226 }2227}2228impl AstNode for Member {2229 fn can_cast(kind: SyntaxKind) -> bool {2230 match kind {2231 MEMBER_BIND_STMT | MEMBER_ASSERT_STMT | MEMBER_FIELD_NORMAL | MEMBER_FIELD_METHOD => {2232 true2233 }2234 _ => false,2235 }2236 }2237 fn cast(syntax: SyntaxNode) -> Option<Self> {2238 let res = match syntax.kind() {2239 MEMBER_BIND_STMT => Member::MemberBindStmt(MemberBindStmt { syntax }),2240 MEMBER_ASSERT_STMT => Member::MemberAssertStmt(MemberAssertStmt { syntax }),2241 MEMBER_FIELD_NORMAL => Member::MemberFieldNormal(MemberFieldNormal { syntax }),2242 MEMBER_FIELD_METHOD => Member::MemberFieldMethod(MemberFieldMethod { syntax }),2243 _ => return None,2244 };2245 Some(res)2246 }2247 fn syntax(&self) -> &SyntaxNode {2248 match self {2249 Member::MemberBindStmt(it) => &it.syntax,2250 Member::MemberAssertStmt(it) => &it.syntax,2251 Member::MemberFieldNormal(it) => &it.syntax,2252 Member::MemberFieldMethod(it) => &it.syntax,2253 }2254 }2255}2256impl From<FieldNameFixed> for FieldName {2257 fn from(node: FieldNameFixed) -> FieldName {2258 FieldName::FieldNameFixed(node)2259 }2260}2261impl From<FieldNameDynamic> for FieldName {2262 fn from(node: FieldNameDynamic) -> FieldName {2263 FieldName::FieldNameDynamic(node)2264 }2265}2266impl AstNode for FieldName {2267 fn can_cast(kind: SyntaxKind) -> bool {2268 match kind {2269 FIELD_NAME_FIXED | FIELD_NAME_DYNAMIC => true,2270 _ => false,2271 }2272 }2273 fn cast(syntax: SyntaxNode) -> Option<Self> {2274 let res = match syntax.kind() {2275 FIELD_NAME_FIXED => FieldName::FieldNameFixed(FieldNameFixed { syntax }),2276 FIELD_NAME_DYNAMIC => FieldName::FieldNameDynamic(FieldNameDynamic { syntax }),2277 _ => return None,2278 };2279 Some(res)2280 }2281 fn syntax(&self) -> &SyntaxNode {2282 match self {2283 FieldName::FieldNameFixed(it) => &it.syntax,2284 FieldName::FieldNameDynamic(it) => &it.syntax,2285 }2286 }2287}2288impl From<DestructFull> for Destruct {2289 fn from(node: DestructFull) -> Destruct {2290 Destruct::DestructFull(node)2291 }2292}2293impl From<DestructSkip> for Destruct {2294 fn from(node: DestructSkip) -> Destruct {2295 Destruct::DestructSkip(node)2296 }2297}2298impl From<DestructArray> for Destruct {2299 fn from(node: DestructArray) -> Destruct {2300 Destruct::DestructArray(node)2301 }2302}2303impl From<DestructObject> for Destruct {2304 fn from(node: DestructObject) -> Destruct {2305 Destruct::DestructObject(node)2306 }2307}2308impl AstNode for Destruct {2309 fn can_cast(kind: SyntaxKind) -> bool {2310 match kind {2311 DESTRUCT_FULL | DESTRUCT_SKIP | DESTRUCT_ARRAY | DESTRUCT_OBJECT => true,2312 _ => false,2313 }2314 }2315 fn cast(syntax: SyntaxNode) -> Option<Self> {2316 let res = match syntax.kind() {2317 DESTRUCT_FULL => Destruct::DestructFull(DestructFull { syntax }),2318 DESTRUCT_SKIP => Destruct::DestructSkip(DestructSkip { syntax }),2319 DESTRUCT_ARRAY => Destruct::DestructArray(DestructArray { syntax }),2320 DESTRUCT_OBJECT => Destruct::DestructObject(DestructObject { syntax }),2321 _ => return None,2322 };2323 Some(res)2324 }2325 fn syntax(&self) -> &SyntaxNode {2326 match self {2327 Destruct::DestructFull(it) => &it.syntax,2328 Destruct::DestructSkip(it) => &it.syntax,2329 Destruct::DestructArray(it) => &it.syntax,2330 Destruct::DestructObject(it) => &it.syntax,2331 }2332 }2333}2334impl From<DestructArrayElement> for DestructArrayPart {2335 fn from(node: DestructArrayElement) -> DestructArrayPart {2336 DestructArrayPart::DestructArrayElement(node)2337 }2338}2339impl From<DestructRest> for DestructArrayPart {2340 fn from(node: DestructRest) -> DestructArrayPart {2341 DestructArrayPart::DestructRest(node)2342 }2343}2344impl AstNode for DestructArrayPart {2345 fn can_cast(kind: SyntaxKind) -> bool {2346 match kind {2347 DESTRUCT_ARRAY_ELEMENT | DESTRUCT_REST => true,2348 _ => false,2349 }2350 }2351 fn cast(syntax: SyntaxNode) -> Option<Self> {2352 let res = match syntax.kind() {2353 DESTRUCT_ARRAY_ELEMENT => {2354 DestructArrayPart::DestructArrayElement(DestructArrayElement { syntax })2355 }2356 DESTRUCT_REST => DestructArrayPart::DestructRest(DestructRest { syntax }),2357 _ => return None,2358 };2359 Some(res)2360 }2361 fn syntax(&self) -> &SyntaxNode {2362 match self {2363 DestructArrayPart::DestructArrayElement(it) => &it.syntax,2364 DestructArrayPart::DestructRest(it) => &it.syntax,2365 }2366 }2367}2368impl AstToken for BinaryOperator {2369 fn can_cast(kind: SyntaxKind) -> bool {2370 BinaryOperatorKind::can_cast(kind)2371 }2372 fn cast(syntax: SyntaxToken) -> Option<Self> {2373 let kind = BinaryOperatorKind::cast(syntax.kind())?;2374 Some(BinaryOperator { syntax, kind })2375 }2376 fn syntax(&self) -> &SyntaxToken {2377 &self.syntax2378 }2379}2380impl BinaryOperatorKind {2381 fn can_cast(kind: SyntaxKind) -> bool {2382 match kind {2383 OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE2384 | IN_KW | LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | META_OBJECT_APPLY2385 | ERROR_NO_OPERATOR => true,2386 _ => false,2387 }2388 }2389 pub fn cast(kind: SyntaxKind) -> Option<Self> {2390 let res = match kind {2391 OR => Self::Or,2392 NULL_COAELSE => Self::NullCoaelse,2393 AND => Self::And,2394 BIT_OR => Self::BitOr,2395 BIT_XOR => Self::BitXor,2396 BIT_AND => Self::BitAnd,2397 EQ => Self::Eq,2398 NE => Self::Ne,2399 LT => Self::Lt,2400 GT => Self::Gt,2401 LE => Self::Le,2402 GE => Self::Ge,2403 IN_KW => Self::InKw,2404 LHS => Self::Lhs,2405 RHS => Self::Rhs,2406 PLUS => Self::Plus,2407 MINUS => Self::Minus,2408 MUL => Self::Mul,2409 DIV => Self::Div,2410 MODULO => Self::Modulo,2411 META_OBJECT_APPLY => Self::MetaObjectApply,2412 ERROR_NO_OPERATOR => Self::ErrorNoOperator,2413 _ => return None,2414 };2415 Some(res)2416 }2417}2418impl BinaryOperator {2419 pub fn kind(&self) -> BinaryOperatorKind {2420 self.kind2421 }2422}2423impl std::fmt::Display for BinaryOperator {2424 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2425 std::fmt::Display::fmt(self.syntax(), f)2426 }2427}2428impl AstToken for UnaryOperator {2429 fn can_cast(kind: SyntaxKind) -> bool {2430 UnaryOperatorKind::can_cast(kind)2431 }2432 fn cast(syntax: SyntaxToken) -> Option<Self> {2433 let kind = UnaryOperatorKind::cast(syntax.kind())?;2434 Some(UnaryOperator { syntax, kind })2435 }2436 fn syntax(&self) -> &SyntaxToken {2437 &self.syntax2438 }2439}2440impl UnaryOperatorKind {2441 fn can_cast(kind: SyntaxKind) -> bool {2442 match kind {2443 MINUS | NOT | BIT_NOT => true,2444 _ => false,2445 }2446 }2447 pub fn cast(kind: SyntaxKind) -> Option<Self> {2448 let res = match kind {2449 MINUS => Self::Minus,2450 NOT => Self::Not,2451 BIT_NOT => Self::BitNot,2452 _ => return None,2453 };2454 Some(res)2455 }2456}2457impl UnaryOperator {2458 pub fn kind(&self) -> UnaryOperatorKind {2459 self.kind2460 }2461}2462impl std::fmt::Display for UnaryOperator {2463 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2464 std::fmt::Display::fmt(self.syntax(), f)2465 }2466}2467impl AstToken for Literal {2468 fn can_cast(kind: SyntaxKind) -> bool {2469 LiteralKind::can_cast(kind)2470 }2471 fn cast(syntax: SyntaxToken) -> Option<Self> {2472 let kind = LiteralKind::cast(syntax.kind())?;2473 Some(Literal { syntax, kind })2474 }2475 fn syntax(&self) -> &SyntaxToken {2476 &self.syntax2477 }2478}2479impl LiteralKind {2480 fn can_cast(kind: SyntaxKind) -> bool {2481 match kind {2482 NULL_KW | TRUE_KW | FALSE_KW | SELF_KW | DOLLAR | SUPER_KW => true,2483 _ => false,2484 }2485 }2486 pub fn cast(kind: SyntaxKind) -> Option<Self> {2487 let res = match kind {2488 NULL_KW => Self::NullKw,2489 TRUE_KW => Self::TrueKw,2490 FALSE_KW => Self::FalseKw,2491 SELF_KW => Self::SelfKw,2492 DOLLAR => Self::Dollar,2493 SUPER_KW => Self::SuperKw,2494 _ => return None,2495 };2496 Some(res)2497 }2498}2499impl Literal {2500 pub fn kind(&self) -> LiteralKind {2501 self.kind2502 }2503}2504impl std::fmt::Display for Literal {2505 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2506 std::fmt::Display::fmt(self.syntax(), f)2507 }2508}2509impl AstToken for Text {2510 fn can_cast(kind: SyntaxKind) -> bool {2511 TextKind::can_cast(kind)2512 }2513 fn cast(syntax: SyntaxToken) -> Option<Self> {2514 let kind = TextKind::cast(syntax.kind())?;2515 Some(Text { syntax, kind })2516 }2517 fn syntax(&self) -> &SyntaxToken {2518 &self.syntax2519 }2520}2521impl TextKind {2522 fn can_cast(kind: SyntaxKind) -> bool {2523 match kind {2524 STRING_DOUBLE2525 | ERROR_STRING_DOUBLE_UNTERMINATED2526 | STRING_SINGLE2527 | ERROR_STRING_SINGLE_UNTERMINATED2528 | STRING_DOUBLE_VERBATIM2529 | ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED2530 | STRING_SINGLE_VERBATIM2531 | ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED2532 | ERROR_STRING_VERBATIM_MISSING_QUOTES2533 | STRING_BLOCK2534 | ERROR_STRING_BLOCK_UNEXPECTED_END2535 | ERROR_STRING_BLOCK_MISSING_NEW_LINE2536 | ERROR_STRING_BLOCK_MISSING_TERMINATION2537 | ERROR_STRING_BLOCK_MISSING_INDENT => true,2538 _ => false,2539 }2540 }2541 pub fn cast(kind: SyntaxKind) -> Option<Self> {2542 let res = match kind {2543 STRING_DOUBLE => Self::StringDouble,2544 ERROR_STRING_DOUBLE_UNTERMINATED => Self::ErrorStringDoubleUnterminated,2545 STRING_SINGLE => Self::StringSingle,2546 ERROR_STRING_SINGLE_UNTERMINATED => Self::ErrorStringSingleUnterminated,2547 STRING_DOUBLE_VERBATIM => Self::StringDoubleVerbatim,2548 ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED => {2549 Self::ErrorStringDoubleVerbatimUnterminated2550 }2551 STRING_SINGLE_VERBATIM => Self::StringSingleVerbatim,2552 ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED => {2553 Self::ErrorStringSingleVerbatimUnterminated2554 }2555 ERROR_STRING_VERBATIM_MISSING_QUOTES => Self::ErrorStringVerbatimMissingQuotes,2556 STRING_BLOCK => Self::StringBlock,2557 ERROR_STRING_BLOCK_UNEXPECTED_END => Self::ErrorStringBlockUnexpectedEnd,2558 ERROR_STRING_BLOCK_MISSING_NEW_LINE => Self::ErrorStringBlockMissingNewLine,2559 ERROR_STRING_BLOCK_MISSING_TERMINATION => Self::ErrorStringBlockMissingTermination,2560 ERROR_STRING_BLOCK_MISSING_INDENT => Self::ErrorStringBlockMissingIndent,2561 _ => return None,2562 };2563 Some(res)2564 }2565}2566impl Text {2567 pub fn kind(&self) -> TextKind {2568 self.kind2569 }2570}2571impl std::fmt::Display for Text {2572 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2573 std::fmt::Display::fmt(self.syntax(), f)2574 }2575}2576impl AstToken for Number {2577 fn can_cast(kind: SyntaxKind) -> bool {2578 NumberKind::can_cast(kind)2579 }2580 fn cast(syntax: SyntaxToken) -> Option<Self> {2581 let kind = NumberKind::cast(syntax.kind())?;2582 Some(Number { syntax, kind })2583 }2584 fn syntax(&self) -> &SyntaxToken {2585 &self.syntax2586 }2587}2588impl NumberKind {2589 fn can_cast(kind: SyntaxKind) -> bool {2590 match kind {2591 FLOAT2592 | ERROR_FLOAT_JUNK_AFTER_POINT2593 | ERROR_FLOAT_JUNK_AFTER_EXPONENT2594 | ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => true,2595 _ => false,2596 }2597 }2598 pub fn cast(kind: SyntaxKind) -> Option<Self> {2599 let res = match kind {2600 FLOAT => Self::Float,2601 ERROR_FLOAT_JUNK_AFTER_POINT => Self::ErrorFloatJunkAfterPoint,2602 ERROR_FLOAT_JUNK_AFTER_EXPONENT => Self::ErrorFloatJunkAfterExponent,2603 ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN => Self::ErrorFloatJunkAfterExponentSign,2604 _ => return None,2605 };2606 Some(res)2607 }2608}2609impl Number {2610 pub fn kind(&self) -> NumberKind {2611 self.kind2612 }2613}2614impl std::fmt::Display for Number {2615 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2616 std::fmt::Display::fmt(self.syntax(), f)2617 }2618}2619impl AstToken for ImportKind {2620 fn can_cast(kind: SyntaxKind) -> bool {2621 ImportKindKind::can_cast(kind)2622 }2623 fn cast(syntax: SyntaxToken) -> Option<Self> {2624 let kind = ImportKindKind::cast(syntax.kind())?;2625 Some(ImportKind { syntax, kind })2626 }2627 fn syntax(&self) -> &SyntaxToken {2628 &self.syntax2629 }2630}2631impl ImportKindKind {2632 fn can_cast(kind: SyntaxKind) -> bool {2633 match kind {2634 IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW => true,2635 _ => false,2636 }2637 }2638 pub fn cast(kind: SyntaxKind) -> Option<Self> {2639 let res = match kind {2640 IMPORTSTR_KW => Self::ImportstrKw,2641 IMPORTBIN_KW => Self::ImportbinKw,2642 IMPORT_KW => Self::ImportKw,2643 _ => return None,2644 };2645 Some(res)2646 }2647}2648impl ImportKind {2649 pub fn kind(&self) -> ImportKindKind {2650 self.kind2651 }2652}2653impl std::fmt::Display for ImportKind {2654 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2655 std::fmt::Display::fmt(self.syntax(), f)2656 }2657}2658impl AstToken for Trivia {2659 fn can_cast(kind: SyntaxKind) -> bool {2660 TriviaKind::can_cast(kind)2661 }2662 fn cast(syntax: SyntaxToken) -> Option<Self> {2663 let kind = TriviaKind::cast(syntax.kind())?;2664 Some(Trivia { syntax, kind })2665 }2666 fn syntax(&self) -> &SyntaxToken {2667 &self.syntax2668 }2669}2670impl TriviaKind {2671 fn can_cast(kind: SyntaxKind) -> bool {2672 match kind {2673 WHITESPACE2674 | MULTI_LINE_COMMENT2675 | ERROR_COMMENT_TOO_SHORT2676 | ERROR_COMMENT_UNTERMINATED2677 | SINGLE_LINE_HASH_COMMENT2678 | SINGLE_LINE_SLASH_COMMENT => true,2679 _ => false,2680 }2681 }2682 pub fn cast(kind: SyntaxKind) -> Option<Self> {2683 let res = match kind {2684 WHITESPACE => Self::Whitespace,2685 MULTI_LINE_COMMENT => Self::MultiLineComment,2686 ERROR_COMMENT_TOO_SHORT => Self::ErrorCommentTooShort,2687 ERROR_COMMENT_UNTERMINATED => Self::ErrorCommentUnterminated,2688 SINGLE_LINE_HASH_COMMENT => Self::SingleLineHashComment,2689 SINGLE_LINE_SLASH_COMMENT => Self::SingleLineSlashComment,2690 _ => return None,2691 };2692 Some(res)2693 }2694}2695impl Trivia {2696 pub fn kind(&self) -> TriviaKind {2697 self.kind2698 }2699}2700impl std::fmt::Display for Trivia {2701 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2702 std::fmt::Display::fmt(self.syntax(), f)2703 }2704}2705impl AstToken for CustomError {2706 fn can_cast(kind: SyntaxKind) -> bool {2707 CustomErrorKind::can_cast(kind)2708 }2709 fn cast(syntax: SyntaxToken) -> Option<Self> {2710 let kind = CustomErrorKind::cast(syntax.kind())?;2711 Some(CustomError { syntax, kind })2712 }2713 fn syntax(&self) -> &SyntaxToken {2714 &self.syntax2715 }2716}2717impl CustomErrorKind {2718 fn can_cast(kind: SyntaxKind) -> bool {2719 match kind {2720 ERROR_MISSING_TOKEN | ERROR_UNEXPECTED_TOKEN | ERROR_CUSTOM => true,2721 _ => false,2722 }2723 }2724 pub fn cast(kind: SyntaxKind) -> Option<Self> {2725 let res = match kind {2726 ERROR_MISSING_TOKEN => Self::ErrorMissingToken,2727 ERROR_UNEXPECTED_TOKEN => Self::ErrorUnexpectedToken,2728 ERROR_CUSTOM => Self::ErrorCustom,2729 _ => return None,2730 };2731 Some(res)2732 }2733}2734impl CustomError {2735 pub fn kind(&self) -> CustomErrorKind {2736 self.kind2737 }2738}2739impl std::fmt::Display for CustomError {2740 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2741 std::fmt::Display::fmt(self.syntax(), f)2742 }2743}2744impl std::fmt::Display for Suffix {2745 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2746 std::fmt::Display::fmt(self.syntax(), f)2747 }2748}2749impl std::fmt::Display for Bind {2750 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2751 std::fmt::Display::fmt(self.syntax(), f)2752 }2753}2754impl std::fmt::Display for Stmt {2755 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2756 std::fmt::Display::fmt(self.syntax(), f)2757 }2758}2759impl std::fmt::Display for ObjBody {2760 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2761 std::fmt::Display::fmt(self.syntax(), f)2762 }2763}2764impl std::fmt::Display for CompSpec {2765 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2766 std::fmt::Display::fmt(self.syntax(), f)2767 }2768}2769impl std::fmt::Display for ExprBase {2770 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2771 std::fmt::Display::fmt(self.syntax(), f)2772 }2773}2774impl std::fmt::Display for MemberComp {2775 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2776 std::fmt::Display::fmt(self.syntax(), f)2777 }2778}2779impl std::fmt::Display for Member {2780 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2781 std::fmt::Display::fmt(self.syntax(), f)2782 }2783}2784impl std::fmt::Display for FieldName {2785 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2786 std::fmt::Display::fmt(self.syntax(), f)2787 }2788}2789impl std::fmt::Display for Destruct {2790 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2791 std::fmt::Display::fmt(self.syntax(), f)2792 }2793}2794impl std::fmt::Display for DestructArrayPart {2795 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2796 std::fmt::Display::fmt(self.syntax(), f)2797 }2798}2799impl std::fmt::Display for SourceFile {2800 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2801 std::fmt::Display::fmt(self.syntax(), f)2802 }2803}2804impl std::fmt::Display for Expr {2805 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2806 std::fmt::Display::fmt(self.syntax(), f)2807 }2808}2809impl std::fmt::Display for SuffixIndex {2810 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2811 std::fmt::Display::fmt(self.syntax(), f)2812 }2813}2814impl std::fmt::Display for Name {2815 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2816 std::fmt::Display::fmt(self.syntax(), f)2817 }2818}2819impl std::fmt::Display for SuffixIndexExpr {2820 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2821 std::fmt::Display::fmt(self.syntax(), f)2822 }2823}2824impl std::fmt::Display for SuffixSlice {2825 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2826 std::fmt::Display::fmt(self.syntax(), f)2827 }2828}2829impl std::fmt::Display for SliceDesc {2830 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2831 std::fmt::Display::fmt(self.syntax(), f)2832 }2833}2834impl std::fmt::Display for SuffixApply {2835 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2836 std::fmt::Display::fmt(self.syntax(), f)2837 }2838}2839impl std::fmt::Display for ArgsDesc {2840 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2841 std::fmt::Display::fmt(self.syntax(), f)2842 }2843}2844impl std::fmt::Display for StmtLocal {2845 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2846 std::fmt::Display::fmt(self.syntax(), f)2847 }2848}2849impl std::fmt::Display for StmtAssert {2850 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2851 std::fmt::Display::fmt(self.syntax(), f)2852 }2853}2854impl std::fmt::Display for Assertion {2855 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2856 std::fmt::Display::fmt(self.syntax(), f)2857 }2858}2859impl std::fmt::Display for ExprBinary {2860 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2861 std::fmt::Display::fmt(self.syntax(), f)2862 }2863}2864impl std::fmt::Display for ExprUnary {2865 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2866 std::fmt::Display::fmt(self.syntax(), f)2867 }2868}2869impl std::fmt::Display for ExprObjExtend {2870 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2871 std::fmt::Display::fmt(self.syntax(), f)2872 }2873}2874impl std::fmt::Display for ExprParened {2875 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2876 std::fmt::Display::fmt(self.syntax(), f)2877 }2878}2879impl std::fmt::Display for ExprLiteral {2880 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2881 std::fmt::Display::fmt(self.syntax(), f)2882 }2883}2884impl std::fmt::Display for ExprString {2885 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2886 std::fmt::Display::fmt(self.syntax(), f)2887 }2888}2889impl std::fmt::Display for ExprNumber {2890 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2891 std::fmt::Display::fmt(self.syntax(), f)2892 }2893}2894impl std::fmt::Display for ExprArray {2895 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2896 std::fmt::Display::fmt(self.syntax(), f)2897 }2898}2899impl std::fmt::Display for ExprObject {2900 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2901 std::fmt::Display::fmt(self.syntax(), f)2902 }2903}2904impl std::fmt::Display for ExprArrayComp {2905 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2906 std::fmt::Display::fmt(self.syntax(), f)2907 }2908}2909impl std::fmt::Display for ExprImport {2910 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2911 std::fmt::Display::fmt(self.syntax(), f)2912 }2913}2914impl std::fmt::Display for ExprVar {2915 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2916 std::fmt::Display::fmt(self.syntax(), f)2917 }2918}2919impl std::fmt::Display for ExprIfThenElse {2920 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2921 std::fmt::Display::fmt(self.syntax(), f)2922 }2923}2924impl std::fmt::Display for TrueExpr {2925 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2926 std::fmt::Display::fmt(self.syntax(), f)2927 }2928}2929impl std::fmt::Display for FalseExpr {2930 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2931 std::fmt::Display::fmt(self.syntax(), f)2932 }2933}2934impl std::fmt::Display for ExprFunction {2935 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2936 std::fmt::Display::fmt(self.syntax(), f)2937 }2938}2939impl std::fmt::Display for ParamsDesc {2940 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2941 std::fmt::Display::fmt(self.syntax(), f)2942 }2943}2944impl std::fmt::Display for ExprError {2945 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2946 std::fmt::Display::fmt(self.syntax(), f)2947 }2948}2949impl std::fmt::Display for SliceDescEnd {2950 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2951 std::fmt::Display::fmt(self.syntax(), f)2952 }2953}2954impl std::fmt::Display for SliceDescStep {2955 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2956 std::fmt::Display::fmt(self.syntax(), f)2957 }2958}2959impl std::fmt::Display for Arg {2960 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2961 std::fmt::Display::fmt(self.syntax(), f)2962 }2963}2964impl std::fmt::Display for ObjBodyComp {2965 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2966 std::fmt::Display::fmt(self.syntax(), f)2967 }2968}2969impl std::fmt::Display for ObjBodyMemberList {2970 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2971 std::fmt::Display::fmt(self.syntax(), f)2972 }2973}2974impl std::fmt::Display for MemberBindStmt {2975 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2976 std::fmt::Display::fmt(self.syntax(), f)2977 }2978}2979impl std::fmt::Display for ObjLocal {2980 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2981 std::fmt::Display::fmt(self.syntax(), f)2982 }2983}2984impl std::fmt::Display for MemberAssertStmt {2985 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2986 std::fmt::Display::fmt(self.syntax(), f)2987 }2988}2989impl std::fmt::Display for MemberFieldNormal {2990 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2991 std::fmt::Display::fmt(self.syntax(), f)2992 }2993}2994impl std::fmt::Display for Visibility {2995 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {2996 std::fmt::Display::fmt(self.syntax(), f)2997 }2998}2999impl std::fmt::Display for MemberFieldMethod {3000 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3001 std::fmt::Display::fmt(self.syntax(), f)3002 }3003}3004impl std::fmt::Display for FieldNameFixed {3005 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3006 std::fmt::Display::fmt(self.syntax(), f)3007 }3008}3009impl std::fmt::Display for FieldNameDynamic {3010 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3011 std::fmt::Display::fmt(self.syntax(), f)3012 }3013}3014impl std::fmt::Display for ForSpec {3015 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3016 std::fmt::Display::fmt(self.syntax(), f)3017 }3018}3019impl std::fmt::Display for IfSpec {3020 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3021 std::fmt::Display::fmt(self.syntax(), f)3022 }3023}3024impl std::fmt::Display for BindDestruct {3025 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3026 std::fmt::Display::fmt(self.syntax(), f)3027 }3028}3029impl std::fmt::Display for BindFunction {3030 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3031 std::fmt::Display::fmt(self.syntax(), f)3032 }3033}3034impl std::fmt::Display for Param {3035 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3036 std::fmt::Display::fmt(self.syntax(), f)3037 }3038}3039impl std::fmt::Display for DestructFull {3040 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3041 std::fmt::Display::fmt(self.syntax(), f)3042 }3043}3044impl std::fmt::Display for DestructSkip {3045 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3046 std::fmt::Display::fmt(self.syntax(), f)3047 }3048}3049impl std::fmt::Display for DestructArray {3050 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3051 std::fmt::Display::fmt(self.syntax(), f)3052 }3053}3054impl std::fmt::Display for DestructObject {3055 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3056 std::fmt::Display::fmt(self.syntax(), f)3057 }3058}3059impl std::fmt::Display for DestructObjectField {3060 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3061 std::fmt::Display::fmt(self.syntax(), f)3062 }3063}3064impl std::fmt::Display for DestructRest {3065 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3066 std::fmt::Display::fmt(self.syntax(), f)3067 }3068}3069impl std::fmt::Display for DestructArrayElement {3070 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {3071 std::fmt::Display::fmt(self.syntax(), f)3072 }3073}crates/jrsonnet-rowan-parser/src/marker.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/marker.rs
+++ b/crates/jrsonnet-rowan-parser/src/marker.rs
@@ -3,9 +3,9 @@
use drop_bomb::DropBomb;
use crate::{
+ SyntaxKind,
event::Event,
parser::{ExpectedSyntax, Parser, SyntaxError},
- SyntaxKind,
};
// pub struct Ranger {
crates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -3,13 +3,13 @@
use rowan::{GreenNode, TextRange};
use crate::{
+ AstToken, SyntaxKind,
+ SyntaxKind::*,
+ SyntaxNode, T, TS,
event::Event,
marker::{CompletedMarker, Marker},
nodes::{BinaryOperatorKind, Literal, Number, Text, UnaryOperatorKind},
token_set::SyntaxKindSet,
- AstToken, SyntaxKind,
- SyntaxKind::*,
- SyntaxNode, T, TS,
};
pub struct Parse {
@@ -923,8 +923,7 @@
let m = p.start();
p.bump();
- let _ = expr_binding_power(p, right_binding_power)
- .map(|v| v.precede(p).complete(p, EXPR));
+ let _ = expr_binding_power(p, right_binding_power).map(|v| v.precede(p).complete(p, EXPR));
m.complete(p, EXPR_UNARY)
} else if p.at(T!['(']) {
let m = p.start();
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -3,7 +3,7 @@
use hi_doc::{Formatting, SnippetBuilder, Text};
-use crate::{parse, AstNode};
+use crate::{AstNode, parse};
fn process(text: &str) -> String {
use std::fmt::Write;
crates/jrsonnet-stdlib/Cargo.tomldiffbeforeafterboth--- a/crates/jrsonnet-stdlib/Cargo.toml
+++ b/crates/jrsonnet-stdlib/Cargo.toml
@@ -17,8 +17,8 @@
exp-bigint = ["dep:num-bigint", "jrsonnet-evaluator/exp-bigint"]
exp-null-coaelse = [
- "jrsonnet-ir/exp-null-coaelse",
- "jrsonnet-evaluator/exp-null-coaelse",
+ "jrsonnet-ir/exp-null-coaelse",
+ "jrsonnet-evaluator/exp-null-coaelse",
]
# std.regexMatch and other helpers
exp-regex = ["dep:regex", "dep:lru", "dep:rustc-hash"]
crates/jrsonnet-stdlib/src/arrays.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/arrays.rs
+++ b/crates/jrsonnet-stdlib/src/arrays.rs
@@ -1,12 +1,11 @@
#![allow(non_snake_case)]
use jrsonnet_evaluator::{
- bail,
- function::{builtin, FuncVal, NativeFn},
+ Either, IStr, ObjValue, ObjValueBuilder, Result, ResultExt, Thunk, Val, bail,
+ function::{FuncVal, NativeFn, builtin},
runtime_error,
typed::{BoundedI32, BoundedUsize, Either2, FromUntyped},
- val::{equals, ArrValue, IndexableVal},
- Either, IStr, ObjValue, ObjValueBuilder, Result, ResultExt, Thunk, Val,
+ val::{ArrValue, IndexableVal, equals},
};
pub fn eval_on_empty(on_empty: Option<Thunk<Val>>) -> Result<Val> {
crates/jrsonnet-stdlib/src/compat.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/compat.rs
+++ b/crates/jrsonnet-stdlib/src/compat.rs
@@ -1,7 +1,7 @@
use std::cmp::Ordering;
use jrsonnet_evaluator::{
- function::builtin, operator::evaluate_compare_op, val::ArrValue, Result, Val,
+ Result, Val, function::builtin, operator::evaluate_compare_op, val::ArrValue,
};
#[builtin]
crates/jrsonnet-stdlib/src/encoding.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/encoding.rs
+++ b/crates/jrsonnet-stdlib/src/encoding.rs
@@ -1,10 +1,9 @@
-use base64::{engine::general_purpose::STANDARD, Engine};
+use base64::{Engine, engine::general_purpose::STANDARD};
use jrsonnet_evaluator::{
- bail,
+ IBytes, IStr, Result, bail,
function::builtin,
runtime_error,
typed::{Either, Either2},
- IBytes, IStr, Result,
};
#[builtin]
crates/jrsonnet-stdlib/src/hash.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/hash.rs
+++ b/crates/jrsonnet-stdlib/src/hash.rs
@@ -1,4 +1,4 @@
-use jrsonnet_evaluator::{function::builtin, IStr};
+use jrsonnet_evaluator::{IStr, function::builtin};
#[builtin]
pub fn builtin_md5(s: IStr) -> String {
crates/jrsonnet-stdlib/src/keyf.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/keyf.rs
+++ b/crates/jrsonnet-stdlib/src/keyf.rs
@@ -1,6 +1,8 @@
-use jrsonnet_evaluator::function::{CallLocation, FuncVal, PreparedFuncVal};
-use jrsonnet_evaluator::typed::{ComplexValType, FromUntyped, Typed, ValType};
-use jrsonnet_evaluator::{Error, Result, Thunk, Val};
+use jrsonnet_evaluator::{
+ Error, Result, Thunk, Val,
+ function::{CallLocation, FuncVal, PreparedFuncVal},
+ typed::{ComplexValType, FromUntyped, Typed, ValType},
+};
#[derive(Default, Clone)]
pub enum KeyF {
crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -12,12 +12,12 @@
pub use encoding::*;
pub use hash::*;
use jrsonnet_evaluator::{
+ ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val,
error::Result,
function::{CallLocation, FuncVal},
tla::TlaArg,
trace::PathResolver,
val::NumValue,
- ContextBuilder, IStr, ObjValue, ObjValueBuilder, Thunk, Val,
};
use jrsonnet_gcmodule::{Acyclic, Cc, Trace};
use jrsonnet_ir::Source;
crates/jrsonnet-stdlib/src/manifest/ini.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/manifest/ini.rs
+++ b/crates/jrsonnet-stdlib/src/manifest/ini.rs
@@ -1,9 +1,9 @@
use std::collections::BTreeMap;
use jrsonnet_evaluator::{
+ IStr, ObjValue, Result, ResultExt, Val,
manifest::{ManifestFormat, ToStringFormat},
typed::{FromUntyped, Typed},
- IStr, ObjValue, Result, ResultExt, Val,
};
pub struct IniFormat {
crates/jrsonnet-stdlib/src/manifest/mod.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/manifest/mod.rs
+++ b/crates/jrsonnet-stdlib/src/manifest/mod.rs
@@ -6,9 +6,9 @@
pub use ini::IniFormat;
use jrsonnet_evaluator::{
+ IStr, ObjValue, Result, Val,
function::builtin,
- manifest::{escape_string_json, JsonFormat, YamlStreamFormat},
- IStr, ObjValue, Result, Val,
+ manifest::{JsonFormat, YamlStreamFormat, escape_string_json},
};
pub use python::{PythonFormat, PythonVarsFormat};
pub use toml::TomlFormat;
crates/jrsonnet-stdlib/src/manifest/python.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/manifest/python.rs
+++ b/crates/jrsonnet-stdlib/src/manifest/python.rs
@@ -1,7 +1,6 @@
use jrsonnet_evaluator::{
- bail,
- manifest::{escape_string_json_buf, ManifestFormat, ToStringFormat},
- Result, Val,
+ Result, Val, bail,
+ manifest::{ManifestFormat, ToStringFormat, escape_string_json_buf},
};
pub struct PythonFormat {
crates/jrsonnet-stdlib/src/manifest/toml.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/manifest/toml.rs
+++ b/crates/jrsonnet-stdlib/src/manifest/toml.rs
@@ -1,10 +1,9 @@
use std::borrow::Cow;
use jrsonnet_evaluator::{
- bail, in_description_frame,
- manifest::{escape_string_json_buf, ManifestFormat},
+ IStr, ObjValue, Result, ResultExt, Val, bail, in_description_frame,
+ manifest::{ManifestFormat, escape_string_json_buf},
val::ArrValue,
- IStr, ObjValue, Result, ResultExt, Val,
};
pub struct TomlFormat<'s> {
crates/jrsonnet-stdlib/src/manifest/xml.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/manifest/xml.rs
+++ b/crates/jrsonnet-stdlib/src/manifest/xml.rs
@@ -1,9 +1,8 @@
use jrsonnet_evaluator::{
- bail, in_description_frame,
+ Either, ObjValue, Result, ResultExt, Val, bail, in_description_frame,
manifest::{ManifestFormat, ToStringFormat},
typed::{ComplexValType, Either2, FromUntyped, Typed, ValType},
val::ArrValue,
- Either, ObjValue, Result, ResultExt, Val,
};
pub struct XmlJsonmlFormat {
crates/jrsonnet-stdlib/src/manifest/yaml.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/manifest/yaml.rs
+++ b/crates/jrsonnet-stdlib/src/manifest/yaml.rs
@@ -1,9 +1,8 @@
use std::{borrow::Cow, fmt::Write};
use jrsonnet_evaluator::{
- bail, in_description_frame,
- manifest::{escape_string_json_buf, ManifestFormat},
- Result, ResultExt, Val,
+ Result, ResultExt, Val, bail, in_description_frame,
+ manifest::{ManifestFormat, escape_string_json_buf},
};
pub struct YamlFormat<'s> {
crates/jrsonnet-stdlib/src/math.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/math.rs
+++ b/crates/jrsonnet-stdlib/src/math.rs
@@ -9,11 +9,7 @@
#[builtin]
pub fn builtin_sign(n: f64) -> f64 {
- if n == 0. {
- 0.
- } else {
- n.signum()
- }
+ if n == 0. { 0. } else { n.signum() }
}
#[builtin]
crates/jrsonnet-stdlib/src/misc.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/misc.rs
+++ b/crates/jrsonnet-stdlib/src/misc.rs
@@ -1,13 +1,12 @@
use std::{cell::RefCell, collections::BTreeSet};
use jrsonnet_evaluator::{
- bail,
+ Either, IStr, ObjValue, ObjValueBuilder, ResultExt, Thunk, Val, bail,
error::{ErrorKind::*, Result},
- function::{builtin, CallLocation, FuncVal},
+ function::{CallLocation, FuncVal, builtin},
manifest::JsonFormat,
typed::{Either2, Either4},
- val::{equals, ArrValue},
- Either, IStr, ObjValue, ObjValueBuilder, ResultExt, Thunk, Val,
+ val::{ArrValue, equals},
};
use jrsonnet_gcmodule::Cc;
@@ -202,7 +201,9 @@
for field in target_fields.union(&patch_fields) {
let Some(field_patch) = patch.get(field.clone())? else {
// All lazy fields might be unified into a single filtered object core instead of creating a thunk per, but this implementation is good enough.
- let target_field = target.get_lazy(field.clone()).expect("we're iterating over fields union, if field is missing in patch - it exists in target");
+ let target_field = target.get_lazy(field.clone()).expect(
+ "we're iterating over fields union, if field is missing in patch - it exists in target",
+ );
out.field(field.clone()).thunk(target_field);
continue;
};
crates/jrsonnet-stdlib/src/objects.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/objects.rs
+++ b/crates/jrsonnet-stdlib/src/objects.rs
@@ -1,9 +1,9 @@
use jrsonnet_evaluator::{
+ IStr, ObjValue, ObjValueBuilder,
function::builtin,
gc::WithCapacityExt,
rustc_hash::FxHashSet,
val::{ArrValue, Val},
- IStr, ObjValue, ObjValueBuilder,
};
#[builtin]
crates/jrsonnet-stdlib/src/operator.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/operator.rs
+++ b/crates/jrsonnet-stdlib/src/operator.rs
@@ -2,12 +2,12 @@
//! However, in our case we instead implement them in native, and implement native functions on top of core for backwards compatibility
use jrsonnet_evaluator::{
+ IStr, Result, Val,
function::builtin,
operator::evaluate_mod_op,
stdlib::std_format,
typed::{Either, Either2},
- val::{equals, primitive_equals, NumValue},
- IStr, Result, Val,
+ val::{NumValue, equals, primitive_equals},
};
#[builtin]
crates/jrsonnet-stdlib/src/parse.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/parse.rs
+++ b/crates/jrsonnet-stdlib/src/parse.rs
@@ -1,4 +1,4 @@
-use jrsonnet_evaluator::{function::builtin, runtime_error, IStr, Result, Val};
+use jrsonnet_evaluator::{IStr, Result, Val, function::builtin, runtime_error};
#[builtin]
pub fn builtin_parse_json(str: IStr) -> Result<Val> {
crates/jrsonnet-stdlib/src/regex.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/regex.rs
+++ b/crates/jrsonnet-stdlib/src/regex.rs
@@ -2,11 +2,11 @@
use ::regex::Regex;
use jrsonnet_evaluator::{
+ IStr, ObjValue, ObjValueBuilder,
error::{ErrorKind::*, Result},
rustc_hash::FxBuildHasher,
typed::{IntoUntyped, Typed},
val::StrValue,
- IStr, ObjValue, ObjValueBuilder,
};
use jrsonnet_gcmodule::Acyclic;
use jrsonnet_macros::builtin;
crates/jrsonnet-stdlib/src/sets.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/sets.rs
+++ b/crates/jrsonnet-stdlib/src/sets.rs
@@ -1,7 +1,7 @@
use std::cmp::Ordering;
use jrsonnet_evaluator::{
- function::builtin, operator::evaluate_compare_op, val::ArrValue, Result, Thunk, Val,
+ Result, Thunk, Val, function::builtin, operator::evaluate_compare_op, val::ArrValue,
};
use jrsonnet_ir::BinaryOpType;
crates/jrsonnet-stdlib/src/sort.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/sort.rs
+++ b/crates/jrsonnet-stdlib/src/sort.rs
@@ -3,11 +3,10 @@
use std::cmp::Ordering;
use jrsonnet_evaluator::{
- bail,
+ Result, Thunk, Val, bail,
function::builtin,
operator::evaluate_compare_op,
- val::{equals, ArrValue},
- Result, Thunk, Val,
+ val::{ArrValue, equals},
};
use jrsonnet_ir::BinaryOpType;
crates/jrsonnet-stdlib/src/strings.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/strings.rs
+++ b/crates/jrsonnet-stdlib/src/strings.rs
@@ -1,12 +1,11 @@
use std::collections::BTreeSet;
use jrsonnet_evaluator::{
- bail,
+ Either, IStr, Val, bail,
error::{ErrorKind::*, Result},
function::builtin,
typed::{Either2, FromUntyped, M1},
val::{ArrValue, IndexableVal},
- Either, IStr, Val,
};
#[builtin]
@@ -206,8 +205,8 @@
#[cfg(feature = "exp-bigint")]
#[builtin]
pub fn builtin_bigint(v: Either![f64, IStr]) -> Result<Val> {
+ use Either2::*;
use jrsonnet_evaluator::runtime_error;
- use Either2::*;
Ok(match v {
A(a) => {
Val::BigInt(Box::new(a.to_string().parse().map_err(|e| {
crates/jrsonnet-stdlib/src/types.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/src/types.rs
+++ b/crates/jrsonnet-stdlib/src/types.rs
@@ -1,4 +1,4 @@
-use jrsonnet_evaluator::{function::builtin, IStr, Val};
+use jrsonnet_evaluator::{IStr, Val, function::builtin};
#[builtin]
pub fn builtin_type(x: Val) -> IStr {
flake.lockdiffbeforeafterboth--- a/flake.lock
+++ b/flake.lock
@@ -2,18 +2,40 @@
"nodes": {
"crane": {
"locked": {
- "lastModified": 1770419512,
- "owner": "ipetkov",
+ "lastModified": 1775245625,
+ "owner": "CertainLach",
"repo": "crane",
- "rev": "2510f2cbc3ccd237f700bb213756a8f35c32d8d7",
+ "rev": "9c67a3098774323d0270004eed7d7291ddcfe918",
"type": "github"
},
"original": {
- "owner": "ipetkov",
+ "owner": "CertainLach",
+ "ref": "refactor/drop-remarshal",
"repo": "crane",
"type": "github"
}
},
+ "fenix": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "rust-analyzer-src": "rust-analyzer-src"
+ },
+ "locked": {
+ "lastModified": 1775272531,
+ "owner": "CertainLach",
+ "repo": "fenix",
+ "rev": "831116e5887552af53f2998dcb46e1d55dc0850e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "CertainLach",
+ "ref": "fix/libatomic",
+ "repo": "fenix",
+ "type": "github"
+ }
+ },
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@@ -21,10 +43,10 @@
]
},
"locked": {
- "lastModified": 1769996383,
+ "lastModified": 1775087534,
"owner": "hercules-ci",
"repo": "flake-parts",
- "rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
+ "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
"type": "github"
},
"original": {
@@ -33,12 +55,34 @@
"type": "github"
}
},
+ "hercules-ci-effects": {
+ "inputs": {
+ "flake-parts": [
+ "flake-parts"
+ ],
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1773550609,
+ "owner": "hercules-ci",
+ "repo": "hercules-ci-effects",
+ "rev": "554f6ed448ca74c00aa2371cde901ae1e73005b9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "hercules-ci-effects",
+ "type": "github"
+ }
+ },
"nixpkgs": {
"locked": {
- "lastModified": 1770468184,
+ "lastModified": 1775270577,
"owner": "nixos",
"repo": "nixpkgs",
- "rev": "a124a10ea33a73329c42d67f30efcdbfb60a4e04",
+ "rev": "9370b0614498381a0019e082c10e9cf8413e7c2c",
"type": "github"
},
"original": {
@@ -51,28 +95,28 @@
"root": {
"inputs": {
"crane": "crane",
+ "fenix": "fenix",
"flake-parts": "flake-parts",
+ "hercules-ci-effects": "hercules-ci-effects",
"nixpkgs": "nixpkgs",
- "rust-overlay": "rust-overlay",
- "shelly": "shelly"
+ "shelly": "shelly",
+ "treefmt-nix": "treefmt-nix"
}
},
- "rust-overlay": {
- "inputs": {
- "nixpkgs": [
- "nixpkgs"
- ]
- },
+ "rust-analyzer-src": {
+ "flake": false,
"locked": {
- "lastModified": 1770433312,
- "owner": "oxalica",
- "repo": "rust-overlay",
- "rev": "9922ff9f99a6436756cbe6f5d11f9c3630e58cf0",
+ "lastModified": 1775174431,
+ "narHash": "sha256-jSw1C5MuyySiCpPgjdR+H0wPR3AgPRuylLunw+yd7A0=",
+ "owner": "rust-lang",
+ "repo": "rust-analyzer",
+ "rev": "9767050b2db436f5a770c5f91a548c88fd91ec71",
"type": "github"
},
"original": {
- "owner": "oxalica",
- "repo": "rust-overlay",
+ "owner": "rust-lang",
+ "ref": "nightly",
+ "repo": "rust-analyzer",
"type": "github"
}
},
@@ -89,6 +133,25 @@
"repo": "shelly",
"type": "github"
}
+ },
+ "treefmt-nix": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1775125835,
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "75925962939880974e3ab417879daffcba36c4a3",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
}
},
"root": "root",
flake.nixdiffbeforeafterboth--- a/flake.nix
+++ b/flake.nix
@@ -2,46 +2,219 @@
description = "Jrsonnet";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/release-25.11";
- rust-overlay = {
- url = "github:oxalica/rust-overlay";
+ fenix = {
+ url = "github:CertainLach/fenix/fix/libatomic";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs";
};
- crane.url = "github:ipetkov/crane";
+ hercules-ci-effects = {
+ url = "github:hercules-ci/hercules-ci-effects";
+ inputs.flake-parts.follows = "flake-parts";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ treefmt-nix = {
+ url = "github:numtide/treefmt-nix";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ crane.url = "github:CertainLach/crane/refactor/drop-remarshal";
shelly.url = "github:CertainLach/shelly";
};
outputs =
- inputs@{
- nixpkgs,
- flake-parts,
- rust-overlay,
- crane,
- shelly,
- ...
- }:
- flake-parts.lib.mkFlake { inherit inputs; } {
- imports = [ shelly.flakeModule ];
- systems = inputs.nixpkgs.lib.systems.flakeExposed;
+ inputs:
+ let
+ inherit (inputs.nixpkgs.lib)
+ mkIf
+ mkForce
+ optionals
+ optionalAttrs
+ ;
+ in
+ inputs.flake-parts.lib.mkFlake { inherit inputs; } {
+ imports = [
+ inputs.shelly.flakeModule
+ inputs.hercules-ci-effects.flakeModule
+ ];
+ systems = [
+ "x86_64-linux"
+ "i686-linux"
+ "aarch64-linux"
+ "armv7l-linux"
+ "aarch64-darwin"
+ ];
perSystem =
{
config,
+ self',
system,
...
}:
let
- pkgs = import nixpkgs {
+ pkgs = import inputs.nixpkgs {
inherit system;
- overlays = [ rust-overlay.overlays.default ];
+ overlays = [ inputs.fenix.overlays.default ];
config.allowUnsupportedSystem = true;
+ config.allowUnfreePredicate = pkg: pkg.name == "Xcode.app";
+ };
+ targetArch = pkgs.stdenv.hostPlatform.parsed.cpu.name;
+ rustfmt = (pkgs.fenix.complete or pkgs.fenix.stable).rustfmt;
+ toolchain = pkgs.fenix.combine [
+ (pkgs.fenix.stable.withComponents [
+ "cargo"
+ "clippy"
+ "rustc"
+ "rust-src"
+ ])
+ rustfmt
+ ];
+ craneLib = (inputs.crane.mkLib pkgs).overrideToolchain toolchain;
+ treefmt =
+ (inputs.treefmt-nix.lib.evalModule pkgs (import ./treefmt.nix { inherit rustfmt; })).config.build;
+
+ # Cross-compilation toolchains
+ crossToolchain = pkgs.fenix.combine [
+ (pkgs.fenix.stable.withComponents [
+ "cargo"
+ "rustc"
+ ])
+ pkgs.fenix.targets."${targetArch}-unknown-linux-musl".stable.rust-std
+ pkgs.fenix.targets."${targetArch}-apple-darwin".stable.rust-std
+ ];
+ craneLibCross = (inputs.crane.mkLib pkgs).overrideToolchain crossToolchain;
+
+ # Windows cross-compilation
+ pkgsWindows = import inputs.nixpkgs {
+ overlays = [ inputs.fenix.overlays.default ];
+ localSystem = system;
+ crossSystem = {
+ config = "${targetArch}-w64-mingw32";
+ libc = "msvcrt";
+ };
};
- rust = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
- craneLib = (crane.mkLib pkgs).overrideToolchain rust;
+ windowsToolchain = pkgs.fenix.combine [
+ (pkgs.fenix.stable.withComponents [
+ "cargo"
+ "rustc"
+ ])
+ pkgs.fenix.targets."${targetArch}-pc-windows-gnu".stable.rust-std
+ ];
+ craneLibWindows = (inputs.crane.mkLib pkgsWindows).overrideToolchain (_: windowsToolchain);
+
in
{
legacyPackages = {
+ release = optionalAttrs pkgs.stdenv.hostPlatform.isLinux (
+ {
+ jrsonnet-linux-glibc = self'.packages.jrsonnet;
+ jrsonnet-experimental-linux-glibc = self'.packages.jrsonnet-experimental;
+ }
+ // optionalAttrs pkgs.stdenv.hostPlatform.is64bit rec {
+ jrsonnet-linux-musl = pkgs.callPackage ./nix/jrsonnet-cross-musl.nix {
+ craneLib = craneLibCross;
+ targetTriple = "${targetArch}-unknown-linux-musl";
+ muslCC = pkgs.pkgsMusl.stdenv.cc;
+ };
+ jrsonnet-experimental-linux-musl = jrsonnet-linux-musl.override {
+ withExperimentalFeatures = true;
+ };
+ }
+ // optionalAttrs (targetArch == "aarch64") rec {
+ jrsonnet-darwin = pkgs.callPackage ./nix/jrsonnet-cross-darwin.nix {
+ craneLib = craneLibCross;
+ targetTriple = "${targetArch}-apple-darwin";
+ };
+ jrsonnet-experimental-darwin = jrsonnet-darwin.override {
+ withExperimentalFeatures = true;
+ };
+ }
+ // optionalAttrs (targetArch == "x86_64") rec {
+ jrsonnet-windows = pkgsWindows.callPackage ./nix/jrsonnet-cross-windows.nix {
+ craneLib = craneLibWindows;
+ targetTriple = "${targetArch}-pc-windows-gnu";
+ };
+ jrsonnet-experimental-windows = jrsonnet-windows.override {
+ withExperimentalFeatures = true;
+ };
+ }
+ );
+ benchmarks = optionalAttrs (system == "x86_64-linux" || system == "aarch64-linux") {
+ default = pkgs.callPackage ./nix/benchmarks.nix {
+ inherit (config.legacyPackages.jsonnetImpls)
+ go-jsonnet
+ sjsonnet
+ cpp-jsonnet
+ rsjsonnet
+ ;
+ jrsonnetVariants = [
+ {
+ drv = self'.packages.jrsonnet.override { forBenchmarks = true; };
+ name = "";
+ }
+ ];
+ };
+ quick = pkgs.callPackage ./nix/benchmarks.nix {
+ inherit (config.legacyPackages.jsonnetImpls)
+ go-jsonnet
+ sjsonnet
+ cpp-jsonnet
+ rsjsonnet
+ ;
+ quick = true;
+ jrsonnetVariants = [
+ {
+ drv = self'.packages.jrsonnet.override { forBenchmarks = true; };
+ name = "";
+ }
+ ];
+ };
+ against-release = pkgs.callPackage ./nix/benchmarks.nix {
+ inherit (config.legacyPackages.jsonnetImpls)
+ go-jsonnet
+ sjsonnet
+ cpp-jsonnet
+ rsjsonnet
+ ;
+ jrsonnetVariants = [
+ {
+ drv = self'.packages.jrsonnet.override { forBenchmarks = true; };
+ name = "current";
+ }
+ {
+ drv = self'.packages.jrsonnet-experimental.override { forBenchmarks = true; };
+ name = "current-experimental";
+ }
+ {
+ drv = self'.legacyPackages.jsonnetImpls.jrsonnet-release.override { forBenchmarks = true; };
+ name = "release";
+ }
+ ];
+ };
+ quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {
+ inherit (config.legacyPackages.jsonnetImpls)
+ go-jsonnet
+ sjsonnet
+ cpp-jsonnet
+ rsjsonnet
+ ;
+ quick = true;
+ jrsonnetVariants = [
+ {
+ drv = self'.packages.jrsonnet.override { forBenchmarks = true; };
+ name = "current";
+ }
+ {
+ drv = self'.packages.jrsonnet-experimental.override { forBenchmarks = true; };
+ name = "current-experimental";
+ }
+ {
+ drv = self'.legacyPackages.jsonnetImpls.jrsonnet-release.override { forBenchmarks = true; };
+ name = "release";
+ }
+ ];
+ };
+ };
jsonnetImpls = {
go-jsonnet = pkgs.callPackage ./nix/go-jsonnet.nix { };
sjsonnet = pkgs.callPackage ./nix/sjsonnet.nix { };
@@ -49,101 +222,33 @@
# I didn't managed to build it, and nixpkgs version is marked as broken
# haskell-jsonnet = pkgs.callPackage ./nix/haskell-jsonnet.nix { };
rsjsonnet = pkgs.callPackage ./nix/rsjsonnet.nix { };
+ # Older released version of jrsonnet itself, for benchmarking purposes
+ jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {
+ rustPlatform = pkgs.makeRustPlatform {
+ rustc = toolchain;
+ cargo = toolchain;
+ };
+ };
};
};
- packages = rec {
- default = jrsonnet;
-
- jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix {
- inherit craneLib;
- };
- jrsonnet-experimental = pkgs.callPackage ./nix/jrsonnet.nix {
- inherit craneLib;
- withExperimentalFeatures = true;
- };
-
- jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {
- rustPlatform = pkgs.makeRustPlatform {
- rustc = rust;
- cargo = rust;
+ packages =
+ let
+ jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix {
+ inherit craneLib;
};
- };
-
- benchmarks = pkgs.callPackage ./nix/benchmarks.nix {
- inherit (config.legacyPackages.jsonnetImpls)
- go-jsonnet
- sjsonnet
- cpp-jsonnet
- rsjsonnet
- ;
- jrsonnetVariants = [
- {
- drv = jrsonnet.override { forBenchmarks = true; };
- name = "";
- }
- ];
+ jrsonnet-experimental = pkgs.callPackage ./nix/jrsonnet.nix {
+ inherit craneLib;
+ withExperimentalFeatures = true;
+ };
+ in
+ {
+ default = jrsonnet;
+ inherit jrsonnet jrsonnet-experimental;
};
- benchmarks-quick = pkgs.callPackage ./nix/benchmarks.nix {
- inherit (config.legacyPackages.jsonnetImpls)
- go-jsonnet
- sjsonnet
- cpp-jsonnet
- rsjsonnet
- ;
- quick = true;
- jrsonnetVariants = [
- {
- drv = jrsonnet.override { forBenchmarks = true; };
- name = "";
- }
- ];
- };
- benchmarks-against-release = pkgs.callPackage ./nix/benchmarks.nix {
- inherit (config.legacyPackages.jsonnetImpls)
- go-jsonnet
- sjsonnet
- cpp-jsonnet
- rsjsonnet
- ;
- jrsonnetVariants = [
- {
- drv = jrsonnet.override { forBenchmarks = true; };
- name = "current";
- }
- {
- drv = jrsonnet-experimental.override { forBenchmarks = true; };
- name = "current-experimental";
- }
- {
- drv = jrsonnet-release.override { forBenchmarks = true; };
- name = "release";
- }
- ];
- };
- benchmarks-quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {
- inherit (config.legacyPackages.jsonnetImpls)
- go-jsonnet
- sjsonnet
- cpp-jsonnet
- rsjsonnet
- ;
- quick = true;
- jrsonnetVariants = [
- {
- drv = jrsonnet.override { forBenchmarks = true; };
- name = "current";
- }
- {
- drv = jrsonnet-experimental.override { forBenchmarks = true; };
- name = "current-experimental";
- }
- {
- drv = jrsonnet-release.override { forBenchmarks = true; };
- name = "release";
- }
- ];
- };
+ checks = optionalAttrs (system != "armv7l-linux") {
+ formatting = treefmt.check inputs.self;
};
+ formatter = mkIf (system != "armv7l-linux") treefmt.wrapper;
shelly.shells.default = {
factory = craneLib.devShell;
packages =
@@ -158,11 +263,126 @@
hyperfine
graphviz
]
- ++ lib.optionals (!stdenv.isDarwin) [
+ ++ optionals (!stdenv.isDarwin) [
valgrind
kdePackages.kcachegrind
];
};
};
+ hercules-ci.github-releases.files =
+ let
+ rel = system: inputs.self.legacyPackages.${system}.release;
+ bin = drv: "${drv}/bin/jrsonnet";
+ exe = drv: "${drv}/bin/jrsonnet.exe";
+ in
+ [
+ {
+ label = "jrsonnet-x86_64-linux-musl";
+ path = bin (rel "x86_64-linux").jrsonnet-linux-musl;
+ }
+ {
+ label = "jrsonnet-experimental-x86_64-linux-musl";
+ path = bin (rel "x86_64-linux").jrsonnet-experimental-linux-musl;
+ }
+ {
+ label = "jrsonnet-aarch64-darwin";
+ path = bin (rel "aarch64-linux").jrsonnet-darwin;
+ }
+ {
+ label = "jrsonnet-experimental-aarch64-darwin";
+ path = bin (rel "aarch64-linux").jrsonnet-experimental-darwin;
+ }
+ {
+ label = "jrsonnet-x86_64-windows.exe";
+ path = exe (rel "x86_64-linux").jrsonnet-windows;
+ }
+ {
+ label = "jrsonnet-experimental-x86_64-windows.exe";
+ path = exe (rel "x86_64-linux").jrsonnet-experimental-windows;
+ }
+
+ {
+ label = "jrsonnet-aarch64-linux-musl";
+ path = bin (rel "aarch64-linux").jrsonnet-linux-musl;
+ }
+ {
+ label = "jrsonnet-experimental-aarch64-linux-musl";
+ path = bin (rel "aarch64-linux").jrsonnet-experimental-linux-musl;
+ }
+
+ {
+ label = "jrsonnet-x86_64-linux-glibc";
+ path = bin (rel "x86_64-linux").jrsonnet-linux-glibc;
+ }
+ {
+ label = "jrsonnet-experimental-x86_64-linux-glibc";
+ path = bin (rel "x86_64-linux").jrsonnet-experimental-linux-glibc;
+ }
+ {
+ label = "jrsonnet-aarch64-linux-glibc";
+ path = bin (rel "aarch64-linux").jrsonnet-linux-glibc;
+ }
+ {
+ label = "jrsonnet-experimental-aarch64-linux-glibc";
+ path = bin (rel "aarch64-linux").jrsonnet-experimental-linux-glibc;
+ }
+ {
+ label = "jrsonnet-i686-linux-glibc";
+ path = bin (rel "i686-linux").jrsonnet-linux-glibc;
+ }
+ {
+ label = "jrsonnet-experimental-i686-linux-glibc";
+ path = bin (rel "i686-linux").jrsonnet-experimental-linux-glibc;
+ }
+ {
+ label = "jrsonnet-armv7l-linux-glibc";
+ path = bin (rel "armv7l-linux").jrsonnet-linux-glibc;
+ }
+ {
+ label = "jrsonnet-experimental-armv7l-linux-glibc";
+ path = bin (rel "armv7l-linux").jrsonnet-experimental-linux-glibc;
+ }
+ ];
+ hercules-ci.cargo-publish = {
+ enable = true;
+ secretName = "crates-io";
+ };
+ hercules-ci.flake-update = {
+ enable = true;
+ baseMerge.enable = true;
+ baseMerge.method = "fast-forward";
+ when = {
+ dayOfWeek = [ "Sat" ];
+ };
+ };
+ herculesCI =
+ { lib, config, ... }:
+ {
+ ciSystems = [
+ "x86_64-linux"
+ "i686-linux"
+ "aarch64-linux"
+ "armv7l-linux"
+ # TODO: add workers for these platforms
+ # "aarch64-darwin"
+ ];
+ onPush.default.outputs = {
+ benchmarks.x86_64-linux = inputs.self.legacyPackages.x86_64-linux.benchmarks.default;
+
+ # Cross: musl/mingw/darwin-zigbuild
+ release.x86_64-linux = inputs.self.legacyPackages.x86_64-linux.release;
+ release.aarch64-linux = inputs.self.legacyPackages.aarch64-linux.release;
+ release.armv7l-linux = inputs.self.legacyPackages.armv7l-linux.release;
+ release.i686-linux = inputs.self.legacyPackages.i686-linux.release;
+
+ # Too much to build for CI purposes
+ devShells = mkForce { };
+ formatter = mkForce { };
+
+ # No need to run them on different arch, pretty large derivations and might try to compile GHC
+ checks.i686-linux.formatting = mkForce { };
+ checks.aarch64-linux.formatting = mkForce { };
+ };
+ };
};
}
nix/benchmarks.nixdiffbeforeafterboth--- a/nix/benchmarks.nix
+++ b/nix/benchmarks.nix
@@ -53,7 +53,7 @@
in
stdenv.mkDerivation {
name = "benchmarks";
- __impure = true;
+ # __impure = true; # not supported by hercules-ci
unpackPhase = "true";
buildInputs = [
@@ -143,7 +143,9 @@
"\"sjsonnet-native $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (native)\""
} \
${
- optionalString (skipScala == "")
+ # My aarch64-linux machine can't run graalvm image:
+ # The current machine does not support all of the following CPU features that are required by the image: [FP, ASIMD, CRC32, LSE].
+ optionalString (skipScala == "" && stdenv.hostPlatform.system != "aarch64-linux")
"\"sjsonnet-graalvm $path${optionalString (vendor != "") " -J ${vendor}"}\" -n \"Scala (GraalVM)\""
} \
${optionalString (skipCpp == "")
@@ -174,9 +176,14 @@
echo "* C++: $(jsonnet --version)" >> $out
echo "* Scala (native/GraalVM): $(sjsonnet-native 2>&1 | grep -oP 'Sjsonnet \S+')" >> $out
echo "* Rust (alternative): rsjsonnet ${rsjsonnet.version} (${rsjsonnet.src.rev})" >> $out
- ${concatStringsSep "\n" (forEach jrsonnetVariants (variant:
- "echo \"* Rust${if variant.name != "" then " (${variant.name})" else ""}: $(${variant.drv}/bin/jrsonnet --version 2>&1)\" >> $out"
- ))}
+ ${concatStringsSep "\n" (
+ forEach jrsonnetVariants (
+ variant:
+ "echo \"* Rust${
+ if variant.name != "" then " (${variant.name})" else ""
+ }: $(${variant.drv}/bin/jrsonnet --version 2>&1)\" >> $out"
+ )
+ )}
echo "====" >> $out
echo >> $out
''}
nix/jrsonnet-cross-darwin.nixdiffbeforeafterboth--- /dev/null
+++ b/nix/jrsonnet-cross-darwin.nix
@@ -0,0 +1,49 @@
+{
+ lib,
+ craneLib,
+ cargo-zigbuild,
+ zig,
+ darwin,
+ targetTriple,
+ withExperimentalFeatures ? false,
+}:
+let
+ inherit (lib) optionalString;
+in
+craneLib.buildPackage {
+ src = lib.cleanSourceWith {
+ src = ../.;
+ filter = path: type: (lib.hasSuffix ".jsonnet" path) || (craneLib.filterCargoSources path type);
+ };
+ pname = "jrsonnet";
+ version = "current${optionalString withExperimentalFeatures "-experimental"}";
+ strictDeps = true;
+
+ depsBuildBuild = [
+ zig
+ cargo-zigbuild
+ ];
+
+ nativeBuildInputs = [
+ darwin.xcode_12_2
+ ];
+
+ cargoExtraArgs = "-p jrsonnet";
+
+ buildPhaseCargoCommand = ''
+ export SDKROOT=${darwin.xcode_12_2}/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
+ export XDG_CACHE_HOME=$TMPDIR/xdg_cache
+ mkdir -p $XDG_CACHE_HOME
+ export CARGO_ZIGBUILD_CACHE_DIR=$TMPDIR/cargo-zigbuild-cache
+ mkdir -p $CARGO_ZIGBUILD_CACHE_DIR
+
+ HOME=$(mktemp -d)
+ cargo zigbuild --release --locked ${optionalString withExperimentalFeatures "--features=experimental"} --target=${targetTriple}
+ '';
+
+ doNotPostBuildInstallCargoBinaries = true;
+ installPhaseCommand = ''
+ mkdir -p $out/bin
+ cp target/${targetTriple}/release/jrsonnet $out/bin/jrsonnet
+ '';
+}
nix/jrsonnet-cross-musl.nixdiffbeforeafterboth--- /dev/null
+++ b/nix/jrsonnet-cross-musl.nix
@@ -0,0 +1,31 @@
+{
+ lib,
+ craneLib,
+ muslCC,
+ targetTriple,
+ withExperimentalFeatures ? false,
+}:
+let
+ targetEnv = builtins.replaceStrings [ "-" ] [ "_" ] targetTriple;
+ inherit (lib) optionalString;
+in
+craneLib.buildPackage {
+ src = lib.cleanSourceWith {
+ src = ../.;
+ filter = path: type: (lib.hasSuffix ".jsonnet" path) || (craneLib.filterCargoSources path type);
+ };
+ pname = "jrsonnet";
+ version = "current${optionalString withExperimentalFeatures "-experimental"}";
+ strictDeps = true;
+
+ cargoExtraArgs = "--locked --features=mimalloc${optionalString withExperimentalFeatures ",experimental"} --target=${targetTriple}";
+
+ "CC_${targetEnv}" = "${muslCC}/bin/${muslCC.targetPrefix}cc";
+ "CARGO_TARGET_${lib.toUpper targetEnv}_LINKER" = "${muslCC}/bin/${muslCC.targetPrefix}cc";
+
+ doNotPostBuildInstallCargoBinaries = true;
+ installPhaseCommand = ''
+ mkdir -p $out/bin
+ cp target/${targetTriple}/release/jrsonnet $out/bin/jrsonnet
+ '';
+}
nix/jrsonnet-cross-windows.nixdiffbeforeafterboth--- /dev/null
+++ b/nix/jrsonnet-cross-windows.nix
@@ -0,0 +1,26 @@
+{
+ lib,
+ craneLib,
+ targetTriple,
+ withExperimentalFeatures ? false,
+}:
+let
+ inherit (lib) optionalString;
+in
+craneLib.buildPackage {
+ src = lib.cleanSourceWith {
+ src = ../.;
+ filter = path: type: (lib.hasSuffix ".jsonnet" path) || (craneLib.filterCargoSources path type);
+ };
+ pname = "jrsonnet";
+ version = "current${optionalString withExperimentalFeatures "-experimental"}";
+ strictDeps = true;
+
+ cargoExtraArgs = "--locked ${optionalString withExperimentalFeatures "--features=experimental"} --target=${targetTriple}";
+
+ doNotPostBuildInstallCargoBinaries = true;
+ installPhaseCommand = ''
+ mkdir -p $out/bin
+ cp target/${targetTriple}/release/jrsonnet.exe $out/bin/jrsonnet.exe
+ '';
+}
nix/jrsonnet-release.nixdiffbeforeafterboth--- a/nix/jrsonnet-release.nix
+++ b/nix/jrsonnet-release.nix
@@ -18,10 +18,10 @@
};
cargoHash = "sha256-ZHmdlqakucapzXJz6L7ZJpmvqTutelN8qkWAD4uDJr8=";
- cargoTestFlags = ["--package=jrsonnet --features=mimalloc,legacy-this-file"];
- cargoBuildFlags = ["--package=jrsonnet --features=mimalloc,legacy-this-file"];
+ cargoTestFlags = [ "--package=jrsonnet --features=mimalloc,legacy-this-file" ];
+ cargoBuildFlags = [ "--package=jrsonnet --features=mimalloc,legacy-this-file" ];
- buildInputs = [makeWrapper];
+ buildInputs = [ makeWrapper ];
postInstall = ''
wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000"
nix/jrsonnet.nixdiffbeforeafterboth--- a/nix/jrsonnet.nix
+++ b/nix/jrsonnet.nix
@@ -5,23 +5,23 @@
withExperimentalFeatures ? false,
forBenchmarks ? false,
}:
-with lib;
- craneLib.buildPackage {
- src = lib.cleanSourceWith {
- src = ../.;
- filter = path: type:
- (lib.hasSuffix "\.jsonnet" path)
- || (craneLib.filterCargoSources path type);
- };
- pname = "jrsonnet";
- version = "current${optionalString withExperimentalFeatures "-experimental"}";
+let
+ inherit (lib) optionalString;
+in
+craneLib.buildPackage {
+ src = lib.cleanSourceWith {
+ src = ../.;
+ filter = path: type: (lib.hasSuffix "\.jsonnet" path) || (craneLib.filterCargoSources path type);
+ };
+ pname = "jrsonnet";
+ version = "current${optionalString withExperimentalFeatures "-experimental"}";
- cargoExtraArgs = "--locked --features=mimalloc${optionalString withExperimentalFeatures ",experimental"}";
+ cargoExtraArgs = "--locked --features=mimalloc${optionalString withExperimentalFeatures ",experimental"}";
- nativeBuildInputs = [makeWrapper];
+ nativeBuildInputs = [ makeWrapper ];
- # To clean-up hyperfine output
- postInstall = optionalString forBenchmarks ''
- wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000"
- '';
- }
+ # To clean-up hyperfine output
+ postInstall = optionalString forBenchmarks ''
+ wrapProgram $out/bin/jrsonnet --add-flags "--max-stack=200000"
+ '';
+}
nix/rsjsonnet.nixdiffbeforeafterboth--- a/nix/rsjsonnet.nix
+++ b/nix/rsjsonnet.nix
@@ -16,7 +16,7 @@
cargoHash = "sha256-0IDAxm4J2rEqfUGNYoQTP0RPrEZe4YPe2E6TT7A4THo=";
- nativeBuildInputs = [makeWrapper];
+ nativeBuildInputs = [ makeWrapper ];
postInstall = ''
wrapProgram $out/bin/rsjsonnet --add-flags "--max-stack=200000"
nix/sjsonnet.nixdiffbeforeafterboth--- a/nix/sjsonnet.nix
+++ b/nix/sjsonnet.nix
@@ -17,29 +17,35 @@
version = "0.6.2";
baseUrl = "https://github.com/databricks/sjsonnet/releases/download/${version}";
- nativePlatform = {
- x86_64-linux = "linux-x86_64";
- aarch64-linux = "linux-arm64";
- aarch64-darwin = "darwin-arm64";
- # Nobody cares about darwin on intel
- }.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
+ nativePlatform =
+ {
+ x86_64-linux = "linux-x86_64";
+ aarch64-linux = "linux-arm64";
+ aarch64-darwin = "darwin-arm64";
+ # Nobody cares about darwin on intel
+ }
+ .${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
nativeSrc = fetchurl {
url = "${baseUrl}/sjsonnet-${version}-${nativePlatform}";
- hash = {
- x86_64-linux = "sha256-r79Q6SovcPIomDDUYTGIP35/y5t9Xo5Z3ohP7pxsF8I=";
- aarch64-linux = "sha256-LxWR94u1Oncau57Kmtzj2UFEofWGT4+laDTbRDkwv08=";
- aarch64-darwin = "sha256-gNZ6XekMm+ebeD7UFeRfoapXw/90gHk8MoeGD86dzKk=";
- }.${stdenv.hostPlatform.system};
+ hash =
+ {
+ x86_64-linux = "sha256-r79Q6SovcPIomDDUYTGIP35/y5t9Xo5Z3ohP7pxsF8I=";
+ aarch64-linux = "sha256-LxWR94u1Oncau57Kmtzj2UFEofWGT4+laDTbRDkwv08=";
+ aarch64-darwin = "sha256-gNZ6XekMm+ebeD7UFeRfoapXw/90gHk8MoeGD86dzKk=";
+ }
+ .${stdenv.hostPlatform.system};
};
graalvmSrc = fetchurl {
url = "${baseUrl}/sjsonnet-graalvm-${version}-${nativePlatform}";
- hash = {
- x86_64-linux = "sha256-XNJCnQlwVFySrUevn1nLN/DY8UBGgvCFAitkedLB+yM=";
- aarch64-linux = "sha256-J+C3pmiBEmo8M00IDHp9jznonibXmHVRlhsvQ4apVWw=";
- aarch64-darwin = "sha256-TXNL52sS4NE3GjbOFtgf6aCP268qGKMFaoTwAfJfgGc=";
- }.${stdenv.hostPlatform.system};
+ hash =
+ {
+ x86_64-linux = "sha256-XNJCnQlwVFySrUevn1nLN/DY8UBGgvCFAitkedLB+yM=";
+ aarch64-linux = "sha256-J+C3pmiBEmo8M00IDHp9jznonibXmHVRlhsvQ4apVWw=";
+ aarch64-darwin = "sha256-TXNL52sS4NE3GjbOFtgf6aCP268qGKMFaoTwAfJfgGc=";
+ }
+ .${stdenv.hostPlatform.system};
};
in
stdenv.mkDerivation {
@@ -52,10 +58,18 @@
};
unpackPhase = "true";
- nativeBuildInputs = [ makeWrapper ]
- ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
- buildInputs = [ java ]
- ++ lib.optionals stdenv.hostPlatform.isLinux [ zlib openssl stdenv.cc.cc.lib ];
+ nativeBuildInputs = [
+ makeWrapper
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
+ buildInputs = [
+ java
+ ]
+ ++ lib.optionals stdenv.hostPlatform.isLinux [
+ zlib
+ openssl
+ stdenv.cc.cc.lib
+ ];
installPhase = ''
mkdir -p $out/bin $out/lib
rust-toolchain.tomldiffbeforeafterboth--- a/rust-toolchain.toml
+++ b/rust-toolchain.toml
@@ -1,3 +1,3 @@
[toolchain]
-channel = "1.93.0"
+channel = "stable"
components = ["rustfmt", "clippy", "rust-analyzer", "rust-src"]
treefmt.nixdiffbeforeafterboth--- /dev/null
+++ b/treefmt.nix
@@ -0,0 +1,14 @@
+{ rustfmt }:
+{
+ settings.global.excludes = [
+ "*.jsonnet"
+ "*.libsonnet"
+ ];
+
+ programs.nixfmt.enable = true;
+ programs.rustfmt = {
+ enable = true;
+ package = rustfmt;
+ };
+ programs.taplo.enable = true;
+}
xtask/Cargo.tomldiffbeforeafterboth--- a/xtask/Cargo.toml
+++ b/xtask/Cargo.toml
@@ -16,4 +16,4 @@
quote.workspace = true
ungrammar.workspace = true
xshell.workspace = true
-clap = {workspace = true, features = ["derive"]}
+clap = { workspace = true, features = ["derive"] }
xtask/src/main.rsdiffbeforeafterboth--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -1,6 +1,6 @@
use anyhow::Result;
use clap::Parser;
-use xshell::{cmd, Shell};
+use xshell::{Shell, cmd};
mod sourcegen;
@@ -68,7 +68,11 @@
if cachegrind {
let mut cachegrind_out = out.path().to_owned();
cachegrind_out.push("cachegrind.out.1");
- cmd!(sh, "valgrind --tool=cachegrind --cachegrind-out-file={cachegrind_out} {built} {args...}").run()?;
+ cmd!(
+ sh,
+ "valgrind --tool=cachegrind --cachegrind-out-file={cachegrind_out} {built} {args...}"
+ )
+ .run()?;
cmd!(sh, "kcachegrind {cachegrind_out}").run()?;
}
xtask/src/sourcegen/ast.rsdiffbeforeafterboth--- a/xtask/src/sourcegen/ast.rs
+++ b/xtask/src/sourcegen/ast.rs
@@ -5,8 +5,8 @@
use ungrammar::{Grammar, Rule};
use super::{
+ KindsSrc,
util::{pluralize, to_lower_snake_case},
- KindsSrc,
};
impl AstNodeSrc {
@@ -282,9 +282,11 @@
_ => return false,
};
let (node, repeat, trailing_comma) = match rule.as_slice() {
- [Rule::Node(node), Rule::Rep(repeat), Rule::Opt(trailing_comma)] => {
- (node, repeat, trailing_comma)
- }
+ [
+ Rule::Node(node),
+ Rule::Rep(repeat),
+ Rule::Opt(trailing_comma),
+ ] => (node, repeat, trailing_comma),
_ => return false,
};
let repeat = match &**repeat {
xtask/src/sourcegen/mod.rsdiffbeforeafterboth--- a/xtask/src/sourcegen/mod.rs
+++ b/xtask/src/sourcegen/mod.rs
@@ -1,7 +1,7 @@
use std::{collections::HashMap, path::PathBuf};
use anyhow::Result;
-use ast::{lower, AstSrc};
+use ast::{AstSrc, lower};
use itertools::Itertools;
use kinds::{KindsSrc, TokenKind};
use proc_macro2::{Ident, Punct, Spacing, Span, TokenStream};
@@ -56,7 +56,9 @@
});
}
SpecialName::Error => {
- panic!("error token ERROR_{name} must be explicitly defined in jsonnet_kinds()");
+ panic!(
+ "error token ERROR_{name} must be explicitly defined in jsonnet_kinds()"
+ );
}
}
continue;
xtask/src/sourcegen/util.rsdiffbeforeafterboth--- a/xtask/src/sourcegen/util.rs
+++ b/xtask/src/sourcegen/util.rs
@@ -3,7 +3,7 @@
use std::{fs, path::Path};
use anyhow::Result;
-use xshell::{cmd, Shell};
+use xshell::{Shell, cmd};
/// Checks that the `file` has the specified `contents`. If that is not the
/// case, updates the file and then fails the test.