mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-18 00:11:08 +08:00
feat: initialize workspace with clash-verge-draft and clash-verge-logging crates (#5489)
- Add Cargo.toml for workspace management, including dependencies and profiles. - Create clash-verge-draft crate with basic structure, including a benchmark for Draft functionality. - Implement Draft management with shared state and asynchronous modifications. - Add tests for Draft functionality to ensure correctness. - Create clash-verge-logging crate for logging utilities with structured log types and macros. - Update src-tauri to use new crates and remove unnecessary configurations. - Refactor existing code to utilize the new Draft and logging functionalities.
This commit is contained in:
parent
0866b93175
commit
056af768e5
@ -126,7 +126,7 @@ If you changed the rust code, it's recommanded to execute code style formatting
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# For rust backend
|
# For rust backend
|
||||||
$ clash-verge-rev: pnpm clippy
|
$ clash-verge-rev: cargo clippy-all
|
||||||
# For frontend (not yet).
|
# For frontend (not yet).
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -134,8 +134,7 @@ $ clash-verge-rev: pnpm clippy
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# For rust backend
|
# For rust backend
|
||||||
$ clash-verge-rev: cd src-tauri
|
$ clash-verge-rev: cargo fmt
|
||||||
$ clash-verge-rev/src-tauri: cargo fmt
|
|
||||||
# For frontend
|
# For frontend
|
||||||
$ clash-verge-rev: pnpm format:check
|
$ clash-verge-rev: pnpm format:check
|
||||||
$ clash-verge-rev: pnpm format
|
$ clash-verge-rev: pnpm format
|
||||||
|
|||||||
347
src-tauri/Cargo.lock → Cargo.lock
generated
347
src-tauri/Cargo.lock → Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
118
Cargo.toml
Normal file
118
Cargo.toml
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
[workspace]
|
||||||
|
members = [
|
||||||
|
"src-tauri",
|
||||||
|
"crates/clash-verge-draft",
|
||||||
|
"crates/clash-verge-logging",
|
||||||
|
]
|
||||||
|
resolver = "2"
|
||||||
|
|
||||||
|
[workspace.package]
|
||||||
|
edition = "2024"
|
||||||
|
rust-version = "1.91"
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
panic = "abort"
|
||||||
|
codegen-units = 1
|
||||||
|
lto = "thin"
|
||||||
|
opt-level = 3
|
||||||
|
debug = false
|
||||||
|
strip = true
|
||||||
|
overflow-checks = false
|
||||||
|
rpath = false
|
||||||
|
|
||||||
|
[profile.dev]
|
||||||
|
incremental = true
|
||||||
|
codegen-units = 64
|
||||||
|
opt-level = 0
|
||||||
|
debug = true
|
||||||
|
strip = "none"
|
||||||
|
overflow-checks = true
|
||||||
|
lto = false
|
||||||
|
rpath = false
|
||||||
|
|
||||||
|
[profile.fast-release]
|
||||||
|
inherits = "release"
|
||||||
|
codegen-units = 64
|
||||||
|
incremental = true
|
||||||
|
lto = false
|
||||||
|
opt-level = 0
|
||||||
|
debug = true
|
||||||
|
strip = false
|
||||||
|
|
||||||
|
[workspace.dependencies]
|
||||||
|
clash-verge-draft = { path = "crates/clash-verge-draft" }
|
||||||
|
clash-verge-logging = { path = "crates/clash-verge-logging" }
|
||||||
|
parking_lot = { version = "0.12.5", features = [
|
||||||
|
"hardware-lock-elision",
|
||||||
|
"send_guard",
|
||||||
|
] }
|
||||||
|
anyhow = "1.0.100"
|
||||||
|
criterion = { version = "0.7.0", features = ["async_tokio"] }
|
||||||
|
tokio = { version = "1.48.0", features = [
|
||||||
|
"rt-multi-thread",
|
||||||
|
"macros",
|
||||||
|
"time",
|
||||||
|
"sync",
|
||||||
|
] }
|
||||||
|
compact_str = { version = "0.9.0", features = ["serde"] }
|
||||||
|
flexi_logger = "0.31.7"
|
||||||
|
log = "0.4.28"
|
||||||
|
|
||||||
|
[workspace.lints.clippy]
|
||||||
|
correctness = { level = "deny", priority = -1 }
|
||||||
|
suspicious = { level = "deny", priority = -1 }
|
||||||
|
unwrap_used = "warn"
|
||||||
|
expect_used = "warn"
|
||||||
|
panic = "deny"
|
||||||
|
unimplemented = "deny"
|
||||||
|
todo = "warn"
|
||||||
|
dbg_macro = "warn"
|
||||||
|
clone_on_ref_ptr = "warn"
|
||||||
|
rc_clone_in_vec_init = "warn"
|
||||||
|
large_stack_arrays = "warn"
|
||||||
|
large_const_arrays = "warn"
|
||||||
|
async_yields_async = "deny"
|
||||||
|
mutex_atomic = "deny"
|
||||||
|
mutex_integer = "deny"
|
||||||
|
rc_mutex = "deny"
|
||||||
|
unused_async = "deny"
|
||||||
|
await_holding_lock = "deny"
|
||||||
|
large_futures = "deny"
|
||||||
|
future_not_send = "deny"
|
||||||
|
redundant_else = "deny"
|
||||||
|
needless_continue = "deny"
|
||||||
|
needless_raw_string_hashes = "deny"
|
||||||
|
or_fun_call = "deny"
|
||||||
|
cognitive_complexity = "deny"
|
||||||
|
useless_let_if_seq = "deny"
|
||||||
|
use_self = "deny"
|
||||||
|
tuple_array_conversions = "deny"
|
||||||
|
trait_duplication_in_bounds = "deny"
|
||||||
|
suspicious_operation_groupings = "deny"
|
||||||
|
string_lit_as_bytes = "deny"
|
||||||
|
significant_drop_tightening = "deny"
|
||||||
|
significant_drop_in_scrutinee = "deny"
|
||||||
|
redundant_clone = "deny"
|
||||||
|
# option_if_let_else = "deny" // 过于激进,暂时不开启
|
||||||
|
needless_pass_by_ref_mut = "deny"
|
||||||
|
needless_collect = "deny"
|
||||||
|
missing_const_for_fn = "deny"
|
||||||
|
iter_with_drain = "deny"
|
||||||
|
iter_on_single_items = "deny"
|
||||||
|
iter_on_empty_collections = "deny"
|
||||||
|
# fallible_impl_from = "deny" // 过于激进,暂时不开启
|
||||||
|
equatable_if_let = "deny"
|
||||||
|
collection_is_never_read = "deny"
|
||||||
|
branches_sharing_code = "deny"
|
||||||
|
pathbuf_init_then_push = "deny"
|
||||||
|
option_as_ref_cloned = "deny"
|
||||||
|
large_types_passed_by_value = "deny"
|
||||||
|
# implicit_clone = "deny" // 可能会造成额外开销,暂时不开启
|
||||||
|
expl_impl_clone_on_copy = "deny"
|
||||||
|
copy_iterator = "deny"
|
||||||
|
cloned_instead_of_copied = "deny"
|
||||||
|
# self_only_used_in_recursion = "deny" // Since 1.92.0
|
||||||
|
unnecessary_self_imports = "deny"
|
||||||
|
unused_trait_names = "deny"
|
||||||
|
wildcard_imports = "deny"
|
||||||
|
unnecessary_wraps = "deny"
|
||||||
@ -1,5 +1,5 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "draft"
|
name = "clash-verge-draft"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
@ -3,7 +3,7 @@ use std::hint::black_box;
|
|||||||
use std::process;
|
use std::process;
|
||||||
use tokio::runtime::Runtime;
|
use tokio::runtime::Runtime;
|
||||||
|
|
||||||
use draft::Draft;
|
use clash_verge_draft::Draft;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
struct IVerge {
|
struct IVerge {
|
||||||
@ -1,7 +1,7 @@
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
use draft::Draft;
|
use clash_verge_draft::Draft;
|
||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use std::task::{Context, Poll, RawWaker, RawWakerVTable, Waker};
|
use std::task::{Context, Poll, RawWaker, RawWakerVTable, Waker};
|
||||||
@ -24,8 +24,6 @@
|
|||||||
"release:autobuild": "pnpm release-version autobuild",
|
"release:autobuild": "pnpm release-version autobuild",
|
||||||
"release:deploytest": "pnpm release-version deploytest",
|
"release:deploytest": "pnpm release-version deploytest",
|
||||||
"publish-version": "node scripts/publish-version.mjs",
|
"publish-version": "node scripts/publish-version.mjs",
|
||||||
"fmt": "cargo fmt --manifest-path ./src-tauri/Cargo.toml",
|
|
||||||
"clippy": "cargo clippy --all-features --all-targets --manifest-path ./src-tauri/Cargo.toml",
|
|
||||||
"lint": "eslint -c eslint.config.ts --max-warnings=0 --cache --cache-location .eslintcache src",
|
"lint": "eslint -c eslint.config.ts --max-warnings=0 --cache --cache-location .eslintcache src",
|
||||||
"lint:fix": "eslint -c eslint.config.ts --max-warnings=0 --cache --cache-location .eslintcache --fix src",
|
"lint:fix": "eslint -c eslint.config.ts --max-warnings=0 --cache --cache-location .eslintcache --fix src",
|
||||||
"format": "prettier --write .",
|
"format": "prettier --write .",
|
||||||
|
|||||||
@ -6,13 +6,13 @@ authors = ["zzzgydi", "Tunglies", "wonfen", "MystiPanda"]
|
|||||||
license = "GPL-3.0-only"
|
license = "GPL-3.0-only"
|
||||||
repository = "https://github.com/clash-verge-rev/clash-verge-rev.git"
|
repository = "https://github.com/clash-verge-rev/clash-verge-rev.git"
|
||||||
default-run = "clash-verge"
|
default-run = "clash-verge"
|
||||||
edition = "2024"
|
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
rust-version = "1.91"
|
edition = { workspace = true }
|
||||||
|
rust-version = { workspace = true }
|
||||||
|
|
||||||
[workspace]
|
[lib]
|
||||||
members = ["crates/*"]
|
name = "app_lib"
|
||||||
resolver = "2"
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["custom-protocol"]
|
default = ["custom-protocol"]
|
||||||
@ -30,11 +30,11 @@ identifier = "io.github.clash-verge-rev.clash-verge-rev"
|
|||||||
tauri-build = { version = "2.5.2", features = [] }
|
tauri-build = { version = "2.5.2", features = [] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clash-verge-logging = { path = "crates/clash-verge-logging" }
|
clash-verge-draft = { workspace = true }
|
||||||
|
clash-verge-logging = { workspace = true }
|
||||||
parking_lot = { workspace = true }
|
parking_lot = { workspace = true }
|
||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
draft = { workspace = true }
|
|
||||||
compact_str = { workspace = true }
|
compact_str = { workspace = true }
|
||||||
flexi_logger = { workspace = true }
|
flexi_logger = { workspace = true }
|
||||||
log = { workspace = true }
|
log = { workspace = true }
|
||||||
@ -132,142 +132,3 @@ tauri-plugin-updater = "2.9.0"
|
|||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
criterion = { workspace = true }
|
criterion = { workspace = true }
|
||||||
|
|
||||||
[workspace.dependencies]
|
|
||||||
draft = { path = "crates/draft" }
|
|
||||||
parking_lot = { version = "0.12.5", features = [
|
|
||||||
"hardware-lock-elision",
|
|
||||||
"send_guard",
|
|
||||||
] }
|
|
||||||
anyhow = "1.0.100"
|
|
||||||
criterion = { version = "0.7.0", features = ["async_tokio"] }
|
|
||||||
tokio = { version = "1.48.0", features = [
|
|
||||||
"rt-multi-thread",
|
|
||||||
"macros",
|
|
||||||
"time",
|
|
||||||
"sync",
|
|
||||||
] }
|
|
||||||
compact_str = { version = "0.9.0", features = ["serde"] }
|
|
||||||
flexi_logger = "0.31.7"
|
|
||||||
log = "0.4.28"
|
|
||||||
|
|
||||||
[profile.release]
|
|
||||||
panic = "abort"
|
|
||||||
codegen-units = 1
|
|
||||||
lto = "thin"
|
|
||||||
opt-level = 3
|
|
||||||
debug = false
|
|
||||||
strip = true
|
|
||||||
overflow-checks = false
|
|
||||||
rpath = false
|
|
||||||
|
|
||||||
[profile.dev]
|
|
||||||
incremental = true
|
|
||||||
codegen-units = 64
|
|
||||||
opt-level = 0
|
|
||||||
debug = true
|
|
||||||
strip = "none"
|
|
||||||
overflow-checks = true
|
|
||||||
lto = false
|
|
||||||
rpath = false
|
|
||||||
|
|
||||||
[profile.fast-release]
|
|
||||||
inherits = "release"
|
|
||||||
codegen-units = 64
|
|
||||||
incremental = true
|
|
||||||
lto = false
|
|
||||||
opt-level = 0
|
|
||||||
debug = true
|
|
||||||
strip = false
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
name = "app_lib"
|
|
||||||
crate-type = ["staticlib", "cdylib", "rlib"]
|
|
||||||
|
|
||||||
[lints.clippy]
|
|
||||||
# Core categories - most important for code safety and correctness
|
|
||||||
correctness = { level = "deny", priority = -1 }
|
|
||||||
suspicious = { level = "deny", priority = -1 }
|
|
||||||
|
|
||||||
# Critical safety lints - warn for now due to extensive existing usage
|
|
||||||
unwrap_used = "warn"
|
|
||||||
expect_used = "warn"
|
|
||||||
panic = "deny"
|
|
||||||
unimplemented = "deny"
|
|
||||||
|
|
||||||
# Development quality lints
|
|
||||||
todo = "warn"
|
|
||||||
dbg_macro = "warn"
|
|
||||||
|
|
||||||
# 我们期望所有输出方式通过 logging 模块进行统一管理
|
|
||||||
# print_stdout = "deny"
|
|
||||||
# print_stderr = "deny"
|
|
||||||
|
|
||||||
# Performance lints for proxy application
|
|
||||||
clone_on_ref_ptr = "warn"
|
|
||||||
rc_clone_in_vec_init = "warn"
|
|
||||||
large_stack_arrays = "warn"
|
|
||||||
large_const_arrays = "warn"
|
|
||||||
|
|
||||||
# Security lints
|
|
||||||
#integer_division = "warn"
|
|
||||||
#lossy_float_literal = "warn"
|
|
||||||
#default_numeric_fallback = "warn"
|
|
||||||
|
|
||||||
# Mutex and async lints - strict control
|
|
||||||
async_yields_async = "deny" # Prevents missing await in async blocks
|
|
||||||
mutex_atomic = "deny" # Use atomics instead of Mutex<bool/int>
|
|
||||||
mutex_integer = "deny" # Use AtomicInt instead of Mutex<int>
|
|
||||||
rc_mutex = "deny" # Single-threaded Rc with Mutex is wrong
|
|
||||||
unused_async = "deny" # Too many false positives in Tauri/framework code
|
|
||||||
await_holding_lock = "deny"
|
|
||||||
large_futures = "deny"
|
|
||||||
future_not_send = "deny"
|
|
||||||
|
|
||||||
# Common style improvements
|
|
||||||
redundant_else = "deny" # Too many in existing code
|
|
||||||
needless_continue = "deny" # Too many in existing code
|
|
||||||
needless_raw_string_hashes = "deny" # Too many in existing code
|
|
||||||
|
|
||||||
# Disable noisy categories for existing codebase but keep them available
|
|
||||||
#style = { level = "allow", priority = -1 }
|
|
||||||
#complexity = { level = "allow", priority = -1 }
|
|
||||||
#perf = { level = "allow", priority = -1 }
|
|
||||||
#pedantic = { level = "allow", priority = -1 }
|
|
||||||
#nursery = { level = "allow", priority = -1 }
|
|
||||||
#restriction = { level = "allow", priority = -1 }
|
|
||||||
|
|
||||||
or_fun_call = "deny"
|
|
||||||
cognitive_complexity = "deny"
|
|
||||||
useless_let_if_seq = "deny"
|
|
||||||
use_self = "deny"
|
|
||||||
tuple_array_conversions = "deny"
|
|
||||||
trait_duplication_in_bounds = "deny"
|
|
||||||
suspicious_operation_groupings = "deny"
|
|
||||||
string_lit_as_bytes = "deny"
|
|
||||||
significant_drop_tightening = "deny"
|
|
||||||
significant_drop_in_scrutinee = "deny"
|
|
||||||
redundant_clone = "deny"
|
|
||||||
# option_if_let_else = "deny" // 过于激进,暂时不开启
|
|
||||||
needless_pass_by_ref_mut = "deny"
|
|
||||||
needless_collect = "deny"
|
|
||||||
missing_const_for_fn = "deny"
|
|
||||||
iter_with_drain = "deny"
|
|
||||||
iter_on_single_items = "deny"
|
|
||||||
iter_on_empty_collections = "deny"
|
|
||||||
# fallible_impl_from = "deny" // 过于激进,暂时不开启
|
|
||||||
equatable_if_let = "deny"
|
|
||||||
collection_is_never_read = "deny"
|
|
||||||
branches_sharing_code = "deny"
|
|
||||||
pathbuf_init_then_push = "deny"
|
|
||||||
option_as_ref_cloned = "deny"
|
|
||||||
large_types_passed_by_value = "deny"
|
|
||||||
# implicit_clone = "deny" // 可能会造成额外开销,暂时不开启
|
|
||||||
expl_impl_clone_on_copy = "deny"
|
|
||||||
copy_iterator = "deny"
|
|
||||||
cloned_instead_of_copied = "deny"
|
|
||||||
# self_only_used_in_recursion = "deny" // Since 1.92.0
|
|
||||||
unnecessary_self_imports = "deny"
|
|
||||||
unused_trait_names = "deny"
|
|
||||||
wildcard_imports = "deny"
|
|
||||||
unnecessary_wraps = "deny"
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
use super::CmdResult;
|
use super::CmdResult;
|
||||||
use crate::{cmd::StringifyErr as _, config::IVerge, feat};
|
use crate::{cmd::StringifyErr as _, config::IVerge, feat};
|
||||||
use draft::SharedBox;
|
use clash_verge_draft::SharedBox;
|
||||||
|
|
||||||
/// 获取Verge配置
|
/// 获取Verge配置
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
|
|||||||
@ -9,8 +9,8 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use anyhow::{Result, anyhow};
|
use anyhow::{Result, anyhow};
|
||||||
use backoff::{Error as BackoffError, ExponentialBackoff};
|
use backoff::{Error as BackoffError, ExponentialBackoff};
|
||||||
|
use clash_verge_draft::Draft;
|
||||||
use clash_verge_logging::{Type, logging, logging_error};
|
use clash_verge_logging::{Type, logging, logging_error};
|
||||||
use draft::Draft;
|
|
||||||
use smartstring::alias::String;
|
use smartstring::alias::String;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use tokio::sync::OnceCell;
|
use tokio::sync::OnceCell;
|
||||||
|
|||||||
@ -4,8 +4,8 @@ use crate::{
|
|||||||
module::{auto_backup::AutoBackupManager, lightweight},
|
module::{auto_backup::AutoBackupManager, lightweight},
|
||||||
};
|
};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use clash_verge_draft::SharedBox;
|
||||||
use clash_verge_logging::{Type, logging, logging_error};
|
use clash_verge_logging::{Type, logging, logging_error};
|
||||||
use draft::SharedBox;
|
|
||||||
use serde_yaml_ng::Mapping;
|
use serde_yaml_ng::Mapping;
|
||||||
|
|
||||||
/// Patch Clash configuration
|
/// Patch Clash configuration
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user