My stab at CI (#66)

This commit is contained in:
Miles Wirht
2026-06-15 18:42:57 -04:00
committed by GitHub
parent 74a728db05
commit ec395ac14c
32 changed files with 815 additions and 280 deletions
-2
View File
@@ -14,5 +14,3 @@ rustflags = ["-D", "warnings"]
# We don't need fullest debug information for dev stuff (tests etc.) in CI.
[profile.dev]
debug = "limited"
+30 -4
View File
@@ -9,6 +9,32 @@ test-all = "test --workspace --no-fail-fast"
test-doc = "test --workspace --doc"
build-all = "build --workspace --all-targets"
ci-fmt = "fmt --all -- --check"
xtask = "run --package xtask --"
perf-test = [
"test",
"--profile",
"release-fast",
"--lib",
"--bins",
"--tests",
"--all-features",
"--config",
"target.'cfg(true)'.runner='cargo run -p perf --release'",
"--config",
"target.'cfg(true)'.rustflags=[\"--cfg\", \"perf_enabled\"]",
]
# Keep similar flags here to share some ccache
perf-compare = [
"run",
"--profile",
"release-fast",
"-p",
"perf",
"--config",
"target.'cfg(true)'.rustflags=[\"--cfg\", \"perf_enabled\"]",
"--",
"compare",
]
[profile.ci]
inherits = "dev"
@@ -17,10 +43,10 @@ incremental = false
[target.'cfg(target_os = "windows")']
rustflags = [
"--cfg",
"windows_slim_errors", # This cfg will reduce the size of `windows::core::Error` from 16 bytes to 4 bytes
"-C",
"target-feature=+crt-static", # This fixes the linking issue when compiling livekit on Windows
"--cfg",
"windows_slim_errors", # This cfg will reduce the size of `windows::core::Error` from 16 bytes to 4 bytes
"-C",
"target-feature=+crt-static", # This fixes the linking issue when compiling livekit on Windows
]
# We need lld to link libwebrtc.a successfully on aarch64-linux
+11
View File
@@ -0,0 +1,11 @@
# Default code owners for gpui-ce
* @gpui-ce/maintainers
# CI/CD configuration
/.github/ @gpui-ce/maintainers
# Platform-specific code
/crates/gpui_macos/ @gpui-ce/macos-maintainers
/crates/gpui_linux/ @gpui-ce/linux-maintainers
/crates/gpui_windows/ @gpui-ce/windows-maintainers
/crates/gpui_web/ @gpui-ce/web-maintainers
+36
View File
@@ -0,0 +1,36 @@
# Security audit workflow
name: Security Audit
on:
push:
branches: [main]
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
pull_request:
paths:
- '**/Cargo.toml'
- '**/Cargo.lock'
schedule:
- cron: '0 0 * * 1'
workflow_dispatch:
jobs:
# cargo-audit: vulnerability scanning (advisory DB)
cargo-audit:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- uses: taiki-e/install-action@cargo-audit
- uses: rustsec/audit-check@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
# cargo-deny: license compliance + advisory + duplicate detection
cargo-deny:
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v2
+267
View File
@@ -0,0 +1,267 @@
# Main CI workflow
name: CI
# TODO: Setup coverage using cargo-mutants, but only for minor/major version bumps (would probably take hours :() -- also our testing infra sucks
on:
push:
branches: [main, 'v[0-9]+.[0-9]+.x']
pull_request:
branches: ['**']
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.ref_name == 'main' && github.sha || 'anysha' }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
CARGO_INCREMENTAL: 0
jobs:
# Change detection
orchestrate:
runs-on: ubuntu-latest
outputs:
run_tests: ${{ steps.filter.outputs.run_tests }}
run_style: ${{ steps.filter.outputs.run_style }}
run_docs: ${{ steps.filter.outputs.run_docs }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: ${{ github.ref == 'refs/heads/main' && 2 || 350 }}
- id: filter
run: |
if [ -z "$GITHUB_BASE_REF" ]; then
COMPARE_REV="$(git rev-parse HEAD~1)"
else
git fetch origin "$GITHUB_BASE_REF" --depth=350
COMPARE_REV="$(git merge-base "origin/${GITHUB_BASE_REF}" HEAD)"
fi
CHANGED_FILES="$(git diff --name-only "$COMPARE_REV" "$GITHUB_SHA")"
check_pattern() {
local name="$1" pattern="$2" invert="${3:-false}"
if [ "$invert" = "true" ]; then
echo "$CHANGED_FILES" | grep -qvP "$pattern" && echo "${name}=true" >> "$GITHUB_OUTPUT" || echo "${name}=false" >> "$GITHUB_OUTPUT"
else
echo "$CHANGED_FILES" | grep -qP "$pattern" && echo "${name}=true" >> "$GITHUB_OUTPUT" || echo "${name}=false" >> "$GITHUB_OUTPUT"
fi
}
check_pattern "run_tests" '^(docs/|\.github/(ISSUE_TEMPLATE|workflows/)|README\.md|CHANGELOG\.md)' true
check_pattern "run_style" '\.(rs|toml)$|rust-toolchain\.toml|\.cargo/|clippy\.toml|typos\.toml'
check_pattern "run_docs" '^docs/|\.rs$'
# Formatting
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: rustfmt
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just fmt-check
# Clippy
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- name: Install system deps
run: |
sudo apt-get update
sudo apt-get install -y libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libx11-dev libxcb-shape0-dev libxcb-xfixes0-dev libfontconfig-dev
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just clippy
# Spell check
typos:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: crate-ci/typos@v1.47.2
with:
config: typos.toml
# TOML formatting
taplo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: uncenter/setup-taplo@v1
- run: taplo fmt --check
# Unused dependencies
machete:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@cargo-machete
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just machete
# MSRV
msrv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: 1.92.0
- uses: Swatinem/rust-cache@v2
- name: Install system deps
run: |
sudo apt-get update
sudo apt-get install -y libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libx11-dev libxcb-shape0-dev libxcb-xfixes0-dev libfontconfig-dev
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just msrv-check
# WASM target (nightly + atomics)
check-wasm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install nightly toolchain with rust-src and WASM target
run: rustup toolchain install nightly --component rust-src --target wasm32-unknown-unknown
- uses: Swatinem/rust-cache@v2
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just check-wasm-atomics
# Linux build + test
test-linux:
runs-on: ubuntu-latest
needs: [orchestrate]
if: needs.orchestrate.outputs.run_tests == 'true'
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- uses: Swatinem/rust-cache@v2
- name: Install system deps
run: |
sudo apt-get update
sudo apt-get install -y \
libxkbcommon-dev libwayland-dev libx11-dev \
libxcb-shape0-dev libxcb-xfixes0-dev \
libxcb-randr0-dev libxcb-xinput-dev \
libxkbcommon-x11-dev libegl1-mesa-dev \
libgles2-mesa-dev libglib2.0-dev libfontconfig-dev
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just build
- run: just test
- run: just test-doc
# macOS build + test
test-mac:
runs-on: macos-latest
needs: [orchestrate]
if: needs.orchestrate.outputs.run_tests == 'true'
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- uses: Swatinem/rust-cache@v2
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just build
- run: just test
- run: just test-doc
# Windows build + test
test-windows:
runs-on: windows-latest
needs: [orchestrate]
if: needs.orchestrate.outputs.run_tests == 'true'
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- uses: Swatinem/rust-cache@v2
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just build
- run: just test
# Examples
check-examples:
runs-on: ubuntu-latest
needs: [orchestrate]
if: needs.orchestrate.outputs.run_tests == 'true'
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- uses: Swatinem/rust-cache@v2
- name: Install system deps
run: |
sudo apt-get update
sudo apt-get install -y libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libx11-dev libxcb-shape0-dev libxcb-xfixes0-dev libfontconfig-dev
- name: Add WASM target
run: rustup target add wasm32-unknown-unknown
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just check-examples
# Beta toolchain (scheduled only)
beta-test:
if: github.event_name == 'schedule'
runs-on: ubuntu-latest
continue-on-error: true
steps:
- uses: actions/checkout@v4
- run: rustup update beta && rustup default beta
- uses: Swatinem/rust-cache@v2
- name: Install system deps
run: |
sudo apt-get update
sudo apt-get install -y libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libx11-dev libxcb-shape0-dev libxcb-xfixes0-dev libfontconfig-dev
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just check
- run: just test
# Gate job
tests-pass:
if: always()
needs:
- fmt
- clippy
- typos
- taplo
- machete
- msrv
- check-wasm
- test-linux
- test-mac
- test-windows
- check-examples
runs-on: ubuntu-latest
steps:
- run: |
set +e
EXIT_CODE=0
check_result() {
echo "* $1: $2"
if [[ "$2" != "skipped" && "$2" != "success" ]]; then EXIT_CODE=1; fi
}
check_result fmt ${{ needs.fmt.result }}
check_result clippy ${{ needs.clippy.result }}
check_result typos ${{ needs.typos.result }}
check_result taplo ${{ needs.taplo.result }}
check_result machete ${{ needs.machete.result }}
check_result msrv ${{ needs.msrv.result }}
check_result check-wasm ${{ needs.check-wasm.result }}
check_result test-linux ${{ needs.test-linux.result }}
check_result test-mac ${{ needs.test-mac.result }}
check_result test-windows ${{ needs.test-windows.result }}
check_result check-examples ${{ needs.check-examples.result }}
exit $EXIT_CODE
+105
View File
@@ -0,0 +1,105 @@
# Publish to crates on a version tag push
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
dry_run:
description: 'Dry run (no actual publish)'
required: false
default: 'false'
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
# Determine pre-release status
prerelease:
runs-on: ubuntu-latest
outputs:
value: ${{ steps.check.outputs.value }}
version: ${{ steps.check.outputs.version }}
steps:
- uses: actions/checkout@v4
- id: check
run: |
VERSION="${GITHUB_REF_NAME#v}"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
if [[ $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "value=false" >> "$GITHUB_OUTPUT"
else
echo "value=true" >> "$GITHUB_OUTPUT"
fi
# Run full CI on the tag via justfile
verify:
needs: [prerelease]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
components: clippy, rustfmt
- uses: Swatinem/rust-cache@v2
- name: Install system deps
run: |
sudo apt-get update
sudo apt-get install -y \
libxkbcommon-dev libwayland-dev libx11-dev \
libxcb-shape0-dev libxcb-xfixes0-dev
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just fmt-check
- run: just clippy
- run: just build
- run: just test
- run: just test-doc
# Verify packages are publishable
verify-publish:
needs: [prerelease, verify]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- uses: Swatinem/rust-cache@v2
- name: Dry-run publish check
run: |
for crate in crates/gpui_shared_string crates/gpui_macros crates/gpui crates/gpui_wgpu crates/gpui_tokio crates/gpui_platform; do
echo "Checking $crate..."
cargo publish --dry-run --manifest-path "$crate/Cargo.toml" 2>&1 | head -5
done
# Publish to crates.io
publish:
needs: [prerelease, verify-publish]
runs-on: ubuntu-latest
if: github.event_name != 'workflow_dispatch' || github.event.inputs.dry_run != 'true'
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- uses: Swatinem/rust-cache@v2
- uses: hustcer/setup-nu@v3
- uses: extractions/setup-just@v2
- run: just publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
# Create GitHub Release
github-release:
needs: [prerelease, publish]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: softprops/action-gh-release@v2
with:
draft: true
prerelease: ${{ needs.prerelease.outputs.value }}
generate_release_notes: true
name: ${{ needs.prerelease.outputs.version }}
Generated
+10 -2
View File
@@ -2565,7 +2565,6 @@ dependencies = [
"anyhow",
"bytemuck",
"collections 0.1.0 (git+https://github.com/zed-industries/zed?rev=876ec5a8a074ba83cce2129ed4d76b59c05a37e9)",
"core-video",
"cosmic-text",
"criterion",
"etagere",
@@ -4099,6 +4098,15 @@ version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
[[package]]
name = "perf"
version = "0.1.0"
dependencies = [
"collections 0.1.0 (git+https://github.com/zed-industries/zed?rev=876ec5a8a074ba83cce2129ed4d76b59c05a37e9)",
"serde",
"serde_json",
]
[[package]]
name = "perf"
version = "0.1.0"
@@ -6155,7 +6163,7 @@ name = "util_macros"
version = "0.1.0"
source = "git+https://github.com/zed-industries/zed?rev=876ec5a8a074ba83cce2129ed4d76b59c05a37e9#876ec5a8a074ba83cce2129ed4d76b59c05a37e9"
dependencies = [
"perf",
"perf 0.1.0 (git+https://github.com/zed-industries/zed?rev=876ec5a8a074ba83cce2129ed4d76b59c05a37e9)",
"quote",
"syn",
]
+87 -84
View File
@@ -1,20 +1,19 @@
[workspace]
members = [
"./crates/gpui/",
"./crates/gpui_web/",
"./crates/gpui_wgpu/",
"./crates/gpui_linux/",
"./crates/gpui_macos/",
"./crates/gpui_tokio/",
"./crates/gpui_macros/",
"./crates/gpui_windows/",
"./crates/gpui_platform/",
"./crates/gpui_shared_string/",
"./crates/gpui_elements/",
]
default-members = [
"./crates/gpui/",
"./crates/gpui/",
"./crates/gpui_web/",
"./crates/gpui_wgpu/",
"./crates/gpui_linux/",
"./crates/gpui_macos/",
"./crates/gpui_tokio/",
"./crates/gpui_macros/",
"./crates/gpui_windows/",
"./crates/gpui_platform/",
"./crates/gpui_shared_string/",
"./crates/gpui_elements/",
"./tooling/perf/",
]
default-members = ["./crates/gpui/"]
resolver = "3"
[workspace.package]
@@ -37,15 +36,15 @@ bitflags = "2.6.0"
collections = { git = "https://github.com/zed-industries/zed", rev = "876ec5a8a074ba83cce2129ed4d76b59c05a37e9", version = "0.1.0" }
ctor = "1.0.6"
derive_more = { version = "2.1.1", features = [
"add",
"add_assign",
"deref",
"deref_mut",
"display",
"from_str",
"mul",
"mul_assign",
"not",
"add",
"add_assign",
"deref",
"deref_mut",
"display",
"from_str",
"mul",
"mul_assign",
"not",
] }
futures = "0.3.32"
futures-concurrency = "7.7.1"
@@ -56,7 +55,9 @@ itertools = "0.14.0"
log = { version = "0.4.16", features = ["kv_unstable_serde", "serde"] }
parking_lot = "0.12.1"
postage = { version = "0.5", features = ["futures-traits"] }
proptest = { git = "https://github.com/proptest-rs/proptest", rev = "3dca198a8fef1b32e3a66f1e1897c955b4dc5b5b", features = ["attr-macro"] }
proptest = { git = "https://github.com/proptest-rs/proptest", rev = "3dca198a8fef1b32e3a66f1e1897c955b4dc5b5b", features = [
"attr-macro",
] }
chrono = { version = "0.4", features = ["serde"] }
profiling = "1"
rand = "0.9.4"
@@ -98,19 +99,21 @@ proc-macro2 = "1.0.93"
syn = { version = "2.0.101", features = ["full", "extra-traits", "visit-mut"] }
quote = "1.0.9"
ashpd = { version = "0.13", default-features = false, features = [
"async-io",
"notification",
"open_uri",
"file_chooser",
"settings",
"trash"
"async-io",
"notification",
"open_uri",
"file_chooser",
"settings",
"trash",
] }
libc = "0.2"
smol = "2.0"
util = { git = "https://github.com/zed-industries/zed", rev = "876ec5a8a074ba83cce2129ed4d76b59c05a37e9" }
wgpu = { git = "https://github.com/zed-industries/wgpu.git", rev = "357a0c56e0070480ad9daea5d2eaa83150b79e88" }
criterion = { version = "0.5", features = ["html_reports"] }
objc2-app-kit = { version = "0.3", default-features = false, features = [ "NSGraphics" ] }
objc2-app-kit = { version = "0.3", default-features = false, features = [
"NSGraphics",
] }
semver = { version = "1.0", features = ["serde"] }
windows-core = "0.61"
tokio = { version = "1" }
@@ -132,59 +135,59 @@ gpui_tokio = { path = "./crates/gpui_tokio/" }
[workspace.dependencies.windows]
version = "0.61"
features = [
"Foundation_Numerics",
"Globalization_DateTimeFormatting",
"Storage_Search",
"Storage_Streams",
"System_Threading",
"UI_ViewManagement",
"Wdk_System_SystemServices",
"Win32_Foundation",
"Win32_Globalization",
"Win32_Graphics_Direct3D",
"Win32_Graphics_Direct3D11",
"Win32_Graphics_Direct3D_Fxc",
"Win32_Graphics_DirectComposition",
"Win32_Graphics_DirectWrite",
"Win32_Graphics_DirectManipulation",
"Win32_Graphics_Dwm",
"Win32_Graphics_Dxgi",
"Win32_Graphics_Dxgi_Common",
"Win32_Graphics_Gdi",
"Win32_Graphics_Imaging",
"Win32_Graphics_Hlsl",
"Win32_Networking_WinSock",
"Win32_Security",
"Win32_Security_Credentials",
"Win32_Security_Cryptography",
"Win32_Storage_FileSystem",
"Win32_System_Com",
"Win32_System_Com_StructuredStorage",
"Win32_System_Console",
"Win32_System_Diagnostics_Debug",
"Win32_System_DataExchange",
"Win32_System_IO",
"Win32_System_LibraryLoader",
"Win32_System_Memory",
"Win32_System_Ole",
"Win32_System_Performance",
"Win32_System_Pipes",
"Win32_System_RestartManager",
"Win32_System_SystemInformation",
"Win32_System_SystemServices",
"Win32_System_Threading",
"Win32_System_Variant",
"Win32_System_WinRT",
"Win32_UI_Controls",
"Win32_UI_HiDpi",
"Win32_UI_Input_Ime",
"Win32_UI_Input_KeyboardAndMouse",
"Win32_UI_Input_Pointer",
"Win32_UI_Shell",
"Win32_UI_Shell_Common",
"Win32_UI_Shell_PropertiesSystem",
"Win32_UI_WindowsAndMessaging",
"Win32_Media",
"Foundation_Numerics",
"Globalization_DateTimeFormatting",
"Storage_Search",
"Storage_Streams",
"System_Threading",
"UI_ViewManagement",
"Wdk_System_SystemServices",
"Win32_Foundation",
"Win32_Globalization",
"Win32_Graphics_Direct3D",
"Win32_Graphics_Direct3D11",
"Win32_Graphics_Direct3D_Fxc",
"Win32_Graphics_DirectComposition",
"Win32_Graphics_DirectWrite",
"Win32_Graphics_DirectManipulation",
"Win32_Graphics_Dwm",
"Win32_Graphics_Dxgi",
"Win32_Graphics_Dxgi_Common",
"Win32_Graphics_Gdi",
"Win32_Graphics_Imaging",
"Win32_Graphics_Hlsl",
"Win32_Networking_WinSock",
"Win32_Security",
"Win32_Security_Credentials",
"Win32_Security_Cryptography",
"Win32_Storage_FileSystem",
"Win32_System_Com",
"Win32_System_Com_StructuredStorage",
"Win32_System_Console",
"Win32_System_Diagnostics_Debug",
"Win32_System_DataExchange",
"Win32_System_IO",
"Win32_System_LibraryLoader",
"Win32_System_Memory",
"Win32_System_Ole",
"Win32_System_Performance",
"Win32_System_Pipes",
"Win32_System_RestartManager",
"Win32_System_SystemInformation",
"Win32_System_SystemServices",
"Win32_System_Threading",
"Win32_System_Variant",
"Win32_System_WinRT",
"Win32_UI_Controls",
"Win32_UI_HiDpi",
"Win32_UI_Input_Ime",
"Win32_UI_Input_KeyboardAndMouse",
"Win32_UI_Input_Pointer",
"Win32_UI_Shell",
"Win32_UI_Shell_Common",
"Win32_UI_Shell_PropertiesSystem",
"Win32_UI_WindowsAndMessaging",
"Win32_Media",
]
[workspace.lints.rust]
+15 -16
View File
@@ -1,24 +1,23 @@
allow-private-module-inception = true
avoid-breaking-exported-api = false
ignore-interior-mutability = [
# Suppresses clippy::mutable_key_type, which is a false positive as the Eq
# and Hash impls do not use fields with interior mutability.
"agent_ui::context::AgentContextKey"
# Suppresses clippy::mutable_key_type, which is a false positive as the Eq
# and Hash impls do not use fields with interior mutability.
"agent_ui::context::AgentContextKey",
]
disallowed-methods = [
{ path = "std::process::Command::spawn", reason = "Spawning `std::process::Command` can block the current thread for an unknown duration", replacement = "smol::process::Command::spawn" },
{ path = "std::process::Command::output", reason = "Spawning `std::process::Command` can block the current thread for an unknown duration", replacement = "smol::process::Command::output" },
{ path = "std::process::Command::status", reason = "Spawning `std::process::Command` can block the current thread for an unknown duration", replacement = "smol::process::Command::status" },
{ path = "std::process::Command::stdin", reason = "`smol::process::Command::from()` does not preserve stdio configuration", replacement = "smol::process::Command::stdin" },
{ path = "std::process::Command::stdout", reason = "`smol::process::Command::from()` does not preserve stdio configuration", replacement = "smol::process::Command::stdout" },
{ path = "std::process::Command::stderr", reason = "`smol::process::Command::from()` does not preserve stdio configuration", replacement = "smol::process::Command::stderr" },
{ path = "serde_json::from_reader", reason = "Parsing from a buffer is much slower than first reading the buffer into a Vec/String, see https://github.com/serde-rs/json/issues/160#issuecomment-253446892. Use `serde_json::from_slice` instead." },
{ path = "serde_json_lenient::from_reader", reason = "Parsing from a buffer is much slower than first reading the buffer into a Vec/String, see https://github.com/serde-rs/json/issues/160#issuecomment-253446892, Use `serde_json_lenient::from_slice` instead." },
{ path = "std::process::Command::spawn", reason = "Spawning `std::process::Command` can block the current thread for an unknown duration", replacement = "smol::process::Command::spawn" },
{ path = "std::process::Command::output", reason = "Spawning `std::process::Command` can block the current thread for an unknown duration", replacement = "smol::process::Command::output" },
{ path = "std::process::Command::status", reason = "Spawning `std::process::Command` can block the current thread for an unknown duration", replacement = "smol::process::Command::status" },
{ path = "std::process::Command::stdin", reason = "`smol::process::Command::from()` does not preserve stdio configuration", replacement = "smol::process::Command::stdin" },
{ path = "std::process::Command::stdout", reason = "`smol::process::Command::from()` does not preserve stdio configuration", replacement = "smol::process::Command::stdout" },
{ path = "std::process::Command::stderr", reason = "`smol::process::Command::from()` does not preserve stdio configuration", replacement = "smol::process::Command::stderr" },
{ path = "serde_json::from_reader", reason = "Parsing from a buffer is much slower than first reading the buffer into a Vec/String, see https://github.com/serde-rs/json/issues/160#issuecomment-253446892. Use `serde_json::from_slice` instead." },
{ path = "serde_json_lenient::from_reader", reason = "Parsing from a buffer is much slower than first reading the buffer into a Vec/String, see https://github.com/serde-rs/json/issues/160#issuecomment-253446892, Use `serde_json_lenient::from_slice` instead." },
]
disallowed-types = [
# { path = "std::collections::HashMap", replacement = "collections::HashMap" },
# { path = "std::collections::HashSet", replacement = "collections::HashSet" },
# { path = "indexmap::IndexSet", replacement = "collections::IndexSet" },
# { path = "indexmap::IndexMap", replacement = "collections::IndexMap" },
# { path = "std::collections::HashMap", replacement = "collections::HashMap" },
# { path = "std::collections::HashSet", replacement = "collections::HashSet" },
# { path = "indexmap::IndexSet", replacement = "collections::IndexSet" },
# { path = "indexmap::IndexMap", replacement = "collections::IndexMap" },
]
+12 -20
View File
@@ -19,23 +19,17 @@ workspace = true
[features]
default = ["font-kit", "wayland", "x11", "windows-manifest"]
test-support = [
"leak-detection",
"collections/test-support",
"wayland",
"x11",
"proptest",
"leak-detection",
"collections/test-support",
"wayland",
"x11",
"proptest",
]
inspector = ["gpui_macros/inspector"]
leak-detection = ["backtrace"]
wayland = [
"bitflags",
]
x11 = [
"scap?/x11",
]
screen-capture = [
"scap",
]
wayland = ["bitflags"]
x11 = ["scap?/x11"]
screen-capture = ["scap"]
windows-manifest = ["dep:embed-resource"]
input-latency-histogram = ["dep:hdrhistogram"]
@@ -76,10 +70,10 @@ regex.workspace = true
refineable.workspace = true
scheduler.workspace = true
resvg = { version = "0.45.0", default-features = false, features = [
"text",
"system-fonts",
"memmap-fonts",
"raster-images"
"text",
"system-fonts",
"memmap-fonts",
"raster-images",
] }
usvg = { version = "0.45.0", default-features = false }
ttf-parser = "0.25"
@@ -140,7 +134,6 @@ pathfinder_geometry = "0.5"
scap = { workspace = true, optional = true }
[target.'cfg(target_os = "windows")'.dependencies]
windows = { version = "0.61", features = ["Win32_Foundation"] }
@@ -159,7 +152,6 @@ scheduler = { workspace = true, features = ["test-support"] }
unicode-segmentation = { workspace = true }
[target.'cfg(target_family = "wasm")'.dev-dependencies]
wasm-bindgen = { workspace = true }
gpui_web.workspace = true
+5 -3
View File
@@ -138,9 +138,11 @@ fn content_blurred_rich() -> impl IntoElement {
.items_center()
.justify_center()
.gap_3()
.children([0xef4444, 0x22c55e, 0x3b82f6].into_iter().map(|hex| {
div().w(px(48.)).h(px(48.)).rounded_md().bg(rgb(hex))
}))
.children(
[0xef4444, 0x22c55e, 0x3b82f6]
.into_iter()
.map(|hex| div().w(px(48.)).h(px(48.)).rounded_md().bg(rgb(hex))),
)
}
/// Nested content blur: a `blur()` element inside another `blur()` element. The inner block is
+1 -3
View File
@@ -22,6 +22,7 @@ use itertools::Itertools;
use parking_lot::RwLock;
use slotmap::SlotMap;
use crate::http_client::{HttpClient, NullHttpClient};
pub use async_context::*;
use collections::{FxHashMap, FxHashSet, HashMap, VecDeque};
pub use context::*;
@@ -29,7 +30,6 @@ pub use entity_map::*;
use gpui_util::{ResultExt, debug_panic};
#[cfg(any(test, feature = "test-support"))]
pub use headless_app_context::*;
use crate::http_client::{HttpClient, NullHttpClient};
use smallvec::SmallVec;
#[cfg(any(test, feature = "test-support"))]
pub use test_app::*;
@@ -2710,8 +2710,6 @@ pub struct KeystrokeEvent {
pub context_stack: Vec<KeyContext>,
}
/// A mutable reference to an entity owned by GPUI
pub struct GpuiBorrow<'a, T> {
inner: Option<Lease<T>>,
+17 -18
View File
@@ -618,25 +618,24 @@ impl Asset for ImageAssetLoader {
async move {
let bytes = match source.clone() {
Resource::Path(uri) => fs::read(uri.as_ref())?,
Resource::Uri(uri) => {
use anyhow::Context as _;
Resource::Uri(uri) => {
use anyhow::Context as _;
let response = client
.get(uri.as_ref(), true)
.await
.with_context(|| format!("loading image asset from {uri:?}"))?;
if !response.status.is_success() {
let mut error_body =
String::from_utf8_lossy(&response.body).into_owned();
let first_line = error_body.lines().next().unwrap_or("").trim_end();
error_body.truncate(first_line.len());
return Err(ImageCacheError::BadStatus {
uri,
status: response.status,
body: error_body,
});
}
response.body
let response = client
.get(uri.as_ref(), true)
.await
.with_context(|| format!("loading image asset from {uri:?}"))?;
if !response.status.is_success() {
let mut error_body = String::from_utf8_lossy(&response.body).into_owned();
let first_line = error_body.lines().next().unwrap_or("").trim_end();
error_body.truncate(first_line.len());
return Err(ImageCacheError::BadStatus {
uri,
status: response.status,
body: error_body,
});
}
response.body
}
Resource::Embedded(path) => {
let data = asset_source.load(&path).ok().flatten();
+9 -9
View File
@@ -40,12 +40,12 @@ impl Clone for SurfaceSource {
}
impl std::fmt::Debug for SurfaceSource {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
fn fmt(&self, _f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match *self {
#[cfg(target_os = "macos")]
SurfaceSource::Surface(ref buf) => f.debug_tuple("Surface").field(buf).finish(),
SurfaceSource::Surface(ref buf) => _f.debug_tuple("Surface").field(buf).finish(),
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
SurfaceSource::Texture { size, .. } => f
SurfaceSource::Texture { size, .. } => _f
.debug_struct("Texture")
.field("size", &size)
.finish_non_exhaustive(),
@@ -124,27 +124,27 @@ impl Element for Surface {
&mut self,
_global_id: Option<&GlobalElementId>,
_inspector_id: Option<&InspectorElementId>,
bounds: Bounds<Pixels>,
_bounds: Bounds<Pixels>,
_: &mut Self::RequestLayoutState,
_: &mut Self::PrepaintState,
window: &mut Window,
_window: &mut Window,
_: &mut App,
) {
match self.source {
#[cfg(target_os = "macos")]
SurfaceSource::Surface(ref surface) => {
let size = crate::size(surface.get_width().into(), surface.get_height().into());
let new_bounds = self.object_fit.get_bounds(bounds, size);
let new_bounds = self.object_fit.get_bounds(_bounds, size);
// TODO: Add support for corner_radii
window.paint_surface(new_bounds, surface.clone());
_window.paint_surface(new_bounds, surface.clone());
}
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
SurfaceSource::Texture {
ref texture,
ref size,
} => {
let new_bounds = self.object_fit.get_bounds(bounds, *size);
window.paint_surface(new_bounds, Arc::clone(texture), *size);
let new_bounds = self.object_fit.get_bounds(_bounds, *size);
_window.paint_surface(new_bounds, Arc::clone(texture), *size);
}
}
}
+1 -2
View File
@@ -9,8 +9,7 @@ use crate::{
CornersRefinement, CursorStyle, DefiniteLength, DevicePixels, Edges, EdgesRefinement, Font,
FontFallbacks, FontFeatures, FontStyle, FontWeight, GridLocation, Hsla, Length, Pixels, Point,
PointRefinement, Rgba, ScaledPixels, SharedString, Size, SizeRefinement, Styled, TextRun,
Window, black, phi,
point, quad, rems, size,
Window, black, phi, point, quad, rems, size,
};
use collections::HashSet;
use refineable::Refineable;
+1 -1
View File
@@ -702,7 +702,7 @@ mod tests {
#[test]
fn test_state_with_point() {
let initial: Point<f32> = Point { x: 10.0, y: 20.0 };
let state = TransitionState::new(initial.clone());
let state = TransitionState::new(initial);
assert_eq!(state.initial_goal.x, 10.0);
assert_eq!(state.initial_goal.y, 20.0);
+6 -7
View File
@@ -13,13 +13,12 @@ use crate::{
PolychromeSprite, Priority, PromptButton, PromptLevel, Quad, Render, RenderGlyphParams,
RenderImage, RenderImageParams, RenderSvgParams, Replay, ResizeEdge, SMOOTH_SVG_SCALE_FACTOR,
SUBPIXEL_VARIANTS_X, SUBPIXEL_VARIANTS_Y, ScaledFilter, ScaledPixels, Scene, Shadow,
SharedString, Size,
StrikethroughStyle, Style, SubpixelSprite, SubscriberSet, Subscription, SystemWindowTab,
SystemWindowTabController, TabStopMap, TaffyLayoutEngine, Task, TextRenderingMode, TextStyle,
TextStyleRefinement, ThermalState, TransformationMatrix, Transition, TransitionState,
Underline, UnderlineStyle, WindowAppearance, WindowBackgroundAppearance, WindowBounds,
WindowControls, WindowDecorations, WindowOptions, WindowParams, WindowTextSystem, point,
prelude::*, px, rems, size, transparent_black,
SharedString, Size, StrikethroughStyle, Style, SubpixelSprite, SubscriberSet, Subscription,
SystemWindowTab, SystemWindowTabController, TabStopMap, TaffyLayoutEngine, Task,
TextRenderingMode, TextStyle, TextStyleRefinement, ThermalState, TransformationMatrix,
Transition, TransitionState, Underline, UnderlineStyle, WindowAppearance,
WindowBackgroundAppearance, WindowBounds, WindowControls, WindowDecorations, WindowOptions,
WindowParams, WindowTextSystem, point, prelude::*, px, rems, size, transparent_black,
};
use anyhow::{Context as _, Result, anyhow};
use collections::{FxHashMap, FxHashSet};
+3
View File
@@ -8,6 +8,9 @@ license = "Apache-2.0"
[lints]
workspace = true
[package.metadata.cargo-machete]
ignored = ["gpui"]
[dependencies]
gpui.workspace = true
+48 -48
View File
@@ -15,39 +15,36 @@ path = "src/gpui_linux.rs"
default = ["wayland", "x11"]
test-support = ["gpui/test-support"]
wayland = [
"bitflags",
"gpui_wgpu",
"ashpd/wayland",
"bitflags",
"gpui_wgpu",
"ashpd/wayland",
"calloop-wayland-source",
"wayland-backend",
"wayland-client",
"wayland-cursor",
"wayland-protocols",
"wayland-protocols-plasma",
"wayland-protocols-wlr",
"filedescriptor",
"xkbcommon",
"open",
"gpui/wayland",
"calloop-wayland-source",
"wayland-backend",
"wayland-client",
"wayland-cursor",
"wayland-protocols",
"wayland-protocols-plasma",
"wayland-protocols-wlr",
"filedescriptor",
"xkbcommon",
"open",
"gpui/wayland",
]
x11 = [
"gpui_wgpu",
"ashpd",
"gpui_wgpu",
"ashpd",
"as-raw-xcb-connection",
"x11rb",
"xkbcommon",
"xim",
"x11-clipboard",
"filedescriptor",
"open",
"scap?/x11",
]
screen-capture = [
"gpui/screen-capture",
"scap",
"as-raw-xcb-connection",
"x11rb",
"xkbcommon",
"xim",
"x11-clipboard",
"filedescriptor",
"open",
"scap?/x11",
]
screen-capture = ["gpui/screen-capture", "scap"]
[target.'cfg(any(target_os = "linux", target_os = "freebsd"))'.dependencies]
@@ -76,8 +73,8 @@ uuid.workspace = true
# Always used
oo7 = { version = "0.6", default-features = false, features = [
"async-std",
"native_crypto",
"async-std",
"native_crypto",
] }
calloop = "0.14.3"
raw-window-handle = "0.6"
@@ -88,7 +85,10 @@ swash = { version = "0.2.6" }
bitflags = { workspace = true, optional = true }
filedescriptor = { version = "0.8.2", optional = true }
open = { version = "5.2.0", optional = true }
xkbcommon = { version = "0.8.0", features = ["wayland", "x11"], optional = true }
xkbcommon = { version = "0.8.0", features = [
"wayland",
"x11",
], optional = true }
# Screen capture
scap = { workspace = true, optional = true }
@@ -96,38 +96,38 @@ scap = { workspace = true, optional = true }
# Wayland
calloop-wayland-source = { version = "0.4.1", optional = true }
wayland-backend = { version = "0.3.3", features = [
"client_system",
"dlopen",
"client_system",
"dlopen",
], optional = true }
wayland-client = { version = "0.31.11", optional = true }
wayland-cursor = { version = "0.31.11", optional = true }
wayland-protocols = { version = "0.32.9", features = [
"client",
"staging",
"unstable",
"client",
"staging",
"unstable",
], optional = true }
wayland-protocols-plasma = { version = "0.3.9", features = [
"client",
"client",
], optional = true }
wayland-protocols-wlr = { version = "0.3.9", features = [
"client",
"client",
], optional = true }
# X11
as-raw-xcb-connection = { version = "1", optional = true }
x11rb = { version = "0.13.1", features = [
"allow-unsafe-code",
"xkb",
"randr",
"xinput",
"cursor",
"resource_manager",
"sync",
"dri3",
"allow-unsafe-code",
"xkb",
"randr",
"xinput",
"cursor",
"resource_manager",
"sync",
"dri3",
], optional = true }
# WARNING: If you change this, you must also publish a new version of zed-xim to crates.io
xim = { git = "https://github.com/zed-industries/xim-rs.git", rev = "16f35a2c881b815a2b6cdfd6687988e84f8447d8", features = [
"x11rb-xcb",
"x11rb-client",
"x11rb-xcb",
"x11rb-client",
], package = "zed-xim", version = "0.4.0-zed", optional = true }
x11-clipboard = { version = "0.9.3", optional = true }
@@ -15,8 +15,8 @@ use calloop::{
use calloop_wayland_source::WaylandSource;
use collections::HashMap;
use filedescriptor::Pipe;
use url::Url;
use smallvec::SmallVec;
use url::Url;
use util::ResultExt as _;
use wayland_backend::client::ObjectId;
use wayland_backend::protocol::WEnum;
+1 -1
View File
@@ -7,7 +7,6 @@ use calloop::{
use collections::HashMap;
use core::str;
use gpui::{Capslock, TaskTiming, profiler};
use url::Url;
use log::Level;
use smallvec::SmallVec;
use std::{
@@ -18,6 +17,7 @@ use std::{
rc::{Rc, Weak},
time::{Duration, Instant},
};
use url::Url;
use util::ResultExt as _;
use x11rb::{
+1 -1
View File
@@ -24,4 +24,4 @@ quote.workspace = true
syn.workspace = true
[dev-dependencies]
gpui = { workspace = true, features = ["inspector"] }
gpui = { workspace = true, features = ["inspector", "test-support"] }
+6 -1
View File
@@ -15,7 +15,12 @@ path = "src/gpui_platform.rs"
default = []
font-kit = ["gpui_macos/font-kit"]
test-support = ["gpui/test-support", "gpui_macos/test-support"]
screen-capture = ["gpui/screen-capture", "gpui_macos/screen-capture", "gpui_windows/screen-capture", "gpui_linux/screen-capture"]
screen-capture = [
"gpui/screen-capture",
"gpui_macos/screen-capture",
"gpui_windows/screen-capture",
"gpui_linux/screen-capture",
]
runtime_shaders = ["gpui_macos/runtime_shaders"]
wayland = ["gpui_linux/wayland"]
x11 = ["gpui_linux/x11"]
+36 -36
View File
@@ -20,7 +20,7 @@ path = "src/gpui_web.rs"
gpui.workspace = true
parking_lot = { workspace = true, features = ["nightly"] }
gpui_wgpu.workspace = true
http_client.workspace = true
http.workspace = true
anyhow.workspace = true
futures.workspace = true
log.workspace = true
@@ -34,39 +34,39 @@ js-sys = "0.3"
raw-window-handle = "0.6"
wasm_thread = { version = "0.3", features = ["es_modules"], optional = true }
web-sys = { version = "0.3", features = [
"console",
"CompositionEvent",
"CssStyleDeclaration",
"DataTransfer",
"Document",
"DomRect",
"DragEvent",
"Element",
"EventTarget",
"File",
"FileList",
"HtmlCanvasElement",
"HtmlElement",
"HtmlInputElement",
"KeyboardEvent",
"MediaQueryList",
"MediaQueryListEvent",
"MouseEvent",
"Navigator",
"PointerEvent",
"ResizeObserver",
"ResizeObserverBoxOptions",
"ResizeObserverEntry",
"ResizeObserverSize",
"ResizeObserverOptions",
"Screen",
"Storage",
"VisualViewport",
"Headers",
"Request",
"RequestInit",
"RequestRedirect",
"Response",
"WheelEvent",
"Window",
"console",
"CompositionEvent",
"CssStyleDeclaration",
"DataTransfer",
"Document",
"DomRect",
"DragEvent",
"Element",
"EventTarget",
"File",
"FileList",
"HtmlCanvasElement",
"HtmlElement",
"HtmlInputElement",
"KeyboardEvent",
"MediaQueryList",
"MediaQueryListEvent",
"MouseEvent",
"Navigator",
"PointerEvent",
"ResizeObserver",
"ResizeObserverBoxOptions",
"ResizeObserverEntry",
"ResizeObserverSize",
"ResizeObserverOptions",
"Screen",
"Storage",
"VisualViewport",
"Headers",
"Request",
"RequestInit",
"RequestRedirect",
"Response",
"WheelEvent",
"Window",
] }
@@ -1,13 +1,21 @@
[target.wasm32-unknown-unknown]
rustflags = [
"-C", "target-feature=+atomics,+bulk-memory,+mutable-globals",
"-C", "link-arg=--shared-memory",
"-C", "link-arg=--max-memory=1073741824",
"-C", "link-arg=--import-memory",
"-C", "link-arg=--export=__wasm_init_tls",
"-C", "link-arg=--export=__tls_size",
"-C", "link-arg=--export=__tls_align",
"-C", "link-arg=--export=__tls_base",
"-C",
"target-feature=+atomics,+bulk-memory,+mutable-globals",
"-C",
"link-arg=--shared-memory",
"-C",
"link-arg=--max-memory=1073741824",
"-C",
"link-arg=--import-memory",
"-C",
"link-arg=--export=__wasm_init_tls",
"-C",
"link-arg=--export=__tls_size",
"-C",
"link-arg=--export=__tls_align",
"-C",
"link-arg=--export=__tls_base",
]
[unstable]
+9 -1
View File
@@ -135,6 +135,7 @@ struct WgpuPipelines {
mono_sprites: wgpu::RenderPipeline,
subpixel_sprites: Option<wgpu::RenderPipeline>,
poly_sprites: wgpu::RenderPipeline,
#[allow(dead_code)]
surfaces: wgpu::RenderPipeline,
/// Copies a source texture into the (smaller) target with one bilinear tap. Used both to
/// downsample the scene into the half-resolution blur texture and to blit the offscreen
@@ -166,6 +167,7 @@ struct WgpuResources {
bind_group_layouts: WgpuBindGroupLayouts,
atlas_sampler: wgpu::Sampler,
surface_sampler: wgpu::Sampler,
#[allow(dead_code)]
surface_uniform_buffer: wgpu::Buffer,
/// One reused uniform buffer holding [`BlurParams`] for every blur pass in a frame, each at a
/// distinct (alignment-strided) offset. Avoids allocating a buffer per pass; distinct offsets
@@ -1041,7 +1043,7 @@ impl WgpuRenderer {
&layouts.globals,
&layouts.surfaces,
wgpu::PrimitiveTopology::TriangleStrip,
&[Some(color_target.clone())],
&[Some(color_target)],
1,
&shader_module,
);
@@ -1845,6 +1847,7 @@ impl WgpuRenderer {
)
}
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
fn draw_surfaces(&self, surfaces: &[PaintSurface], pass: &mut wgpu::RenderPass<'_>) -> bool {
let resources = self.resources();
for surface in surfaces {
@@ -1894,6 +1897,11 @@ impl WgpuRenderer {
true
}
#[cfg(not(any(target_os = "linux", target_os = "freebsd")))]
fn draw_surfaces(&self, _surfaces: &[PaintSurface], _pass: &mut wgpu::RenderPass<'_>) -> bool {
true
}
/// Build a bind group for a blur pass. Writes `params` into the next slot of the shared
/// `blur_params_buffer` (no per-pass allocation) and references that slot, the source texture,
/// and the filtering sampler. Distinct per-pass offsets keep `write_buffer`'s
@@ -114,16 +114,20 @@ struct DirectXResources {
/// (indexed by isolation depth), up to [`MAX_FILTER_DEPTH`], so nested content blurs isolate
/// correctly; deeper nests render inline.
struct BlurResources {
#[expect(dead_code)]
scene_color: ID3D11Texture2D,
scene_color_rtv: Option<ID3D11RenderTargetView>,
scene_color_srv: Option<ID3D11ShaderResourceView>,
#[expect(dead_code)]
ping: ID3D11Texture2D,
ping_rtv: Option<ID3D11RenderTargetView>,
ping_srv: Option<ID3D11ShaderResourceView>,
#[expect(dead_code)]
pong: ID3D11Texture2D,
pong_rtv: Option<ID3D11RenderTargetView>,
pong_srv: Option<ID3D11ShaderResourceView>,
// Kept alive for the lifetime of their views; indexed by isolation depth.
#[expect(dead_code)]
groups: Vec<ID3D11Texture2D>,
group_rtvs: Vec<Option<ID3D11RenderTargetView>>,
group_srvs: Vec<Option<ID3D11ShaderResourceView>>,
+60
View File
@@ -0,0 +1,60 @@
[graph]
targets = []
all-features = false
no-default-features = false
[output]
feature-depth = 1
[advisories]
ignore = []
unmaintained = "none"
unsound = "none"
[licenses]
allow = [
"MIT",
"Apache-2.0",
"Apache-2.0 WITH LLVM-exception",
"BSD-2-Clause",
"BSD-3-Clause",
"ISC",
"Zlib",
"Unicode-3.0",
"0BSD",
"MPL-2.0",
"CC0-1.0",
"bzip2-1.0.6",
"NCSA",
]
confidence-threshold = 0.8
exceptions = []
[licenses.private]
ignore = true
registries = [
#"https://sekretz.com/registry
]
[bans]
multiple-versions = "allow"
wildcards = "allow"
highlight = "all"
workspace-default-features = "allow"
external-default-features = "allow"
allow = []
allow-workspace = true
deny = []
skip = []
skip-tree = []
[sources]
unknown-registry = "deny"
unknown-git = "deny"
allow-registry = ["https://github.com/rust-lang/crates.io-index"]
allow-git = []
[sources.allow-org]
github = ["zed-industries", "proptest-rs"]
gitlab = []
bitbucket = []
+7 -1
View File
@@ -106,7 +106,13 @@
devShells.default = pkgs.mkShell {
inputsFrom = [ gpui ];
packages = [ toolchain ];
packages = [
toolchain
pkgs.cargo-machete
pkgs.taplo
pkgs.typos
pkgs.just
];
shellHook = ''
export RUST_BACKTRACE=1
+1 -1
View File
@@ -6,7 +6,7 @@ set positional-arguments := true
set allow-duplicate-variables := true
project_root := justfile_directory()
msrv := "1.85.0"
msrv := "1.92.0"
# ▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰ #
# Recipes #
+3 -3
View File
@@ -13,18 +13,18 @@ description = "A tool for measuring GPUI test performance"
missing_docs = "warn"
[lints.clippy]
needless_continue = "allow" # For a convenience macro
needless_continue = "allow" # For a convenience macro
all = "warn"
pedantic = "warn"
style = "warn"
missing_docs_in_private_items = "warn"
as_underscore = "deny"
allow_attributes = "deny"
allow_attributes_without_reason = "deny" # This covers `expect` also, since we deny `allow`
allow_attributes_without_reason = "deny" # This covers `expect` also, since we deny `allow`
let_underscore_must_use = "forbid"
undocumented_unsafe_blocks = "forbid"
missing_safety_doc = "forbid"
disallowed_methods = { level = "allow", priority = 1}
disallowed_methods = { level = "allow", priority = 1 }
[dependencies]
collections.workspace = true
+6 -7
View File
@@ -1,16 +1,15 @@
[files]
ignore-files = true
ignore-hidden = false
extend-exclude = [
".git/",
]
extend-exclude = [".git/"]
[default]
extend-ignore-re = [
# macOS version
"Big Sur",
# Stripped version of reserved keyword `type`
"typ",
# macOS version
"Big Sur",
# Stripped version of reserved keyword `type`
"typ",
]
check-filename = true