From 860408d5aee1b6d0e52b582cc0a441c7d2b3ea46 Mon Sep 17 00:00:00 2001 From: Simon Walker <s.r.walker101@googlemail.com> Date: Wed, 26 Aug 2020 22:47:40 +0100 Subject: [PATCH] Fix warnings and run cargo fmt --- src/dep_parser.rs | 270 +++++++++++++++++++++++----------------------- src/dep_types.rs | 13 +-- src/main.rs | 2 +- 3 files changed, 142 insertions(+), 143 deletions(-) diff --git a/src/dep_parser.rs b/src/dep_parser.rs index 37490aa..0bf4820 100644 --- a/src/dep_parser.rs +++ b/src/dep_parser.rs @@ -1,16 +1,14 @@ -use std::io::ErrorKind; use std::str::FromStr; -use nom::{AsChar, InputTakeAtPosition, IResult}; use nom::branch::alt; use nom::bytes::complete::{tag, take}; use nom::character::complete::{digit1, space0, space1}; use nom::combinator::{flat_map, map, map_parser, map_res, opt, value}; -use nom::multi::{many0, many_m_n, separated_list}; -use nom::sequence::{delimited, preceded, separated_pair, terminated, tuple}; +use nom::multi::separated_list; +use nom::sequence::{delimited, preceded, separated_pair, tuple}; +use nom::{AsChar, IResult, InputTakeAtPosition}; -use crate::dep_types::{Constraint, DependencyError, Extras, Req, ReqType, Version, VersionModifier}; -use crate::install::download_and_install_package; +use crate::dep_types::{Constraint, Extras, Req, ReqType, Version, VersionModifier}; use crate::util::Os; enum ExtrasPart { @@ -19,18 +17,19 @@ enum ExtrasPart { PythonVersion(Constraint), } - pub fn parse_req(input: &str) -> IResult<&str, Req> { // eg saturn = ">=0.3.4", as in pyproject.toml - map(alt(( - separated_pair( - parse_package_name, - tuple((space0, tag("="), space0)), - delimited(quote, parse_constraints, quote), - ), - map(parse_package_name, |x| (x, vec![])) - )), - |(name, constraints)| Req::new(name.to_string(), constraints))(input) + map( + alt(( + separated_pair( + parse_package_name, + tuple((space0, tag("="), space0)), + delimited(quote, parse_constraints, quote), + ), + map(parse_package_name, |x| (x, vec![])), + )), + |(name, constraints)| Req::new(name.to_string(), constraints), + )(input) } pub fn parse_req_pypi_fmt(input: &str) -> IResult<&str, Req> { @@ -39,98 +38,104 @@ pub fn parse_req_pypi_fmt(input: &str) -> IResult<&str, Req> { // wildcard, so we don't accidentally match a semicolon here if a // set of parens appears later. The non-greedy ? in the version-matching // expression's important as well, in some cases of extras. - map(alt(( - tuple(( - tuple((parse_package_name, opt(parse_install_with_extras))), - alt(( - preceded(space0, delimited(tag("("), parse_constraints, tag(")"))), - preceded(space1, parse_constraints), + map( + alt(( + tuple(( + tuple((parse_package_name, opt(parse_install_with_extras))), + alt(( + preceded(space0, delimited(tag("("), parse_constraints, tag(")"))), + preceded(space1, parse_constraints), + )), + opt(preceded(tuple((space0, tag(";"), space0)), parse_extras)), )), - opt(preceded(tuple((space0, tag(";"), space0)), parse_extras)), + map( + tuple(( + tuple((parse_package_name, opt(parse_install_with_extras))), + opt(preceded(tuple((space0, tag(";"), space0)), parse_extras)), + )), + |(x, y)| (x, vec![], y), + ), )), - map(tuple(( - tuple((parse_package_name, opt(parse_install_with_extras))), - opt(preceded(tuple((space0, tag(";"), space0)), parse_extras)), - )), |(x, y)| (x, vec![], y)), - )), |((name, install_with_extras), constraints, extras_opt)| { - let mut r = if let Some(extras) = extras_opt { + let mut r = if let Some(extras) = extras_opt { Req::new_with_extras(name.to_string(), constraints, extras) } else { Req::new(name.to_string(), constraints) }; r.install_with_extras = install_with_extras; r - })(input) + }, + )(input) } pub fn parse_pip_str(input: &str) -> IResult<&str, Req> { map( tuple((parse_package_name, opt(parse_constraint))), - |(name, constraint)| { - Req::new(name.to_string(), constraint.into_iter().collect()) - } + |(name, constraint)| Req::new(name.to_string(), constraint.into_iter().collect()), )(input) } pub fn parse_wh_py_vers(input: &str) -> IResult<&str, Vec<Constraint>> { alt(( - map(tag("any"), - |_| vec![Constraint::new( - ReqType::Gte, Version::new(2, 0, 0))], - ), - map(parse_version, - |v| vec![Constraint::new(ReqType::Caret, v)] - ), + map(tag("any"), |_| { + vec![Constraint::new(ReqType::Gte, Version::new(2, 0, 0))] + }), + map(parse_version, |v| vec![Constraint::new(ReqType::Caret, v)]), separated_list(tag("."), parse_wh_py_ver), ))(input) } fn parse_wh_py_ver(input: &str) -> IResult<&str, Constraint> { - map(tuple(( - alt((tag("cp"), tag("py"), tag("pp"))), - alt((tag("2"), tag("3"), tag("4"))), - opt(map_parser(take(1u8), digit1)), - )), |(_, major, minor): (_, &str, Option<&str>)| { - let major: u32 = major.parse().unwrap(); - match minor { - Some(mi) => { - Constraint::new( + map( + tuple(( + alt((tag("cp"), tag("py"), tag("pp"))), + alt((tag("2"), tag("3"), tag("4"))), + opt(map_parser(take(1u8), digit1)), + )), + |(_, major, minor): (_, &str, Option<&str>)| { + let major: u32 = major.parse().unwrap(); + match minor { + Some(mi) => Constraint::new( ReqType::Exact, - Version::new_short(major, mi.parse().unwrap())) - }, - Nome => { - if major == 2 { - Constraint::new(ReqType::Lte, Version::new_short(2, 10)) - } else { - Constraint::new(ReqType::Gte, Version::new_short(3, 0)) + Version::new_short(major, mi.parse().unwrap()), + ), + None => { + if major == 2 { + Constraint::new(ReqType::Lte, Version::new_short(2, 10)) + } else { + Constraint::new(ReqType::Gte, Version::new_short(3, 0)) + } } } - } - })(input) + }, + )(input) } fn quote(input: &str) -> IResult<&str, &str> { - alt(( - tag("\""), - tag("'"), - ))(input) + alt((tag("\""), tag("'")))(input) } fn parse_install_with_extras(input: &str) -> IResult<&str, Vec<String>> { map( - delimited(tag("["), separated_list(tag(","), parse_package_name), tag("]")), - |extras| extras.iter().map(|x| x.to_string()).collect() + delimited( + tag("["), + separated_list(tag(","), parse_package_name), + tag("]"), + ), + |extras| extras.iter().map(|x| x.to_string()).collect(), )(input) } pub fn parse_extras(input: &str) -> IResult<&str, Extras> { map( - separated_list(delimited(space0, tag("and"), space0), delimited( - opt(preceded(tag("("), space0)), - parse_extra_part, - opt(preceded(space0, tag(")"))), - )), + separated_list( + delimited(space0, tag("and"), space0), + delimited( + opt(preceded(tag("("), space0)), + parse_extra_part, + opt(preceded(space0, tag(")"))), + ), + ), |ps| { let mut extra = None; let mut sys_platform = None; @@ -149,42 +154,40 @@ pub fn parse_extras(input: &str) -> IResult<&str, Extras> { sys_platform, python_version, } - })(input) + }, + )(input) } fn parse_extra_part(input: &str) -> IResult<&str, ExtrasPart> { - flat_map(alt(( - tag("extra"), - tag("sys_platform"), - tag("python_version"), - )), |type_| { - move |input: &str| { - match type_ { - "extra" => { map( + flat_map( + alt((tag("extra"), tag("sys_platform"), tag("python_version"))), + |type_| { + move |input: &str| match type_ { + "extra" => map( preceded( separated_pair(space0, tag("=="), space0), - delimited(quote, parse_package_name, quote) + delimited(quote, parse_package_name, quote), ), - |x| ExtrasPart::Extra(x.to_string()))(input) - }, - "sys_platform" => { map( - tuple((delimited(space0, tag("=="), space0), - delimited(quote, parse_package_name, quote) - )), |(r, o)| { - ExtrasPart::SysPlatform(ReqType::Exact, Os::from_str(o).unwrap()) - })(input) }, - "python_version" => { - map(tuple(( + |x| ExtrasPart::Extra(x.to_string()), + )(input), + "sys_platform" => map( + tuple(( + delimited(space0, tag("=="), space0), + delimited(quote, parse_package_name, quote), + )), + |(_, o)| ExtrasPart::SysPlatform(ReqType::Exact, Os::from_str(o).unwrap()), + )(input), + "python_version" => map( + tuple(( delimited(space0, parse_req_type, space0), - delimited(quote, parse_version, quote) - )), |(r, v)| ExtrasPart::PythonVersion( - Constraint::new(r, v) - ))(input) }, - _ => panic!("Found unexpected") + delimited(quote, parse_version, quote), + )), + |(r, v)| ExtrasPart::PythonVersion(Constraint::new(r, v)), + )(input), + _ => panic!("Found unexpected"), } - } - - })(input) + }, + )(input) } pub fn parse_constraints(input: &str) -> IResult<&str, Vec<Constraint>> { @@ -192,11 +195,12 @@ pub fn parse_constraints(input: &str) -> IResult<&str, Vec<Constraint>> { } pub fn parse_constraint(input: &str) -> IResult<&str, Constraint> { - map(alt(( - value((Some(ReqType::Gte), Version::new(0, 0, 0)), tag("*")), - tuple((opt(parse_req_type), parse_version)), - )), - |(r, v)| Constraint::new(r.unwrap_or(ReqType::Exact), v) + map( + alt(( + value((Some(ReqType::Gte), Version::new(0, 0, 0)), tag("*")), + tuple((opt(parse_req_type), parse_version)), + )), + |(r, v)| Constraint::new(r.unwrap_or(ReqType::Exact), v), )(input) } @@ -217,17 +221,20 @@ pub fn parse_version(input: &str) -> IResult<&str, Version> { } pub fn parse_req_type(input: &str) -> IResult<&str, ReqType> { - map_res(alt(( - tag("=="), - tag(">="), - tag("<="), - tag(">"), - tag("<"), - tag("!="), - tag("^"), - tag("~="), - tag("~"), - )), |x| ReqType::from_str(x))(input) + map_res( + alt(( + tag("=="), + tag(">="), + tag("<="), + tag(">"), + tag("<"), + tag("!="), + tag("^"), + tag("~="), + tag("~"), + )), + |x| ReqType::from_str(x), + )(input) } fn parse_package_name(input: &str) -> IResult<&str, &str> { @@ -244,36 +251,29 @@ fn is_package_char(c: char) -> bool { } fn parse_digit_or_wildcard(input: &str) -> IResult<&str, u32> { - map( - alt((digit1, value("0", tag("*")))), - |digit: &str| digit.parse().unwrap(), - )(input) + map(alt((digit1, value("0", tag("*")))), |digit: &str| { + digit.parse().unwrap() + })(input) } fn parse_modifier(input: &str) -> IResult<&str, Option<(VersionModifier, u32)>> { - opt( - map( - tuple((opt(tag(".")), parse_modifier_version, digit1)), - |(_, version_modifier, n)| (version_modifier, n.parse().unwrap()) - ) - )(input) + opt(map( + tuple((opt(tag(".")), parse_modifier_version, digit1)), + |(_, version_modifier, n)| (version_modifier, n.parse().unwrap()), + ))(input) } fn parse_modifier_version(input: &str) -> IResult<&str, VersionModifier> { - map(alt(( - tag("a"), - tag("b"), - tag("rc"), - tag("dep"), - )), |x| { - match x { + map( + alt((tag("a"), tag("b"), tag("rc"), tag("dep"))), + |x| match x { "a" => VersionModifier::Alpha, "b" => VersionModifier::Beta, "rc" => VersionModifier::ReleaseCandidate, "dep" => VersionModifier::Dep, _ => panic!("not execute this code"), - } - })(input) + }, + )(input) } #[cfg(test)] @@ -285,9 +285,7 @@ mod tests { use super::*; #[test] - fn dummy_test() { - - } + fn dummy_test() {} #[rstest(input, expected, case("*", Ok(("", Constraint::new(ReqType::Gte, Version::new(0, 0, 0))))), @@ -439,4 +437,4 @@ mod tests { fn test_parse_req_pypi(input: &str, expected: IResult<&str, Req>) { assert_eq!(parse_req_pypi_fmt(input), expected); } -} \ No newline at end of file +} diff --git a/src/dep_types.rs b/src/dep_types.rs index 0fe3b78..2d8e69d 100644 --- a/src/dep_types.rs +++ b/src/dep_types.rs @@ -1,11 +1,13 @@ +use crate::dep_parser::{ + parse_constraint, parse_pip_str, parse_req, parse_req_pypi_fmt, parse_version, parse_wh_py_vers, +}; use crate::{dep_resolution, util}; use crossterm::{Color, Colored}; +use nom::combinator::all_consuming; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::error::Error; use std::{cmp, fmt, num, str::FromStr}; -use crate::dep_parser::{parse_version, parse_constraint, parse_req_pypi_fmt, parse_req, parse_pip_str, parse_wh_py_vers}; -use nom::combinator::all_consuming; pub const MAX_VER: u32 = 999_999; // Represents the highest major version we can have @@ -627,10 +629,9 @@ impl Req { all_consuming(parse_req_pypi_fmt)(s) } else { all_consuming(parse_req)(s) - }).map_err(|_| DependencyError::new(&format!( - "Problem parsing version requirement: {}", - s - ))).map(|x| x.1) + }) + .map_err(|_| DependencyError::new(&format!("Problem parsing version requirement: {}", s))) + .map(|x| x.1) } /// We use this for parsing requirements.txt. diff --git a/src/main.rs b/src/main.rs index a952ad9..fb20138 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,9 +13,9 @@ use structopt::StructOpt; mod build; mod commands; +mod dep_parser; mod dep_resolution; mod dep_types; -mod dep_parser; mod files; mod install; mod py_versions;