comparison rust/hg-core/src/matchers.rs @ 49930:e98fd81bb151

rust-clippy: fix most warnings in `hg-core` All of these are simple changes that for the most part are clear improvements and the rest are at most equivalent. The remaining warnings have to be fixed either with a bigger refactor like for the nested "revlog" module, or in the dependency `bytes-cast`, which we own. This will be done sometime in the future.
author Raphaël Gomès <rgomes@octobus.net>
date Mon, 09 Jan 2023 19:18:43 +0100
parents c15b415d1bff
children 1c31b343e514
comparison
equal deleted inserted replaced
49929:5f1cd6839c69 49930:e98fd81bb151
300 fn exact_match(&self, _filename: &HgPath) -> bool { 300 fn exact_match(&self, _filename: &HgPath) -> bool {
301 false 301 false
302 } 302 }
303 303
304 fn matches(&self, filename: &HgPath) -> bool { 304 fn matches(&self, filename: &HgPath) -> bool {
305 (self.match_fn)(filename.as_ref()) 305 (self.match_fn)(filename)
306 } 306 }
307 307
308 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet { 308 fn visit_children_set(&self, directory: &HgPath) -> VisitChildrenSet {
309 let dir = directory.as_ref(); 309 let dir = directory;
310 if self.prefix && self.roots.contains(dir) { 310 if self.prefix && self.roots.contains(dir) {
311 return VisitChildrenSet::Recursive; 311 return VisitChildrenSet::Recursive;
312 } 312 }
313 if self.roots.contains(HgPath::new(b"")) 313 if self.roots.contains(HgPath::new(b""))
314 || self.roots.contains(dir) 314 || self.roots.contains(dir)
316 || find_dirs(dir).any(|parent_dir| self.roots.contains(parent_dir)) 316 || find_dirs(dir).any(|parent_dir| self.roots.contains(parent_dir))
317 { 317 {
318 return VisitChildrenSet::This; 318 return VisitChildrenSet::This;
319 } 319 }
320 320
321 if self.parents.contains(directory.as_ref()) { 321 if self.parents.contains(dir.as_ref()) {
322 let multiset = self.get_all_parents_children(); 322 let multiset = self.get_all_parents_children();
323 if let Some(children) = multiset.get(dir) { 323 if let Some(children) = multiset.get(dir) {
324 return VisitChildrenSet::Set( 324 return VisitChildrenSet::Set(
325 children.into_iter().map(HgPathBuf::from).collect(), 325 children.iter().map(HgPathBuf::from).collect(),
326 ); 326 );
327 } 327 }
328 } 328 }
329 VisitChildrenSet::Empty 329 VisitChildrenSet::Empty
330 } 330 }
444 (_, VisitChildrenSet::Recursive) => m1_set, 444 (_, VisitChildrenSet::Recursive) => m1_set,
445 (VisitChildrenSet::This, _) | (_, VisitChildrenSet::This) => { 445 (VisitChildrenSet::This, _) | (_, VisitChildrenSet::This) => {
446 VisitChildrenSet::This 446 VisitChildrenSet::This
447 } 447 }
448 (VisitChildrenSet::Set(m1), VisitChildrenSet::Set(m2)) => { 448 (VisitChildrenSet::Set(m1), VisitChildrenSet::Set(m2)) => {
449 let set: HashSet<_> = m1.intersection(&m2).cloned().collect(); 449 let set: HashSet<_> = m1.intersection(m2).cloned().collect();
450 if set.is_empty() { 450 if set.is_empty() {
451 VisitChildrenSet::Empty 451 VisitChildrenSet::Empty
452 } else { 452 } else {
453 VisitChildrenSet::Set(set) 453 VisitChildrenSet::Set(set)
454 } 454 }
697 } = ignore_pattern; 697 } = ignore_pattern;
698 match syntax { 698 match syntax {
699 PatternSyntax::RootGlob | PatternSyntax::Glob => { 699 PatternSyntax::RootGlob | PatternSyntax::Glob => {
700 let mut root = HgPathBuf::new(); 700 let mut root = HgPathBuf::new();
701 for p in pattern.split(|c| *c == b'/') { 701 for p in pattern.split(|c| *c == b'/') {
702 if p.iter().any(|c| match *c { 702 if p.iter()
703 b'[' | b'{' | b'*' | b'?' => true, 703 .any(|c| matches!(*c, b'[' | b'{' | b'*' | b'?'))
704 _ => false, 704 {
705 }) {
706 break; 705 break;
707 } 706 }
708 root.push(HgPathBuf::from_bytes(p).as_ref()); 707 root.push(HgPathBuf::from_bytes(p).as_ref());
709 } 708 }
710 roots.push(root); 709 roots.push(root);
778 }) 777 })
779 } 778 }
780 779
781 /// Returns a function that checks whether a given file (in the general sense) 780 /// Returns a function that checks whether a given file (in the general sense)
782 /// should be matched. 781 /// should be matched.
783 fn build_match<'a, 'b>( 782 fn build_match<'a>(
784 ignore_patterns: Vec<IgnorePattern>, 783 ignore_patterns: Vec<IgnorePattern>,
785 ) -> PatternResult<(Vec<u8>, IgnoreFnType<'b>)> { 784 ) -> PatternResult<(Vec<u8>, IgnoreFnType<'a>)> {
786 let mut match_funcs: Vec<IgnoreFnType<'b>> = vec![]; 785 let mut match_funcs: Vec<IgnoreFnType<'a>> = vec![];
787 // For debugging and printing 786 // For debugging and printing
788 let mut patterns = vec![]; 787 let mut patterns = vec![];
789 788
790 let (subincludes, ignore_patterns) = filter_subincludes(ignore_patterns)?; 789 let (subincludes, ignore_patterns) = filter_subincludes(ignore_patterns)?;
791 790
919 let RootsDirsAndParents { 918 let RootsDirsAndParents {
920 roots, 919 roots,
921 dirs, 920 dirs,
922 parents, 921 parents,
923 } = roots_dirs_and_parents(&ignore_patterns)?; 922 } = roots_dirs_and_parents(&ignore_patterns)?;
924 let prefix = ignore_patterns.iter().all(|k| match k.syntax { 923 let prefix = ignore_patterns.iter().all(|k| {
925 PatternSyntax::Path | PatternSyntax::RelPath => true, 924 matches!(k.syntax, PatternSyntax::Path | PatternSyntax::RelPath)
926 _ => false,
927 }); 925 });
928 let (patterns, match_fn) = build_match(ignore_patterns)?; 926 let (patterns, match_fn) = build_match(ignore_patterns)?;
929 927
930 Ok(Self { 928 Ok(Self {
931 patterns, 929 patterns,