diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-09-23 18:13:33 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2022-09-23 18:13:33 +0800 |
commit | 417bdf4534a283b902168b90e76da559105653ec (patch) | |
tree | 2dbf7578d7ab5a5021b78217d0a3d2fdbd0d79b5 | |
parent | 1a66cd5d7bdbf83371bcfd2f7ed61b18bdc88f02 (diff) |
fix: clippy warnings
-rw-r--r-- | packages/svgbob/src/buffer/cell_buffer/span.rs | 2 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/fragment_buffer.rs | 13 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/fragment_buffer/fragment.rs | 32 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/property_buffer.rs | 6 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/property_buffer/property.rs | 6 | ||||
-rw-r--r-- | packages/svgbob/src/buffer/string_buffer.rs | 9 | ||||
-rw-r--r-- | packages/svgbob/src/map/ascii_map.rs | 1 | ||||
-rw-r--r-- | packages/svgbob/src/map/circle_map.rs | 8 | ||||
-rw-r--r-- | packages/svgbob/src/util.rs | 29 | ||||
-rw-r--r-- | packages/svgbob_cli/src/main.rs | 49 |
10 files changed, 68 insertions, 87 deletions
diff --git a/packages/svgbob/src/buffer/cell_buffer/span.rs b/packages/svgbob/src/buffer/cell_buffer/span.rs index 109a9fa..ec04ebd 100644 --- a/packages/svgbob/src/buffer/cell_buffer/span.rs +++ b/packages/svgbob/src/buffer/cell_buffer/span.rs @@ -304,7 +304,7 @@ impl<'p> From<Span> for PropertyBuffer<'p> { impl Span { fn into_fragment_buffer(self) -> FragmentBuffer { let pb: PropertyBuffer = self.clone().into(); - let mut fb: FragmentBuffer = pb.into_fragment_buffer(); + let mut fb: FragmentBuffer = pb.clone().into_fragment_buffer(); for (cell, ch) in self.iter() { if pb.as_ref().get(cell).is_none() { if let Some(fragments) = UNICODE_FRAGMENTS.get(ch) { diff --git a/packages/svgbob/src/buffer/fragment_buffer.rs b/packages/svgbob/src/buffer/fragment_buffer.rs index 0a308a9..b945d26 100644 --- a/packages/svgbob/src/buffer/fragment_buffer.rs +++ b/packages/svgbob/src/buffer/fragment_buffer.rs @@ -7,6 +7,7 @@ pub use fragment::Fragment; pub use fragment_span::FragmentSpan; pub use fragment_tree::FragmentTree; use itertools::Itertools; +use std::fmt::Write; use std::{ collections::BTreeMap, ops::{Deref, DerefMut}, @@ -39,7 +40,7 @@ mod fragment_tree; /// 7├─┼─┼─┼─┤ │ │ │ │ │ /// 8└─┴─┴─┴─┘ U└─┴─┴─┴─┘Y /// ``` V W X -#[derive(Debug)] +#[derive(Debug, Default)] pub struct FragmentBuffer(BTreeMap<Cell, (char, Vec<Fragment>)>); impl Deref for FragmentBuffer { @@ -58,7 +59,7 @@ impl DerefMut for FragmentBuffer { impl FragmentBuffer { pub fn new() -> Self { - FragmentBuffer(BTreeMap::new()) + FragmentBuffer::default() } /// dump for debugging purpose only @@ -66,9 +67,9 @@ impl FragmentBuffer { pub fn dump(&self) -> String { let mut buff = String::new(); for (cell, (_ch, shapes)) in self.iter() { - buff.push_str(&format!("\ncell: {} ", cell)); + write!(buff, "\ncell: {} ", cell); for shape in shapes { - buff.push_str(&format!("\n {}", shape)); + write!(buff, "\n {}", shape); } } buff @@ -134,13 +135,13 @@ impl FragmentBuffer { self.sort_fragments_in_cell(cell); } - pub fn merge_fragment_spans(&self) -> Vec<FragmentSpan> { + pub fn merge_fragment_spans(self) -> Vec<FragmentSpan> { let fragment_spans = self.into_fragment_spans(); FragmentSpan::merge_recursive(fragment_spans) } /// create a merged of fragments while preserving their cells - fn into_fragment_spans(&self) -> Vec<FragmentSpan> { + fn into_fragment_spans(self) -> Vec<FragmentSpan> { let mut fragment_spans: Vec<FragmentSpan> = vec![]; for (cell, (ch, fragments)) in self.iter() { for frag in fragments.iter() { diff --git a/packages/svgbob/src/buffer/fragment_buffer/fragment.rs b/packages/svgbob/src/buffer/fragment_buffer/fragment.rs index c1c2393..3cae197 100644 --- a/packages/svgbob/src/buffer/fragment_buffer/fragment.rs +++ b/packages/svgbob/src/buffer/fragment_buffer/fragment.rs @@ -377,31 +377,19 @@ impl Fragment { } pub fn is_circle(&self) -> bool { - match self { - Fragment::Circle(_) => true, - _ => false, - } + matches!(self, Fragment::Circle(_)) } pub fn is_rect(&self) -> bool { - match self { - Fragment::Rect(_) => true, - _ => false, - } + matches!(self, Fragment::Rect(_)) } pub fn is_text(&self) -> bool { - match self { - Fragment::Text(_) => true, - _ => false, - } + matches!(self, Fragment::Text(_)) } pub fn is_cell_text(&self) -> bool { - match self { - Fragment::CellText(_) => true, - _ => false, - } + matches!(self, Fragment::CellText(_)) } pub fn is_broken(&self) -> bool { @@ -478,9 +466,9 @@ impl Bounds for Fragment { } } -impl<MSG> Into<Node<MSG>> for Fragment { - fn into(self) -> Node<MSG> { - match self { +impl<MSG> From<Fragment> for Node<MSG> { + fn from(fragment: Fragment) -> Node<MSG> { + match fragment { Fragment::Line(line) => line.into(), Fragment::MarkerLine(marker_line) => marker_line.into(), Fragment::Circle(circle) => circle.into(), @@ -608,9 +596,9 @@ impl From<Text> for Fragment { } } -impl Into<Fragment> for CellText { - fn into(self) -> Fragment { - Fragment::CellText(self) +impl From<CellText> for Fragment { + fn from(ct: CellText) -> Fragment { + Fragment::CellText(ct) } } diff --git a/packages/svgbob/src/buffer/property_buffer.rs b/packages/svgbob/src/buffer/property_buffer.rs index 155ceeb..e9f24ad 100644 --- a/packages/svgbob/src/buffer/property_buffer.rs +++ b/packages/svgbob/src/buffer/property_buffer.rs @@ -13,11 +13,12 @@ mod property; /// This will be used in the first phase of converting ascii diagrams into fragment buffer /// The properties are generated once and will be repeatedly used for the second phase /// where testing the neighboring charaters to determine the fragment to be drawn for that cell. +#[derive(Default, Clone)] pub struct PropertyBuffer<'p>(HashMap<Cell, &'p Property>); impl<'p> PropertyBuffer<'p> { pub fn new() -> Self { - PropertyBuffer(HashMap::new()) + PropertyBuffer::default() } /// get the appropriate character for this cell @@ -71,6 +72,7 @@ impl<'p> PropertyBuffer<'p> { /// if the fragments match to the return fragments /// of the property behavior, then it is a match + #[allow(clippy::too_many_arguments)] pub fn match_char_with_surrounding_properties( fragments: &Vec<Fragment>, top_left: &Property, @@ -135,7 +137,7 @@ impl<'p> AsMut<HashMap<Cell, &'p Property>> for PropertyBuffer<'p> { /// convert property buffer to fragment buffer impl<'p> PropertyBuffer<'p> { - pub(crate) fn into_fragment_buffer(&self) -> FragmentBuffer { + pub(crate) fn into_fragment_buffer(self) -> FragmentBuffer { let mut fb = FragmentBuffer::new(); for (cell, property) in self.as_ref() { let empty = &&Property::empty(); diff --git a/packages/svgbob/src/buffer/property_buffer/property.rs b/packages/svgbob/src/buffer/property_buffer/property.rs index 45d957a..f7fb355 100644 --- a/packages/svgbob/src/buffer/property_buffer/property.rs +++ b/packages/svgbob/src/buffer/property_buffer/property.rs @@ -1,3 +1,4 @@ +#![allow(clippy::type_complexity)] use self::Signal::Strong; use crate::{ map::{ASCII_PROPERTIES, UNICODE_PROPERTIES}, @@ -168,14 +169,14 @@ impl Property { self.ch.is_alphabetic() && self.ch != '_' // since space is used when a property is derived from strong } - pub fn match_signature(&self, fragments: &Vec<Fragment>) -> bool { + pub fn match_signature(&self, fragments: &[Fragment]) -> bool { let signature_fragments = self.signature_fragments_with_signal(Strong); signature_fragments == *fragments } /// evaluate this property together with the supplied surrounding /// to see if the resulting fragments is equal to the supplied fragments - pub(crate) fn match_property(&self, _fragments: &Vec<Fragment>) -> bool { + pub(crate) fn match_property(&self, _fragments: &[Fragment]) -> bool { false } @@ -224,6 +225,7 @@ impl Property { } /// the fragments of this property when the surrounding properties is supplied + #[allow(clippy::too_many_arguments)] pub(crate) fn fragments( &self, top_left: &Property, diff --git a/packages/svgbob/src/buffer/string_buffer.rs b/packages/svgbob/src/buffer/string_buffer.rs index 9350a90..d707096 100644 --- a/packages/svgbob/src/buffer/string_buffer.rs +++ b/packages/svgbob/src/buffer/string_buffer.rs @@ -6,6 +6,7 @@ use unicode_width::UnicodeWidthChar; /// each cell can be assigned with a string /// taking into account utf8 code which can not be char /// including but not limited to multi-width chars +#[derive(Default)] pub struct StringBuffer(Vec<Vec<char>>); impl Deref for StringBuffer { @@ -22,15 +23,9 @@ impl DerefMut for StringBuffer { } } -impl Default for StringBuffer { - fn default() -> Self { - Self(vec![]) - } -} - impl StringBuffer { pub fn new() -> Self { - StringBuffer(vec![]) + StringBuffer::default() } /// add rows to this buffer diff --git a/packages/svgbob/src/map/ascii_map.rs b/packages/svgbob/src/map/ascii_map.rs index 76da352..d2c4901 100644 --- a/packages/svgbob/src/map/ascii_map.rs +++ b/packages/svgbob/src/map/ascii_map.rs @@ -1,3 +1,4 @@ +#![allow(clippy::type_complexity)] use crate::{ buffer::{ fragment::PolygonTag::{ diff --git a/packages/svgbob/src/map/circle_map.rs b/packages/svgbob/src/map/circle_map.rs index 3266e9b..27190ee 100644 --- a/packages/svgbob/src/map/circle_map.rs +++ b/packages/svgbob/src/map/circle_map.rs @@ -719,7 +719,7 @@ lazy_static! { } -#[derive(Default, Hash, PartialEq, PartialOrd, Eq)] +#[derive(Default, Hash, PartialEq, Eq)] pub struct DiameterArc { diameter: i32, arc: usize, @@ -732,6 +732,12 @@ impl Ord for DiameterArc { } } +impl PartialOrd for DiameterArc { + fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { + Some(self.cmp(other)) + } +} + fn circle_art_to_group(art: &str) -> Vec<Contacts> { let span1 = circle_art_to_span(art); span1.get_contacts() diff --git a/packages/svgbob/src/util.rs b/packages/svgbob/src/util.rs index db63681..4e1cca5 100644 --- a/packages/svgbob/src/util.rs +++ b/packages/svgbob/src/util.rs @@ -113,25 +113,18 @@ pub mod parser { Ok((first_item, first_pos)) => { items.push(first_item); pos = first_pos; - loop { - match (separator.method)(input, pos) { - Ok((_, sep_pos)) => { - match (parser.method)(input, sep_pos) { - Ok((more_item, more_pos)) => { - items.push(more_item); - pos = more_pos; - } - Err(e) => { - // return early when there is an - // error matching the succeeding - // items - return Err(e); - } - } + while let Ok((_, sep_pos)) = (separator.method)(input, pos) + { + match (parser.method)(input, sep_pos) { + Ok((more_item, more_pos)) => { + items.push(more_item); + pos = more_pos; } - Err(_e) => { - // the separator does not match, just break - break; + Err(e) => { + // return early when there is an + // error matching the succeeding + // items + return Err(e); } } } diff --git a/packages/svgbob_cli/src/main.rs b/packages/svgbob_cli/src/main.rs index 3659354..15a0bb9 100644 --- a/packages/svgbob_cli/src/main.rs +++ b/packages/svgbob_cli/src/main.rs @@ -77,11 +77,7 @@ fn main() { let mut bob = String::new(); if args.is_present("inline") { - bob = args - .value_of("input") - .unwrap() - .replace("\\n", "\n") - ; + bob = args.value_of("input").unwrap().replace("\\n", "\n"); } else if let Some(file) = args.value_of("input") { match File::open(file) { Ok(mut f) => { @@ -127,10 +123,9 @@ fn main() { settings.stroke_width = stroke_width; } - let scale : Option<f32> = parse_value_of(&args, "scale"); - match scale { - Some(s) => { settings.scale *= s; }, - _ => {} + let scale: Option<f32> = parse_value_of(&args, "scale"); + if let Some(s) = scale { + settings.scale *= s; } let svg = svgbob::to_svg_with_settings(&*bob, &settings); @@ -157,23 +152,21 @@ fn parse_value_of<T: FromStr>(args: &ArgMatches, arg_name: &str) -> Option<T> where <T as std::str::FromStr>::Err: std::fmt::Display, { - return args - .value_of(arg_name) - .map(|arg| match arg.parse::<T>() { - Ok(a) => a, - Err(e) => { - use std::io::Write; + return args.value_of(arg_name).map(|arg| match arg.parse::<T>() { + Ok(a) => a, + Err(e) => { + use std::io::Write; - writeln!( - &mut std::io::stderr(), - "Illegal value for argument {}: {}", - arg_name, - e - ) - .unwrap(); - exit(1); - } - }); + writeln!( + &mut std::io::stderr(), + "Illegal value for argument {}: {}", + arg_name, + e + ) + .unwrap(); + exit(1); + } + }); } // Batch convert files to svg @@ -184,12 +177,12 @@ fn build(args: &ArgMatches) -> Result<(), Box<dyn Error>> { let input_path = Path::new(files_pattern); let ext = input_path .extension() - .unwrap_or("bob".as_ref()) + .unwrap_or_else(|| "bob".as_ref()) .to_str() .unwrap(); let input_dir = if input_path.is_dir() { - input_path.clone() + input_path } else { input_path.parent().unwrap() }; @@ -218,7 +211,7 @@ fn build(args: &ArgMatches) -> Result<(), Box<dyn Error>> { if tmp_path.is_file() { let tmp_ext = tmp_path .extension() - .unwrap_or("".as_ref()) + .unwrap_or_else(|| "".as_ref()) .to_str() .unwrap(); if tmp_ext == ext { |