Skip to content

Commit 44f0dfb

Browse files
committed
Rename dev dependencies to dependency groups in lockfile (#8391)
This is backwards compatible (we respect `dev-dependencies` as an alias). Part of #8272.
1 parent 2549874 commit 44f0dfb

28 files changed

+273
-130
lines changed

crates/uv-distribution/src/metadata/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ pub struct Metadata {
6666
pub requires_dist: Vec<uv_pypi_types::Requirement>,
6767
pub requires_python: Option<VersionSpecifiers>,
6868
pub provides_extras: Vec<ExtraName>,
69-
pub dev_dependencies: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>,
69+
pub dependency_groups: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>,
7070
}
7171

7272
impl Metadata {
@@ -83,7 +83,7 @@ impl Metadata {
8383
.collect(),
8484
requires_python: metadata.requires_python,
8585
provides_extras: metadata.provides_extras,
86-
dev_dependencies: BTreeMap::default(),
86+
dependency_groups: BTreeMap::default(),
8787
}
8888
}
8989

@@ -101,7 +101,7 @@ impl Metadata {
101101
name,
102102
requires_dist,
103103
provides_extras,
104-
dev_dependencies,
104+
dependency_groups,
105105
} = RequiresDist::from_project_maybe_workspace(
106106
uv_pypi_types::RequiresDist {
107107
name: metadata.name,
@@ -122,7 +122,7 @@ impl Metadata {
122122
requires_dist,
123123
requires_python: metadata.requires_python,
124124
provides_extras,
125-
dev_dependencies,
125+
dependency_groups,
126126
})
127127
}
128128
}

crates/uv-distribution/src/metadata/requires_dist.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ pub struct RequiresDist {
1919
pub name: PackageName,
2020
pub requires_dist: Vec<uv_pypi_types::Requirement>,
2121
pub provides_extras: Vec<ExtraName>,
22-
pub dev_dependencies: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>,
22+
pub dependency_groups: BTreeMap<GroupName, Vec<uv_pypi_types::Requirement>>,
2323
}
2424

2525
impl RequiresDist {
@@ -34,7 +34,7 @@ impl RequiresDist {
3434
.map(uv_pypi_types::Requirement::from)
3535
.collect(),
3636
provides_extras: metadata.provides_extras,
37-
dev_dependencies: BTreeMap::default(),
37+
dependency_groups: BTreeMap::default(),
3838
}
3939
}
4040

@@ -101,7 +101,7 @@ impl RequiresDist {
101101
SourceStrategy::Disabled => &empty,
102102
};
103103

104-
let dev_dependencies = {
104+
let dependency_groups = {
105105
// First, collect `tool.uv.dev_dependencies`
106106
let dev_dependencies = project_workspace
107107
.current_project()
@@ -218,7 +218,7 @@ impl RequiresDist {
218218
Ok(Self {
219219
name: metadata.name,
220220
requires_dist,
221-
dev_dependencies,
221+
dependency_groups,
222222
provides_extras: metadata.provides_extras,
223223
})
224224
}
@@ -230,7 +230,7 @@ impl From<Metadata> for RequiresDist {
230230
name: metadata.name,
231231
requires_dist: metadata.requires_dist,
232232
provides_extras: metadata.provides_extras,
233-
dev_dependencies: metadata.dev_dependencies,
233+
dependency_groups: metadata.dependency_groups,
234234
}
235235
}
236236
}

crates/uv-requirements/src/lookahead.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ impl<'a, Context: BuildContext> LookaheadResolver<'a, Context> {
195195
.into_iter()
196196
.chain(
197197
metadata
198-
.dev_dependencies
198+
.dependency_groups
199199
.into_iter()
200200
.filter_map(|(group, dependencies)| {
201201
if self.dev.contains(&group) {

crates/uv-resolver/src/lock/mod.rs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ impl Lock {
211211
continue;
212212
};
213213
let marker = edge.weight().clone();
214-
package.add_dev_dependency(
214+
package.add_group_dependency(
215215
&requires_python,
216216
group.clone(),
217217
dependency_dist,
@@ -344,7 +344,7 @@ impl Lock {
344344
}
345345

346346
// Perform the same validation for dev dependencies.
347-
for (group, dependencies) in &mut package.dev_dependencies {
347+
for (group, dependencies) in &mut package.dependency_groups {
348348
dependencies.sort();
349349
for windows in dependencies.windows(2) {
350350
let (dep1, dep2) = (&windows[0], &windows[1]);
@@ -390,7 +390,7 @@ impl Lock {
390390
.dependencies
391391
.iter_mut()
392392
.chain(dist.optional_dependencies.values_mut().flatten())
393-
.chain(dist.dev_dependencies.values_mut().flatten())
393+
.chain(dist.dependency_groups.values_mut().flatten())
394394
{
395395
dep.extra.retain(|extra| {
396396
extras_by_id
@@ -428,7 +428,7 @@ impl Lock {
428428
}
429429

430430
// Perform the same validation for dev dependencies.
431-
for dependencies in dist.dev_dependencies.values() {
431+
for dependencies in dist.dependency_groups.values() {
432432
for dep in dependencies {
433433
if !by_id.contains_key(&dep.package_id) {
434434
return Err(LockErrorKind::UnrecognizedDependency {
@@ -620,7 +620,7 @@ impl Lock {
620620

621621
// Add any dev dependencies.
622622
for group in dev.iter() {
623-
for dep in root.dev_dependencies.get(group).into_iter().flatten() {
623+
for dep in root.dependency_groups.get(group).into_iter().flatten() {
624624
if dep.complexified_marker.evaluate(marker_env, &[]) {
625625
let dep_dist = self.find_by_id(&dep.package_id);
626626
if seen.insert((&dep.package_id, None)) {
@@ -1234,10 +1234,10 @@ impl Lock {
12341234
}
12351235
}
12361236

1237-
// Validate the `dev-dependencies` metadata.
1237+
// Validate the `dependency-groups` metadata.
12381238
{
12391239
let expected: BTreeMap<GroupName, BTreeSet<Requirement>> = metadata
1240-
.dev_dependencies
1240+
.dependency_groups
12411241
.into_iter()
12421242
.map(|(group, requirements)| {
12431243
Ok::<_, LockError>((
@@ -1251,7 +1251,7 @@ impl Lock {
12511251
.collect::<Result<_, _>>()?;
12521252
let actual: BTreeMap<GroupName, BTreeSet<Requirement>> = package
12531253
.metadata
1254-
.requires_dev
1254+
.dependency_groups
12551255
.iter()
12561256
.map(|(group, requirements)| {
12571257
Ok::<_, LockError>((
@@ -1266,7 +1266,7 @@ impl Lock {
12661266
.collect::<Result<_, _>>()?;
12671267

12681268
if expected != actual {
1269-
return Ok(SatisfiesResult::MismatchedDevDependencies(
1269+
return Ok(SatisfiesResult::MismatchedDependencyGroups(
12701270
&package.id.name,
12711271
&package.id.version,
12721272
expected,
@@ -1294,7 +1294,7 @@ impl Lock {
12941294
}
12951295
}
12961296

1297-
for dependencies in package.dev_dependencies.values() {
1297+
for dependencies in package.dependency_groups.values() {
12981298
for dep in dependencies {
12991299
if seen.insert(&dep.package_id) {
13001300
let dep_dist = self.find_by_id(&dep.package_id);
@@ -1358,8 +1358,8 @@ pub enum SatisfiesResult<'lock> {
13581358
BTreeSet<Requirement>,
13591359
BTreeSet<Requirement>,
13601360
),
1361-
/// A package in the lockfile contains different `dev-dependencies` metadata than expected.
1362-
MismatchedDevDependencies(
1361+
/// A package in the lockfile contains different `dependency-group` metadata than expected.
1362+
MismatchedDependencyGroups(
13631363
&'lock PackageName,
13641364
&'lock Version,
13651365
BTreeMap<GroupName, BTreeSet<Requirement>>,
@@ -1544,8 +1544,8 @@ pub struct Package {
15441544
dependencies: Vec<Dependency>,
15451545
/// The resolved optional dependencies of the package.
15461546
optional_dependencies: BTreeMap<ExtraName, Vec<Dependency>>,
1547-
/// The resolved development dependencies of the package.
1548-
dev_dependencies: BTreeMap<GroupName, Vec<Dependency>>,
1547+
/// The resolved PEP 735 dependency groups of the package.
1548+
dependency_groups: BTreeMap<GroupName, Vec<Dependency>>,
15491549
/// The exact requirements from the package metadata.
15501550
metadata: PackageMetadata,
15511551
}
@@ -1573,14 +1573,14 @@ impl Package {
15731573
.collect::<Result<_, _>>()
15741574
.map_err(LockErrorKind::RequirementRelativePath)?
15751575
};
1576-
let requires_dev = if id.source.is_immutable() {
1576+
let dependency_groups = if id.source.is_immutable() {
15771577
BTreeMap::default()
15781578
} else {
15791579
annotated_dist
15801580
.metadata
15811581
.as_ref()
15821582
.expect("metadata is present")
1583-
.dev_dependencies
1583+
.dependency_groups
15841584
.iter()
15851585
.map(|(group, requirements)| {
15861586
let requirements = requirements
@@ -1600,10 +1600,10 @@ impl Package {
16001600
fork_markers,
16011601
dependencies: vec![],
16021602
optional_dependencies: BTreeMap::default(),
1603-
dev_dependencies: BTreeMap::default(),
1603+
dependency_groups: BTreeMap::default(),
16041604
metadata: PackageMetadata {
16051605
requires_dist,
1606-
requires_dev,
1606+
dependency_groups,
16071607
},
16081608
})
16091609
}
@@ -1679,18 +1679,18 @@ impl Package {
16791679
Ok(())
16801680
}
16811681

1682-
/// Add the [`AnnotatedDist`] as a development dependency of the [`Package`].
1683-
fn add_dev_dependency(
1682+
/// Add the [`AnnotatedDist`] to a dependency group of the [`Package`].
1683+
fn add_group_dependency(
16841684
&mut self,
16851685
requires_python: &RequiresPython,
1686-
dev: GroupName,
1686+
group: GroupName,
16871687
annotated_dist: &AnnotatedDist,
16881688
marker: MarkerTree,
16891689
root: &Path,
16901690
) -> Result<(), LockError> {
16911691
let dep = Dependency::from_annotated_dist(requires_python, annotated_dist, marker, root)?;
1692-
let dev_deps = self.dev_dependencies.entry(dev).or_default();
1693-
for existing_dep in &mut *dev_deps {
1692+
let deps = self.dependency_groups.entry(group).or_default();
1693+
for existing_dep in &mut *deps {
16941694
if existing_dep.package_id == dep.package_id
16951695
// See note in add_dependency for why we use
16961696
// simplified markers here.
@@ -1701,7 +1701,7 @@ impl Package {
17011701
}
17021702
}
17031703

1704-
dev_deps.push(dep);
1704+
deps.push(dep);
17051705
Ok(())
17061706
}
17071707

@@ -2051,19 +2051,19 @@ impl Package {
20512051
}
20522052
}
20532053

2054-
if !self.dev_dependencies.is_empty() {
2055-
let mut dev_dependencies = Table::new();
2056-
for (extra, deps) in &self.dev_dependencies {
2054+
if !self.dependency_groups.is_empty() {
2055+
let mut dependency_groups = Table::new();
2056+
for (extra, deps) in &self.dependency_groups {
20572057
let deps = each_element_on_its_line_array(deps.iter().map(|dep| {
20582058
dep.to_toml(requires_python, dist_count_by_name)
20592059
.into_inline_table()
20602060
}));
20612061
if !deps.is_empty() {
2062-
dev_dependencies.insert(extra.as_ref(), value(deps));
2062+
dependency_groups.insert(extra.as_ref(), value(deps));
20632063
}
20642064
}
2065-
if !dev_dependencies.is_empty() {
2066-
table.insert("dev-dependencies", Item::Table(dev_dependencies));
2065+
if !dependency_groups.is_empty() {
2066+
table.insert("dependency-groups", Item::Table(dependency_groups));
20672067
}
20682068
}
20692069

@@ -2106,9 +2106,9 @@ impl Package {
21062106
metadata_table.insert("requires-dist", value(requires_dist));
21072107
}
21082108

2109-
if !self.metadata.requires_dev.is_empty() {
2110-
let mut requires_dev = Table::new();
2111-
for (extra, deps) in &self.metadata.requires_dev {
2109+
if !self.metadata.dependency_groups.is_empty() {
2110+
let mut dependency_groups = Table::new();
2111+
for (extra, deps) in &self.metadata.dependency_groups {
21122112
let deps = deps
21132113
.iter()
21142114
.map(|requirement| {
@@ -2124,11 +2124,11 @@ impl Package {
21242124
deps => each_element_on_its_line_array(deps.iter()),
21252125
};
21262126
if !deps.is_empty() {
2127-
requires_dev.insert(extra.as_ref(), value(deps));
2127+
dependency_groups.insert(extra.as_ref(), value(deps));
21282128
}
21292129
}
2130-
if !requires_dev.is_empty() {
2131-
metadata_table.insert("requires-dev", Item::Table(requires_dev));
2130+
if !dependency_groups.is_empty() {
2131+
metadata_table.insert("dependency-groups", Item::Table(dependency_groups));
21322132
}
21332133
}
21342134

@@ -2238,17 +2238,17 @@ struct PackageWire {
22382238
dependencies: Vec<DependencyWire>,
22392239
#[serde(default)]
22402240
optional_dependencies: BTreeMap<ExtraName, Vec<DependencyWire>>,
2241-
#[serde(default)]
2242-
dev_dependencies: BTreeMap<GroupName, Vec<DependencyWire>>,
2241+
#[serde(default, alias = "dev-dependencies")]
2242+
dependency_groups: BTreeMap<GroupName, Vec<DependencyWire>>,
22432243
}
22442244

22452245
#[derive(Clone, Default, Debug, Eq, PartialEq, serde::Deserialize)]
22462246
#[serde(rename_all = "kebab-case")]
22472247
struct PackageMetadata {
22482248
#[serde(default)]
22492249
requires_dist: BTreeSet<Requirement>,
2250-
#[serde(default)]
2251-
requires_dev: BTreeMap<GroupName, BTreeSet<Requirement>>,
2250+
#[serde(default, alias = "requires-dev")]
2251+
dependency_groups: BTreeMap<GroupName, BTreeSet<Requirement>>,
22522252
}
22532253

22542254
impl PackageWire {
@@ -2278,8 +2278,8 @@ impl PackageWire {
22782278
.into_iter()
22792279
.map(|(extra, deps)| Ok((extra, unwire_deps(deps)?)))
22802280
.collect::<Result<_, LockError>>()?,
2281-
dev_dependencies: self
2282-
.dev_dependencies
2281+
dependency_groups: self
2282+
.dependency_groups
22832283
.into_iter()
22842284
.map(|(group, deps)| Ok((group, unwire_deps(deps)?)))
22852285
.collect::<Result<_, LockError>>()?,

crates/uv-resolver/src/lock/requirements_txt.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl<'lock> RequirementsTxtExport<'lock> {
8686

8787
// Add any dev dependencies.
8888
for group in dev.iter() {
89-
for dep in root.dev_dependencies.get(group).into_iter().flatten() {
89+
for dep in root.dependency_groups.get(group).into_iter().flatten() {
9090
let dep_dist = lock.find_by_id(&dep.package_id);
9191

9292
// Add the dependency to the graph.

crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__hash_optional_missing.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
source: crates/uv-resolver/src/lock/mod.rs
2+
source: crates/uv-resolver/src/lock/tests.rs
33
expression: result
44
---
55
Ok(
@@ -78,10 +78,10 @@ Ok(
7878
fork_markers: [],
7979
dependencies: [],
8080
optional_dependencies: {},
81-
dev_dependencies: {},
81+
dependency_groups: {},
8282
metadata: PackageMetadata {
8383
requires_dist: {},
84-
requires_dev: {},
84+
dependency_groups: {},
8585
},
8686
},
8787
],

crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__hash_optional_present.snap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
source: crates/uv-resolver/src/lock/mod.rs
2+
source: crates/uv-resolver/src/lock/tests.rs
33
expression: result
44
---
55
Ok(
@@ -85,10 +85,10 @@ Ok(
8585
fork_markers: [],
8686
dependencies: [],
8787
optional_dependencies: {},
88-
dev_dependencies: {},
88+
dependency_groups: {},
8989
metadata: PackageMetadata {
9090
requires_dist: {},
91-
requires_dev: {},
91+
dependency_groups: {},
9292
},
9393
},
9494
],

0 commit comments

Comments
 (0)