Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
155 lines (150 loc) · 7.66 KB
/
Copy pathCargo.toml
File metadata and controls
155 lines (150 loc) · 7.66 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
[workspace]
members = [
"bynk-syntax",
"bynk-ts",
"bynk-render",
"bynk-check",
"bynk-ir",
"bynk-lower",
"bynk-project",
"bynk-emit",
"bynk-driver",
"bynk-strip",
"bynk-wasm",
"bynk-ide",
"bynkc",
"bynk",
"bynk-fmt",
"bynk-grammar",
"bynk-lsp",
# Content-ownership track (#1086) slice 3: cross-crate test fixtures built
# on production discovery. Not a product crate: dev-only, unpublished,
# kept off the release workflows' hardcoded crate list.
"bynk-testkit",
# Rust binding for the tree-sitter grammar (unpublished). Exists only so the
# cross-parser conformance test can diff tree-sitter against bynk-syntax;
# `publish = false`, kept off the release workflows' hardcoded crate list.
"tree-sitter-bynk",
# Repo automation (unpublished). Not a product crate — kept off the release
# workflows' hardcoded crate list; `publish = false` in its manifest.
"xtask",
]
resolver = "3"
[workspace.package]
edition = "2024"
version = "0.330.7"
# Minimum supported Rust version. Edition 2024 floors it at 1.85, but `oxc`
# (the TS→JS stripper behind `bynk-strip`, in-browser track slice 1) requires
# rustc 1.94, so the effective floor rose to match it — set to 1.95 (the pinned
# `rust-toolchain.toml`), the toolchain the full suite is verified on. The CI
# `msrv` leg builds the workspace on exactly this toolchain, so the claim is
# verified rather than asserted — if it fails, raise this (don't lower the leg).
rust-version = "1.95"
license = "MIT OR Apache-2.0"
repository = "https://github.com/accuser/bynk"
homepage = "https://github.com/accuser/bynk"
[workspace.lints.clippy]
# R2.12 (design/bynk-greenfield-compiler.md): refuses the wildcard-arm class of drift
# bug this rule exists to catch (`type_refs_match`, #8) at the type-aware clippy pass
# rather than a hand-rolled scan. `warn`, not `deny`: nothing opts in yet — no crate
# manifest sets `[lints] workspace = true` — so this table is a recorded target level,
# not (yet) an enforced one. Track slice T0.3 (design/tracks/compiler-architecture.md);
# the 296-violation inventory is recorded on the spine, #996. Per-crate `deny` lands as
# each crate is cleaned, per the track's own sequencing — see T0.3's proposal for why
# wiring `[lints] workspace = true` into a crate that still has violations is deferred
# (CI runs `cargo clippy --workspace --all-targets -- -D warnings`, which would turn
# every one of those warnings into a build failure the moment a crate opts in).
# Note for future edits to this comment block: the `workspace_lints` probe (xtask)
# reads the first line in this file that names the lint, so don't spell that name
# out up here — say "the lint" instead — or the probe reads this comment instead
# of the real setting below.
wildcard_enum_match_arm = "warn"
[workspace.dependencies]
# version is required alongside path so the published crates carry a crates.io
# dependency requirement; path is used for in-workspace builds. The one
# exception is bynk-testkit at the bottom of this table — see its own entry.
bynk-syntax = { path = "bynk-syntax", version = "0.330.7" }
bynk-ts = { path = "bynk-ts", version = "0.330.7" }
bynk-render = { path = "bynk-render", version = "0.330.7" }
bynk-check = { path = "bynk-check", version = "0.330.7" }
bynk-ir = { path = "bynk-ir", version = "0.330.7" }
bynk-lower = { path = "bynk-lower", version = "0.330.7" }
bynk-project = { path = "bynk-project", version = "0.330.7" }
bynk-emit = { path = "bynk-emit", version = "0.330.7" }
bynk-driver = { path = "bynk-driver", version = "0.330.7" }
bynk-strip = { path = "bynk-strip", version = "0.330.7" }
bynk-ide = { path = "bynk-ide", version = "0.330.7" }
bynkc = { path = "bynkc", version = "0.330.7" }
bynk-fmt = { path = "bynk-fmt", version = "0.330.7" }
bynk-grammar = { path = "bynk-grammar", version = "0.330.7" }
# #1560: no `version` here, unlike every entry above — `bynk-testkit` is
# `publish = false` (never on crates.io) and only ever a dev-dependency of
# `bynk`/`bynkc`/`bynk-lsp`. A `version` alongside `path` makes `cargo publish`
# resolve it against the registry to build the packaged Cargo.lock — before
# the build step `--no-verify` would skip — so it would fail unconditionally,
# forever, since this crate can never appear there. Path-only makes Cargo
# strip the dev-dependency from the published manifest entirely, which costs
# nothing: `cargo publish`'s own verify only builds lib/bin targets, never the
# integration tests that use it, and workspace-local `cargo test --workspace`
# (which does exercise them) resolves this by path regardless.
bynk-testkit = { path = "bynk-testkit" }
ariadne = "0.6"
clap = { version = "4", features = ["derive"] }
logos = "0.16"
regex = "1"
regress = "0.12"
proptest = "1"
serde = { version = "1", features = ["derive"] }
toml = "1.1"
# P7.4 (#1305, review): `toml::Table` round-trips through a `BTreeMap` with no
# comment/order trivia — parsing an *existing* wrangler.toml and re-printing it
# after a one-field edit silently dropped the banner comment and re-sorted
# every key alphabetically. `toml_edit::DocumentMut` is format-preserving:
# parse, mutate one value, re-serialise, and everything untouched (comments,
# key order, whitespace) survives byte-for-byte. Used only for that
# read-an-existing-document case (`bynk-emit::emitter::wrangler`'s patch
# functions) — `TomlDocument`'s own from-scratch construction (P7.3) is
# unaffected and stays on plain `toml`.
toml_edit = "0.25"
# Portable executable lookup (handles PATHEXT/`where` on Windows) — backs the
# `bynk doctor` detection probe, replacing the Unix-only `which`-shell (v0.46).
which = "8"
tower-lsp = "0.20"
# #1667: dev-only, for driving `LspService` and reading its `ClientSocket` in
# bynk-lsp's tests. Both are already in the tree through `tower-lsp`.
tower = { version = "0.5", default-features = false, features = ["util"] }
futures = { version = "0.3", default-features = false, features = ["std"] }
tokio = { version = "1", features = ["rt-multi-thread", "io-std", "io-util", "macros", "sync", "time", "fs"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tracing-appender = "0.2"
serde_json = "1"
[profile.release]
lto = "thin"
# NO `[profile.dev]` debuginfo override here — it was tried, measured, and was
# WORSE. Recorded so the next person to have the idea doesn't pay for it again.
#
# The reasoning that motivated it is still correct: the `Test suite
# (windows-latest)` leg is the PR gate's entire critical path (every other job
# finishes ~3m30s in), and roughly half of it is compile/link, not test
# execution — the suite links 141 separate test binaries. Cutting the per-binary
# PDB work by setting `[profile.dev] debug = "line-tables-only"` (inherited by
# `profile.test`) looked like the obvious lever.
#
# It is not. Windows compile/link, from the `Finished \`test\` profile` line:
#
# full debuginfo (default) 2m22s (run 2822), 2m37s (run 2817)
# line-tables-only 2m50s (run 2824), 2m53s (run 2823)
#
# Consistently ~14% SLOWER, with no overlap between the two ranges. Whatever
# dominates that half on windows-msvc, it is not the volume of debuginfo — so
# the default stands, and the leg keeps full debuginfo for free diagnosability.
#
# Note the job total misleads here (465s → 415s across the same runs) because
# test execution itself swings 124-144s run to run. Compare the `Finished` line,
# not the job.
#
# Untested from here: `debug = 0`, and `-C link-arg=/DEBUG:NONE`. If you try
# either, measure the `Finished` line across at least two warm runs per arm —
# and note a profile change rewrites every crate fingerprint, so the first run
# on a branch rebuilds cold and tells you nothing.