fix(dev): reduce Rust development check noise

This commit is contained in:
Darkatse 2026-06-24 22:40:25 -04:00
parent d1a7ddc860
commit 8934f9717a
5 changed files with 30 additions and 11 deletions

View file

@ -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
}

View file

@ -90,7 +90,7 @@ pnpm install
常用命令:
```bash
pnpm run check # guardrails + host kernel 类型检查(推荐每次改动后先跑)
pnpm run check # 前端 guardrails/types/contracts + Rust dev check
pnpm run web:build # 构建前端资源包(Rspack)
pnpm run dev # 桌面开发模式(等价 tauri:dev)
pnpm run tauri:dev # 桌面开发模式

View file

@ -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`。

View file

@ -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",

View file

@ -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");
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<dyn Error>> {
fn generate_resource_artifacts(needs_embedded_resources: bool) -> Result<(), Box<dyn Error>> {
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<dyn Error>> {
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