-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCargo.toml
More file actions
205 lines (178 loc) · 6.67 KB
/
Copy pathCargo.toml
File metadata and controls
205 lines (178 loc) · 6.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
[workspace]
resolver = "3"
members = [
"crates/plumb-core",
"crates/plumb-format",
"crates/plumb-cdp",
"crates/plumb-config",
"crates/plumb-codegen",
"crates/plumb-mcp",
"crates/plumb-cli",
"crates/plumb-e2e",
"xtask",
]
default-members = [
"crates/plumb-core",
"crates/plumb-format",
"crates/plumb-cdp",
"crates/plumb-config",
"crates/plumb-codegen",
"crates/plumb-mcp",
"crates/plumb-cli",
]
[workspace.package]
version = "0.0.13"
edition = "2024"
rust-version = "1.95"
license = "MIT OR Apache-2.0"
authors = ["Aram Hammoudeh <aram.devdocs@gmail.com>"]
homepage = "https://plumb.aramhammoudeh.com"
documentation = "https://plumb.aramhammoudeh.com"
repository = "https://github.com/aram-devdocs/plumb"
readme = "README.md"
keywords = ["design-system", "linter", "mcp", "chromium", "cdp"]
categories = ["command-line-utilities", "development-tools", "web-programming"]
[workspace.dependencies]
# Internal path dependencies resolved by consumers.
plumb-core = { path = "crates/plumb-core", version = "0.0.13" }
plumb-format = { path = "crates/plumb-format", version = "0.0.13" }
plumb-cdp = { path = "crates/plumb-cdp", version = "0.0.13" }
plumb-config = { path = "crates/plumb-config", version = "0.0.13" }
plumb-codegen = { path = "crates/plumb-codegen", version = "0.0.13" }
plumb-mcp = { path = "crates/plumb-mcp", version = "0.0.13" }
# CDP driver.
chromiumoxide = { version = "0.9", default-features = false }
# MCP SDK.
rmcp = { version = "1.6", default-features = false, features = ["base64", "macros", "server", "transport-io", "transport-streamable-http-server", "schemars"] }
# Async runtime.
tokio = { version = "1", features = ["rt-multi-thread", "macros", "io-util", "io-std", "sync", "time", "fs", "process"] }
futures-util = { version = "0.3", default-features = false, features = ["std"] }
axum = { version = "0.8", default-features = false, features = ["http1", "tokio"] }
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
subtle = "2"
# CLI parsing.
clap = { version = "4", features = ["derive", "env", "wrap_help"] }
# Serialization.
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "1"
serde_yaml = "0.9"
# Schema emission.
schemars = { version = "1", features = ["indexmap2", "preserve_order"] }
# Config loading.
figment = { version = "0.10", features = ["toml", "yaml", "json", "env"] }
# Diagnostics.
miette = { version = "7", features = ["fancy"] }
thiserror = "2"
anyhow = "1"
# Observability.
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
# Deterministic data structures.
indexmap = { version = "2", features = ["serde"] }
ahash = "0.8"
# Subprocess discovery (Tailwind adapter).
which = "8"
# Content hashing (Tailwind cache key).
sha2 = "0.11"
# Path canonicalization that strips `\\?\` UNC prefix on Windows
# (Tailwind adapter — node's `require()` doesn't handle the prefix).
dunce = "1"
# Color distance (CIEDE2000, D65).
palette = { version = "0.7", default-features = false, features = ["std"] }
# WHATWG URL parsing — used in plumb-cdp to compute storage-state
# origins (default-port elision, IDNA, scheme case-folding).
url = "2"
# Parallelism (used only where deterministic: sorted inputs with deterministic folds).
rayon = "1"
# Filesystem watcher for `plumb watch` (#83). Notify is the cross-platform
# inotify/FSEvents/ReadDirectoryChangesW abstraction; the companion
# `notify-debouncer-full` collapses bursts of related events into a single
# debounced cycle.
notify = "8"
notify-debouncer-full = "0.6"
# Dev-only.
insta = { version = "1", features = ["json", "yaml", "filters"] }
assert_cmd = "2"
predicates = "3"
proptest = "1"
criterion = { version = "0.8", features = ["html_reports"] }
tempfile = "3"
serial_test = "3"
[workspace.lints.rust]
unsafe_code = "forbid"
missing_docs = "deny"
unreachable_pub = "warn"
rust_2024_compatibility = { level = "warn", priority = -1 }
# No-legacy-code policy (.agents/rules/no-legacy-code.md). CI already
# promotes every warn to an error via RUSTFLAGS=-Dwarnings; these
# explicit denies encode the intent in the workspace manifest so
# contributors see the policy at the source.
dead_code = "deny"
unused_imports = "deny"
# `deprecated` stays overridable at the registration site via a tightly
# scoped `#[allow(deprecated)]`. Every such allow is a marker for the
# removal PR to delete alongside the deprecated item.
deprecated = "deny"
[workspace.lints.clippy]
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
cargo = { level = "warn", priority = -1 }
# Deny everything that smells like debug/half-finished/imprecise code.
dbg_macro = "deny"
todo = "deny"
unimplemented = "deny"
unwrap_used = "deny"
expect_used = "deny"
panic = "deny"
print_stdout = "deny"
print_stderr = "deny"
# Tighten what pedantic leaves as warn.
module_name_repetitions = "allow"
must_use_candidate = "allow"
missing_errors_doc = "warn"
missing_panics_doc = "warn"
# Pedantic/nursery noise we deliberately accept. Each has a reason:
# multiple_crate_versions — unavoidable across cross-cutting dep graphs.
# too_long_first_doc_paragraph — stylistic; does not change API clarity.
# derive_partial_eq_without_eq — we intentionally skip Eq where `f32` or
# `serde_json::Value` appears; PartialEq is the contract.
# missing_const_for_fn — nursery-level churn; reapplies on every PR that
# adds a method. The real determinism guarantees are elsewhere.
# doc_markdown — pedantic false-positives on proper nouns.
# option_if_let_else — nursery rewrite not always clearer.
# cognitive_complexity — subjective threshold hits on simple match trees.
multiple_crate_versions = "allow"
too_long_first_doc_paragraph = "allow"
derive_partial_eq_without_eq = "allow"
missing_const_for_fn = "allow"
doc_markdown = "allow"
option_if_let_else = "allow"
cognitive_complexity = "allow"
# `unused_async` fires on trait-impl stubs where the signature requires `async`.
unused_async = "allow"
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"
strip = "symbols"
debug = false
incremental = false
# cargo-dist requires a `[profile.dist]` section to build release artifacts.
# Inherits the release profile so binaries are byte-identical to local
# `cargo build --release` output, with `lto = "thin"` to keep cross-platform
# build time in CI under the 25min job budget.
[profile.dist]
inherits = "release"
lto = "thin"
[profile.dev]
incremental = true
codegen-units = 256
debug = "line-tables-only"
[profile.test]
opt-level = 1
debug = "line-tables-only"
# Heavy build-time deps can use a higher opt-level in dev for faster proc-macro expansion.
[profile.dev.package."*"]
opt-level = 1