Remove Option wrapper from requirement extras (#1103)

There's no semantic difference between `None` and empty, so seems
simpler to represent this way.
This commit is contained in:
Charlie Marsh 2024-01-25 10:21:53 -08:00 committed by GitHub
parent 067acfe79e
commit 8ef819e07e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 98 additions and 112 deletions

View file

@ -66,7 +66,7 @@ impl From<Dist> for Requirement {
match dist {
Dist::Built(BuiltDist::Registry(wheel)) => Requirement {
name: wheel.filename.name,
extras: None,
extras: vec![],
version_or_url: Some(pep508_rs::VersionOrUrl::VersionSpecifier(
pep440_rs::VersionSpecifiers::from(
pep440_rs::VersionSpecifier::equals_version(wheel.filename.version),
@ -76,19 +76,19 @@ impl From<Dist> for Requirement {
},
Dist::Built(BuiltDist::DirectUrl(wheel)) => Requirement {
name: wheel.filename.name,
extras: None,
extras: vec![],
version_or_url: Some(pep508_rs::VersionOrUrl::Url(wheel.url)),
marker: None,
},
Dist::Built(BuiltDist::Path(wheel)) => Requirement {
name: wheel.filename.name,
extras: None,
extras: vec![],
version_or_url: Some(pep508_rs::VersionOrUrl::Url(wheel.url)),
marker: None,
},
Dist::Source(SourceDist::Registry(sdist)) => Requirement {
name: sdist.filename.name,
extras: None,
extras: vec![],
version_or_url: Some(pep508_rs::VersionOrUrl::VersionSpecifier(
pep440_rs::VersionSpecifiers::from(
pep440_rs::VersionSpecifier::equals_version(sdist.filename.version),
@ -98,19 +98,19 @@ impl From<Dist> for Requirement {
},
Dist::Source(SourceDist::DirectUrl(sdist)) => Requirement {
name: sdist.name,
extras: None,
extras: vec![],
version_or_url: Some(pep508_rs::VersionOrUrl::Url(sdist.url)),
marker: None,
},
Dist::Source(SourceDist::Git(sdist)) => Requirement {
name: sdist.name,
extras: None,
extras: vec![],
version_or_url: Some(pep508_rs::VersionOrUrl::Url(sdist.url)),
marker: None,
},
Dist::Source(SourceDist::Path(sdist)) => Requirement {
name: sdist.name,
extras: None,
extras: vec![],
version_or_url: Some(pep508_rs::VersionOrUrl::Url(sdist.url)),
marker: None,
},

View file

@ -131,7 +131,7 @@ pub struct Requirement {
pub name: PackageName,
/// The list of extras such as `security`, `tests` in
/// `requests [security,tests] >= 2.8.1, == 2.8.* ; python_version > "3.8"`
pub extras: Option<Vec<ExtraName>>,
pub extras: Vec<ExtraName>,
/// The version specifier such as `>= 2.8.1`, `== 2.8.*` in
/// `requests [security,tests] >= 2.8.1, == 2.8.* ; python_version > "3.8"`
/// or a url
@ -145,11 +145,11 @@ pub struct Requirement {
impl Display for Requirement {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.name)?;
if let Some(extras) = &self.extras {
if !self.extras.is_empty() {
write!(
f,
"[{}]",
extras
self.extras
.iter()
.map(ToString::to_string)
.collect::<Vec<_>>()
@ -214,10 +214,8 @@ impl Requirement {
/// The list of extras such as `security`, `tests` in
/// `requests [security,tests] >= 2.8.1, == 2.8.* ; python_version > "3.8"`
#[getter]
pub fn extras(&self) -> Option<Vec<String>> {
self.extras
.as_ref()
.map(|extras| extras.iter().map(ToString::to_string).collect())
pub fn extras(&self) -> Vec<String> {
self.extras.iter().map(ToString::to_string).collect()
}
/// The marker expression such as `python_version > "3.8"` in
@ -600,9 +598,9 @@ fn parse_name(cursor: &mut Cursor) -> Result<PackageName, Pep508Error> {
}
/// parses extras in the `[extra1,extra2] format`
fn parse_extras(cursor: &mut Cursor) -> Result<Option<Vec<ExtraName>>, Pep508Error> {
fn parse_extras(cursor: &mut Cursor) -> Result<Vec<ExtraName>, Pep508Error> {
let Some(bracket_pos) = cursor.eat_char('[') else {
return Ok(None);
return Ok(vec![]);
};
let mut extras = Vec::new();
@ -689,7 +687,7 @@ fn parse_extras(cursor: &mut Cursor) -> Result<Option<Vec<ExtraName>>, Pep508Err
}
}
Ok(Some(extras))
Ok(extras)
}
/// Parse a raw string for a URL requirement, which could be either a URL or a local path, and which
@ -1087,10 +1085,10 @@ mod tests {
assert_eq!(input, requests.to_string());
let expected = Requirement {
name: PackageName::from_str("requests").unwrap(),
extras: Some(vec![
extras: vec![
ExtraName::from_str("security").unwrap(),
ExtraName::from_str("tests").unwrap(),
]),
],
version_or_url: Some(VersionOrUrl::VersionSpecifier(
[
VersionSpecifier::new(
@ -1215,7 +1213,7 @@ mod tests {
#[test]
fn error_extras1() {
let numpy = Requirement::from_str("black[d]").unwrap();
assert_eq!(numpy.extras, Some(vec![ExtraName::from_str("d").unwrap()]));
assert_eq!(numpy.extras, vec![ExtraName::from_str("d").unwrap()]);
}
#[test]
@ -1223,10 +1221,10 @@ mod tests {
let numpy = Requirement::from_str("black[d,jupyter]").unwrap();
assert_eq!(
numpy.extras,
Some(vec![
vec![
ExtraName::from_str("d").unwrap(),
ExtraName::from_str("jupyter").unwrap(),
])
]
);
}
@ -1274,7 +1272,7 @@ mod tests {
let url = "https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686";
let expected = Requirement {
name: PackageName::from_str("pip").unwrap(),
extras: None,
extras: vec![],
marker: None,
version_or_url: Some(VersionOrUrl::Url(VerbatimUrl::from_str(url).unwrap())),
};

View file

@ -94,7 +94,7 @@ impl<'a> SitePackages<'a> {
pub fn requirements(&self) -> impl Iterator<Item = Requirement> + '_ {
self.iter().map(|dist| Requirement {
name: dist.name().clone(),
extras: None,
extras: vec![],
version_or_url: Some(match dist.installed_version() {
InstalledVersion::Version(version) => {
pep508_rs::VersionOrUrl::VersionSpecifier(pep440_rs::VersionSpecifiers::from(

View file

@ -52,7 +52,6 @@ impl PubGrubDependencies {
.extras
.clone()
.into_iter()
.flatten()
.map(|extra| to_pubgrub(requirement, Some(extra))),
) {
let (package, version) = result?;
@ -104,7 +103,6 @@ impl PubGrubDependencies {
.extras
.clone()
.into_iter()
.flatten()
.map(|extra| to_pubgrub(constraint, Some(extra))),
) {
let (package, version) = result?;

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"pandas",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -55,7 +55,7 @@ RequirementsTxt {
name: PackageName(
"python-dateutil",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -78,7 +78,7 @@ RequirementsTxt {
name: PackageName(
"pytz",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -101,7 +101,7 @@ RequirementsTxt {
name: PackageName(
"six",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -124,7 +124,7 @@ RequirementsTxt {
name: PackageName(
"tzdata",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"django-debug-toolbar",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -33,7 +33,7 @@ RequirementsTxt {
name: PackageName(
"django",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -52,7 +52,7 @@ RequirementsTxt {
name: PackageName(
"pytz",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"django",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"pytz",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},
@ -21,13 +21,11 @@ RequirementsTxt {
name: PackageName(
"pandas",
),
extras: Some(
[
ExtraName(
"tabulate",
),
],
),
extras: [
ExtraName(
"tabulate",
),
],
version_or_url: Some(
Url(
VerbatimUrl {

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"inflection",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"upsidedown",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -55,7 +55,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},
@ -67,13 +67,11 @@ RequirementsTxt {
name: PackageName(
"pandas",
),
extras: Some(
[
ExtraName(
"tabulate",
),
],
),
extras: [
ExtraName(
"tabulate",
),
],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"tomli",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},
@ -21,7 +21,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"tomli",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"werkzeug",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -61,7 +61,7 @@ RequirementsTxt {
name: PackageName(
"urllib3",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -113,7 +113,7 @@ RequirementsTxt {
name: PackageName(
"ansicon",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -176,7 +176,7 @@ RequirementsTxt {
name: PackageName(
"requests-oauthlib",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -229,7 +229,7 @@ RequirementsTxt {
name: PackageName(
"psycopg2",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"tqdm",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"tomli-w",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},
@ -21,13 +21,11 @@ RequirementsTxt {
name: PackageName(
"pandas",
),
extras: Some(
[
ExtraName(
"tabulate",
),
],
),
extras: [
ExtraName(
"tabulate",
),
],
version_or_url: Some(
Url(
VerbatimUrl {

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"pandas",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -55,7 +55,7 @@ RequirementsTxt {
name: PackageName(
"python-dateutil",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -78,7 +78,7 @@ RequirementsTxt {
name: PackageName(
"pytz",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -101,7 +101,7 @@ RequirementsTxt {
name: PackageName(
"six",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -124,7 +124,7 @@ RequirementsTxt {
name: PackageName(
"tzdata",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"django-debug-toolbar",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -33,7 +33,7 @@ RequirementsTxt {
name: PackageName(
"django",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -52,7 +52,7 @@ RequirementsTxt {
name: PackageName(
"pytz",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"django",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"pytz",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"inflection",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"upsidedown",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -55,7 +55,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},
@ -67,13 +67,11 @@ RequirementsTxt {
name: PackageName(
"pandas",
),
extras: Some(
[
ExtraName(
"tabulate",
),
],
),
extras: [
ExtraName(
"tabulate",
),
],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"tomli",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},
@ -21,7 +21,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"tomli",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"werkzeug",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -61,7 +61,7 @@ RequirementsTxt {
name: PackageName(
"urllib3",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -113,7 +113,7 @@ RequirementsTxt {
name: PackageName(
"ansicon",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -176,7 +176,7 @@ RequirementsTxt {
name: PackageName(
"requests-oauthlib",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -229,7 +229,7 @@ RequirementsTxt {
name: PackageName(
"psycopg2",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"tqdm",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(
@ -32,7 +32,7 @@ RequirementsTxt {
name: PackageName(
"tomli-w",
),
extras: None,
extras: [],
version_or_url: Some(
VersionSpecifier(
VersionSpecifiers(

View file

@ -9,7 +9,7 @@ RequirementsTxt {
name: PackageName(
"numpy",
),
extras: None,
extras: [],
version_or_url: None,
marker: None,
},
@ -21,13 +21,11 @@ RequirementsTxt {
name: PackageName(
"pandas",
),
extras: Some(
[
ExtraName(
"tabulate",
),
],
),
extras: [
ExtraName(
"tabulate",
),
],
version_or_url: Some(
Url(
VerbatimUrl {