mirror of
https://github.com/storytold/egui.git
synced 2026-11-06 18:42:08 +00:00
dfe33185e4
Improes non-`syntect` highlighter in `egui_extras::syntax_highlighting`. * `TokenType` is now public, with new `CodeTheme::format` and `CodeTheme::format_mut`, so apps can match the colors to their own theme * New `TokenType::Function`: an identifier directly followed by `(` * `/* block comments */` for C, C++, JavaScript, JSON and Rust * Backslash escapes in strings, so `"say \"hi\""` is one string * `'single'`, `"""triple"""` and `'''triple'''` strings in Python and TOML, `'char'` literals in C/C++, and `` `template` `` strings in JavaScript * New languages: JavaScript/TypeScript, shell (bash, sh, zsh) and YAML * `jsonc` and `json5` are now highlighted as JSON The demo snapshots are rendered with `--all-features`, which uses `syntect`, so they are unaffected. The new `egui_extras/tests/syntax_highlighting.rs` snapshot test covers the fallback highlighter, run by a new CI step without `syntect`. * [x] I have followed the instructions in the PR template This PR was written by Claude Code (an LLM) on behalf of @emilk, and needs a human review before leaving draft. --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
288 lines
9.5 KiB
YAML
288 lines
9.5 KiB
YAML
on:
|
|
# Only on `main`, so that a PR from a branch in this repo
|
|
# doesn't run the whole workflow twice (once for the push, once for the PR):
|
|
push:
|
|
branches: ["main"]
|
|
pull_request:
|
|
|
|
name: Rust
|
|
|
|
env:
|
|
RUSTFLAGS: -D warnings
|
|
RUSTDOCFLAGS: -D warnings
|
|
NIGHTLY_VERSION: nightly-2026-04-02
|
|
|
|
jobs:
|
|
fmt-crank-check-test:
|
|
name: Format + check
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
lfs: true
|
|
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: 1.95.0
|
|
|
|
- name: Install packages (Linux)
|
|
if: runner.os == 'Linux'
|
|
uses: awalsh128/cache-apt-pkgs-action@v1.4.3
|
|
with:
|
|
packages: libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libxkbcommon-dev libssl-dev libgtk-3-dev # libgtk-3-dev is used by rfd
|
|
version: 1.0
|
|
execute_install_scripts: true
|
|
|
|
- name: Set up cargo cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Only `main` writes to the cache, so PR caches can't evict it (10 GB repository limit).
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- name: Rustfmt
|
|
run: cargo fmt --all -- --check
|
|
|
|
- name: Lint vertical spacing
|
|
run: ./scripts/lint.py
|
|
|
|
- run: cargo clippy --locked --all-features --all-targets
|
|
|
|
- run: cargo clippy --locked --all-features -p egui_extras
|
|
|
|
- run: cargo clippy --locked --all-targets
|
|
|
|
- run: cargo clippy --locked --no-default-features --lib --all-targets
|
|
|
|
- run: cargo clippy --locked --no-default-features --lib -p eframe --features x11
|
|
|
|
- run: cargo clippy --locked --no-default-features --lib -p eframe --features x11,wgpu_no_default_features
|
|
|
|
- run: cargo clippy --locked --no-default-features --lib -p egui_extras
|
|
|
|
- run: cargo clippy --locked --no-default-features --lib -p epaint
|
|
|
|
# Regression test for https://github.com/emilk/egui/issues/4771
|
|
- run: cargo clippy -p test_egui_extras_compilation
|
|
|
|
- run: cargo doc --lib --no-deps --all-features
|
|
|
|
- run: cargo doc --document-private-items --no-deps --all-features
|
|
|
|
- name: clippy release
|
|
run: cargo clippy --all-targets --all-features --release -- -D warnings
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
check_wasm:
|
|
name: Check wasm32 + wasm-bindgen
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: 1.95.0
|
|
targets: wasm32-unknown-unknown
|
|
|
|
- run: sudo apt-get update && sudo apt-get install libgtk-3-dev libatk1.0-dev
|
|
|
|
- name: Set up cargo cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Only `main` writes to the cache, so PR caches can't evict it (10 GB repository limit).
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- name: clippy wasm32 egui_demo_app
|
|
run: cargo clippy -p egui_demo_app --lib --target wasm32-unknown-unknown
|
|
|
|
- name: clippy wasm32 egui_demo_app --all-features
|
|
run: cargo clippy -p egui_demo_app --lib --target wasm32-unknown-unknown --all-features
|
|
|
|
- name: clippy wasm32 eframe
|
|
run: cargo clippy -p eframe --lib --no-default-features --features wgpu,persistence --target wasm32-unknown-unknown
|
|
|
|
# eframe only depends on egui-winit on native targets, so check it directly on wasm.
|
|
- name: check wasm32 egui-winit
|
|
run: cargo check -p egui-winit --no-default-features --target wasm32-unknown-unknown --locked
|
|
|
|
- name: wasm-bindgen
|
|
uses: jetli/wasm-bindgen-action@v0.1.0
|
|
with:
|
|
version: "0.2.126" # Keep wasm-bindgen version in sync in: setup_web.sh, Cargo.toml, Cargo.lock, rust.yml
|
|
|
|
- run: ./scripts/wasm_bindgen_check.sh --skip-setup
|
|
|
|
- name: clippy wasm32
|
|
run: ./scripts/clippy_wasm.sh
|
|
|
|
# requires a different toolchain from the other checks (nightly)
|
|
check_wasm_atomics:
|
|
name: Check wasm32+atomics
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- run: sudo apt-get update && sudo apt-get install libgtk-3-dev libatk1.0-dev
|
|
|
|
- name: Set up cargo cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Only `main` writes to the cache, so PR caches can't evict it (10 GB repository limit).
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: ${{env.NIGHTLY_VERSION}}
|
|
targets: wasm32-unknown-unknown
|
|
components: rust-src
|
|
|
|
- name: Check wasm32+atomics eframe with wgpu
|
|
run: RUSTFLAGS='-C target-feature=+atomics' cargo +${{env.NIGHTLY_VERSION}} check -p eframe --lib --no-default-features --features wgpu,wgpu/webgpu --target wasm32-unknown-unknown -Z build-std=std,panic_abort
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
cargo-deny:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- target: aarch64-apple-darwin
|
|
- target: aarch64-linux-android
|
|
- target: i686-pc-windows-gnu
|
|
- target: i686-pc-windows-msvc
|
|
- target: i686-unknown-linux-gnu
|
|
- target: wasm32-unknown-unknown
|
|
- target: x86_64-apple-darwin
|
|
- target: x86_64-pc-windows-gnu
|
|
- target: x86_64-pc-windows-msvc
|
|
- target: x86_64-unknown-linux-gnu
|
|
- target: x86_64-unknown-linux-musl
|
|
- target: x86_64-unknown-redox
|
|
|
|
name: cargo-deny ${{ matrix.target }}
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: EmbarkStudios/cargo-deny-action@v2
|
|
with:
|
|
rust-version: "1.95.0"
|
|
log-level: error
|
|
command: check
|
|
arguments: --target ${{ matrix.target }}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
android:
|
|
name: android
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: 1.95.0
|
|
targets: aarch64-linux-android
|
|
|
|
- name: Set up cargo cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Only `main` writes to the cache, so PR caches can't evict it (10 GB repository limit).
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
# Default features disabled to turn off accesskit, which does not work
|
|
# with NativeActivity.
|
|
- run: cargo check --features wgpu,android-native-activity --target aarch64-linux-android --no-default-features
|
|
working-directory: crates/eframe
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
ios:
|
|
name: ios
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: 1.95.0
|
|
targets: aarch64-apple-ios
|
|
|
|
- name: Set up cargo cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Only `main` writes to the cache, so PR caches can't evict it (10 GB repository limit).
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
# Default features are disabled because glutin doesn't compile for ios.
|
|
- run: cargo check --features wgpu --target aarch64-apple-ios --no-default-features
|
|
working-directory: crates/eframe
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
windows:
|
|
name: Check Windows
|
|
runs-on: windows-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: 1.95.0
|
|
|
|
- name: Set up cargo cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Only `main` writes to the cache, so PR caches can't evict it (10 GB repository limit).
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
- run: cargo clippy --all-targets --all-features
|
|
|
|
- run: cargo clippy -p hello_world
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
tests:
|
|
name: Run tests
|
|
# We run the tests on macOS because it will run with an actual GPU
|
|
runs-on: macos-latest
|
|
timeout-minutes: 60
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
lfs: true
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: 1.95.0
|
|
|
|
- name: Set up cargo cache
|
|
uses: Swatinem/rust-cache@v2
|
|
with:
|
|
# Only `main` writes to the cache, so PR caches can't evict it (10 GB repository limit).
|
|
save-if: ${{ github.ref == 'refs/heads/main' }}
|
|
|
|
# `--no-fail-fast` so that a failing snapshot test in one crate doesn't
|
|
# stop the tests of the other crates from running.
|
|
# That way a single CI run reports _all_ failing snapshots,
|
|
# and all the new snapshots end up in the uploaded artifact.
|
|
- name: Run tests
|
|
run: cargo test --all-features --no-fail-fast
|
|
|
|
- name: Run doc-tests
|
|
if: always()
|
|
run: cargo test --all-features --doc --no-fail-fast
|
|
|
|
# `--all-features` turns on `syntect`, so the fallback highlighter needs its own run.
|
|
- name: Run egui_extras tests without syntect
|
|
if: always()
|
|
run: cargo test -p egui_extras --no-fail-fast
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: test-results
|
|
path: "**/tests/snapshots"
|