From 8934f9717a846d2acf03c90f62d583794af4eb98 Mon Sep 17 00:00:00 2001 From: Darkatse <39111369+Darkatse@users.noreply.github.com> Date: Wed, 24 Jun 2026 22:40:25 -0400 Subject: [PATCH] fix(dev): reduce Rust development check noise --- .vscode/settings.json | 3 +++ README.md | 4 ++-- docs/FrontendGuide.md | 4 ++-- package.json | 5 ++++- src-tauri/build.rs | 25 +++++++++++++++++++------ 5 files changed, 30 insertions(+), 11 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index ef4d97c7..73a90d8e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,4 +1,7 @@ { + "rust-analyzer.cargo.allTargets": false, "rust-analyzer.cargo.noDefaultFeatures": true, + "rust-analyzer.cargo.targetDir": true, + "rust-analyzer.check.allTargets": false, "rust-analyzer.check.noDefaultFeatures": true } diff --git a/README.md b/README.md index b1ef9790..81d6aa82 100644 --- a/README.md +++ b/README.md @@ -90,8 +90,8 @@ pnpm install 常用命令: ```bash -pnpm run check # guardrails + host kernel 类型检查(推荐每次改动后先跑) -pnpm run web:build # 构建前端资源包(Rspack) +pnpm run check # 前端 guardrails/types/contracts + Rust dev check +pnpm run web:build # 构建前端资源包(Rspack) pnpm run dev # 桌面开发模式(等价 tauri:dev) pnpm run tauri:dev # 桌面开发模式 pnpm run tauri:build # 构建桌面发行包 diff --git a/docs/FrontendGuide.md b/docs/FrontendGuide.md index 6f669e66..9f3904e4 100644 --- a/docs/FrontendGuide.md +++ b/docs/FrontendGuide.md @@ -300,7 +300,7 @@ src/ 4. 在 `src/tauri/main/routes/` 对应业务域中新增路由:路由层禁止直接引用 `window`,需要浏览器能力时下沉到 `adapters/` 或 `services/`。 5. 路由内只做参数校验、DTO 组装、`context.safeInvoke` 调用;错误直接暴露(避免 silent fallback)。 6. 保持返回结构稳定(状态码 + JSON 结构),避免破坏上游前端调用假设。 -7. 跑 `pnpm run check`(guardrails + types),确保依赖边界与行数预算未回归。 +7. 跑 `pnpm run check`,确保前端宿主边界、类型契约与 Rust dev check 未回归。 ## 10. 调试与验证 @@ -338,7 +338,7 @@ src/ 目标:把宿主层(`src/tauri/main/*`)限制在**可长期维护**的规模与依赖形态,避免再次回到单文件膨胀与隐式耦合。 -- 一键检查:`pnpm run check`(= `check:frontend` + `check:types`)。 +- 一键检查:`pnpm run check`(= `check:frontend` + `check:types` + `check:contracts` + `check:rust:dev`)。 - Guardrails(`scripts/check-frontend-guardrails.mjs`): - 行数预算:默认单文件 `<= 500` 行;关键聚合文件受 `scripts/guardrails/frontend-lines-baseline.json` 的基线约束。 - 依赖边界:`kernel/ports` 不得 import `services/routes/adapters`;`services` 不得 import `routes`。 diff --git a/package.json b/package.json index fb0c3fda..71eda061 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,14 @@ "ios": "tauri ios", "build": "pnpm run tauri:build", "dev": "pnpm run tauri:dev", - "check": "pnpm run check:frontend && pnpm run check:types && pnpm run check:contracts", + "check": "pnpm run check:frontend && pnpm run check:types && pnpm run check:contracts && pnpm run check:rust:dev", "check:frontend": "node scripts/check-frontend-guardrails.mjs", "check:frontend:baseline": "node scripts/check-frontend-guardrails.mjs --update-baseline", "check:types": "tsc -p tsconfig.host.json", "check:contracts": "pnpm run test:contracts", + "check:rust:dev": "cargo check --manifest-path src-tauri/Cargo.toml --no-default-features", + "check:rust:all-targets": "cargo check --manifest-path src-tauri/Cargo.toml --no-default-features --all-targets", + "check:rust:release-path": "cargo check --manifest-path src-tauri/Cargo.toml", "test": "pnpm run test:contracts", "test:contracts": "node --test --test-concurrency=1 \"tests/**/*.test.mjs\"", "web:build": "rspack build --config rspack.config.js", diff --git a/src-tauri/build.rs b/src-tauri/build.rs index 6ffccf15..b8cf65fc 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -4,10 +4,14 @@ use std::path::{Path, PathBuf}; use std::process::Command; fn main() { + let needs_embedded_resources = needs_embedded_resources(); + // These are the frontend/resource directories that feed generated Rust artifacts. println!("cargo:rerun-if-changed=../default/content"); - println!("cargo:rerun-if-changed=../src/scripts/templates"); - println!("cargo:rerun-if-changed=../src/scripts/extensions"); + if needs_embedded_resources { + println!("cargo:rerun-if-changed=../src/scripts/templates"); + println!("cargo:rerun-if-changed=../src/scripts/extensions"); + } println!("cargo:rerun-if-changed=../.git/HEAD"); println!("cargo:rerun-if-changed=../.git/refs"); println!("cargo:rerun-if-env-changed=GITHUB_REF_NAME"); @@ -17,13 +21,18 @@ fn main() { emit_git_build_metadata(); emit_ios_policy_build_profile(); - if let Err(error) = generate_resource_artifacts() { + if let Err(error) = generate_resource_artifacts(needs_embedded_resources) { panic!("Failed to generate resource artifacts: {}", error); } tauri_build::build() } +fn needs_embedded_resources() -> bool { + std::env::var("CARGO_CFG_TARGET_OS").as_deref() == Ok("android") + || std::env::var_os("CARGO_FEATURE_PORTABLE").is_some() +} + fn emit_git_build_metadata() { let git_branch = normalize_git_branch( std::env::var("GITHUB_REF_NAME") @@ -109,10 +118,8 @@ struct ResourceEntry { source_path: PathBuf, } -fn generate_resource_artifacts() -> Result<(), Box> { +fn generate_resource_artifacts(needs_embedded_resources: bool) -> Result<(), Box> { let content_root = PathBuf::from("../default/content"); - let template_root = PathBuf::from("../src/scripts/templates"); - let extension_root = PathBuf::from("../src/scripts/extensions"); let out_dir = PathBuf::from(std::env::var("OUT_DIR")?); let mut content_files = collect_relative_files(&content_root, &content_root)?; @@ -124,6 +131,12 @@ fn generate_resource_artifacts() -> Result<(), Box> { content_manifest.as_bytes(), )?; + if !needs_embedded_resources { + return Ok(()); + } + + let template_root = PathBuf::from("../src/scripts/templates"); + let extension_root = PathBuf::from("../src/scripts/extensions"); let mut embedded_resources = Vec::new(); embedded_resources.extend( content_files