Mercurial > hg-stable
comparison rust/hg-core/src/dagops.rs @ 44998:26114bd6ec60
rust: do a clippy pass
This is the result of running `cargo clippy` on hg-core/hg-cpython and fixing
the lints that do not require too much code churn (and would warrant a separate
commit/complete refactor) and only come from our code (a lot of warnings in
hg-cpython come from `rust-cpython`).
Most of those were good lints, two of them was the linter not being smart
enough (or compiler to get up to `clippy`'s level depending on how you see it).
Maybe in the future we could have `clippy` be part of the CI.
Differential Revision: https://phab.mercurial-scm.org/D8635
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 15 Jun 2020 18:26:40 +0200 |
parents | ce6797ef6eab |
children | e98fd81bb151 |
comparison
equal
deleted
inserted
replaced
44997:ef8dcee272ac | 44998:26114bd6ec60 |
---|---|
14 //! whose parents, if any, don't belong to the collection. | 14 //! whose parents, if any, don't belong to the collection. |
15 use super::{Graph, GraphError, Revision, NULL_REVISION}; | 15 use super::{Graph, GraphError, Revision, NULL_REVISION}; |
16 use crate::ancestors::AncestorsIterator; | 16 use crate::ancestors::AncestorsIterator; |
17 use std::collections::{BTreeSet, HashSet}; | 17 use std::collections::{BTreeSet, HashSet}; |
18 | 18 |
19 fn remove_parents( | 19 fn remove_parents<S: std::hash::BuildHasher>( |
20 graph: &impl Graph, | 20 graph: &impl Graph, |
21 rev: Revision, | 21 rev: Revision, |
22 set: &mut HashSet<Revision>, | 22 set: &mut HashSet<Revision, S>, |
23 ) -> Result<(), GraphError> { | 23 ) -> Result<(), GraphError> { |
24 for parent in graph.parents(rev)?.iter() { | 24 for parent in graph.parents(rev)?.iter() { |
25 if *parent != NULL_REVISION { | 25 if *parent != NULL_REVISION { |
26 set.remove(parent); | 26 set.remove(parent); |
27 } | 27 } |
63 /// heads. | 63 /// heads. |
64 /// - a Rust caller can decide whether cloning beforehand is appropriate | 64 /// - a Rust caller can decide whether cloning beforehand is appropriate |
65 /// | 65 /// |
66 /// # Performance notes | 66 /// # Performance notes |
67 /// Internally, this function will store a full copy of `revs` in a `Vec`. | 67 /// Internally, this function will store a full copy of `revs` in a `Vec`. |
68 pub fn retain_heads( | 68 pub fn retain_heads<S: std::hash::BuildHasher>( |
69 graph: &impl Graph, | 69 graph: &impl Graph, |
70 revs: &mut HashSet<Revision>, | 70 revs: &mut HashSet<Revision, S>, |
71 ) -> Result<(), GraphError> { | 71 ) -> Result<(), GraphError> { |
72 revs.remove(&NULL_REVISION); | 72 revs.remove(&NULL_REVISION); |
73 // we need to construct an iterable copy of revs to avoid itering while | 73 // we need to construct an iterable copy of revs to avoid itering while |
74 // mutating | 74 // mutating |
75 let as_vec: Vec<Revision> = revs.iter().cloned().collect(); | 75 let as_vec: Vec<Revision> = revs.iter().cloned().collect(); |
82 } | 82 } |
83 | 83 |
84 /// Roots of `revs`, passed as a `HashSet` | 84 /// Roots of `revs`, passed as a `HashSet` |
85 /// | 85 /// |
86 /// They are returned in arbitrary order | 86 /// They are returned in arbitrary order |
87 pub fn roots<G: Graph>( | 87 pub fn roots<G: Graph, S: std::hash::BuildHasher>( |
88 graph: &G, | 88 graph: &G, |
89 revs: &HashSet<Revision>, | 89 revs: &HashSet<Revision, S>, |
90 ) -> Result<Vec<Revision>, GraphError> { | 90 ) -> Result<Vec<Revision>, GraphError> { |
91 let mut roots: Vec<Revision> = Vec::new(); | 91 let mut roots: Vec<Revision> = Vec::new(); |
92 for rev in revs { | 92 for rev in revs { |
93 if graph | 93 if graph |
94 .parents(*rev)? | 94 .parents(*rev)? |
227 /// Apply `roots()` and sort the result for easier comparison | 227 /// Apply `roots()` and sort the result for easier comparison |
228 fn roots_sorted( | 228 fn roots_sorted( |
229 graph: &impl Graph, | 229 graph: &impl Graph, |
230 revs: &[Revision], | 230 revs: &[Revision], |
231 ) -> Result<Vec<Revision>, GraphError> { | 231 ) -> Result<Vec<Revision>, GraphError> { |
232 let mut as_vec = roots(graph, &revs.iter().cloned().collect())?; | 232 let set: HashSet<_> = revs.iter().cloned().collect(); |
233 let mut as_vec = roots(graph, &set)?; | |
233 as_vec.sort(); | 234 as_vec.sort(); |
234 Ok(as_vec) | 235 Ok(as_vec) |
235 } | 236 } |
236 | 237 |
237 #[test] | 238 #[test] |