diff options
author | HampusM <hampus@hampusmat.com> | 2022-07-19 12:28:34 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-07-19 12:28:34 +0200 |
commit | ff71b49f014613729237178f0d3ea374f7d72cd5 (patch) | |
tree | 4d0b320fae52f8318139364d4dcd6b424fea735a | |
parent | 58e50e3d9073584064e13edf489fc008b0388149 (diff) |
refactor: use aggressive clippy linting
-rw-r--r-- | clippy.toml | 1 | ||||
-rw-r--r-- | example/src/main.rs | 27 | ||||
-rw-r--r-- | syrette/src/castable_factory.rs | 6 | ||||
-rw-r--r-- | syrette/src/di_container.rs | 35 | ||||
-rw-r--r-- | syrette/src/interfaces/factory.rs | 1 | ||||
-rw-r--r-- | syrette/src/interfaces/injectable.rs | 4 | ||||
-rw-r--r-- | syrette/src/lib.rs | 2 | ||||
-rw-r--r-- | syrette/src/libs/intertrait/cast_box.rs | 8 | ||||
-rw-r--r-- | syrette/src/libs/intertrait/cast_rc.rs | 8 | ||||
-rw-r--r-- | syrette/src/libs/intertrait/hasher.rs | 16 | ||||
-rw-r--r-- | syrette/src/libs/intertrait/mod.rs | 8 | ||||
-rw-r--r-- | syrette/src/provider.rs | 11 | ||||
-rw-r--r-- | syrette/src/ptr.rs | 2 | ||||
-rw-r--r-- | syrette_macros/src/factory_type_alias.rs | 1 | ||||
-rw-r--r-- | syrette_macros/src/injectable_impl.rs | 3 | ||||
-rw-r--r-- | syrette_macros/src/lib.rs | 9 | ||||
-rw-r--r-- | syrette_macros/src/libs/intertrait_macros/gen_caster.rs | 8 | ||||
-rw-r--r-- | syrette_macros/src/libs/intertrait_macros/mod.rs | 8 |
18 files changed, 100 insertions, 58 deletions
diff --git a/clippy.toml b/clippy.toml new file mode 100644 index 0000000..a85655e --- /dev/null +++ b/clippy.toml @@ -0,0 +1 @@ +doc-valid-idents = ["CodeChain", ".."] diff --git a/example/src/main.rs b/example/src/main.rs index 1f4ddb6..d79a030 100644 --- a/example/src/main.rs +++ b/example/src/main.rs @@ -1,3 +1,6 @@ +#![deny(clippy::all)] +#![deny(clippy::pedantic)] + use syrette::errors::di_container::DIContainerError; use syrette::interfaces::factory::IFactory; use syrette::ptr::{FactoryPtr, InterfacePtr}; @@ -58,14 +61,14 @@ trait ICow struct Cow { - _moo_cnt: i32, + moo_cnt: i32, } impl Cow { fn new(moo_cnt: i32) -> Self { - Self { _moo_cnt: moo_cnt } + Self { moo_cnt } } } @@ -73,7 +76,7 @@ impl ICow for Cow { fn moo(&self) { - for _ in 0..self._moo_cnt { + for _ in 0..self.moo_cnt { println!("Moo"); } } @@ -89,9 +92,9 @@ trait IHuman struct Human { - _dog: InterfacePtr<dyn IDog>, - _cat: InterfacePtr<dyn ICat>, - _cow_factory: FactoryPtr<CowFactory>, + dog: InterfacePtr<dyn IDog>, + cat: InterfacePtr<dyn ICat>, + cow_factory: FactoryPtr<CowFactory>, } #[injectable(IHuman)] @@ -104,9 +107,9 @@ impl Human ) -> Self { Self { - _dog: dog, - _cat: cat, - _cow_factory: cow_factory, + dog, + cat, + cow_factory, } } } @@ -117,13 +120,13 @@ impl IHuman for Human { println!("Hi doggy!"); - self._dog.woof(); + self.dog.woof(); println!("Hi kitty!"); - self._cat.meow(); + self.cat.meow(); - let cow: Box<dyn ICow> = (self._cow_factory)(3); + let cow: Box<dyn ICow> = (self.cow_factory)(3); cow.moo(); } diff --git a/syrette/src/castable_factory.rs b/syrette/src/castable_factory.rs index d820c31..5d582bb 100644 --- a/syrette/src/castable_factory.rs +++ b/syrette/src/castable_factory.rs @@ -9,7 +9,7 @@ where Args: 'static, ReturnInterface: 'static + ?Sized, { - _func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>, + func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>, } impl<Args, ReturnInterface> CastableFactory<Args, ReturnInterface> @@ -21,7 +21,7 @@ where func: &'static dyn Fn<Args, Output = InterfacePtr<ReturnInterface>>, ) -> Self { - Self { _func: func } + Self { func } } } @@ -40,7 +40,7 @@ where { extern "rust-call" fn call(&self, args: Args) -> Self::Output { - self._func.call(args) + self.func.call(args) } } diff --git a/syrette/src/di_container.rs b/syrette/src/di_container.rs index 86724e6..df51140 100644 --- a/syrette/src/di_container.rs +++ b/syrette/src/di_container.rs @@ -19,8 +19,8 @@ pub struct BindingBuilder<'a, Interface> where Interface: 'static + ?Sized, { - _di_container: &'a mut DIContainer, - _phantom_data: PhantomData<Interface>, + di_container: &'a mut DIContainer, + interface_phantom: PhantomData<Interface>, } impl<'a, Interface> BindingBuilder<'a, Interface> @@ -30,8 +30,8 @@ where fn new(di_container: &'a mut DIContainer) -> Self { Self { - _di_container: di_container, - _phantom_data: PhantomData, + di_container, + interface_phantom: PhantomData, } } @@ -43,7 +43,7 @@ where { let interface_typeid = TypeId::of::<Interface>(); - self._di_container._bindings.insert( + self.di_container.bindings.insert( interface_typeid, Rc::new(InjectableTypeProvider::<Implementation>::new()), ); @@ -63,7 +63,7 @@ where let factory_impl = CastableFactory::new(factory_func); - self._di_container._bindings.insert( + self.di_container.bindings.insert( interface_typeid, Rc::new(FactoryProvider::new(FactoryPtr::new(factory_impl))), ); @@ -80,16 +80,17 @@ where /// ``` pub struct DIContainer { - _bindings: HashMap<TypeId, Rc<dyn IProvider>>, + bindings: HashMap<TypeId, Rc<dyn IProvider>>, } impl<'a> DIContainer { /// Returns a new `DIContainer`. + #[must_use] pub fn new() -> Self { Self { - _bindings: HashMap::new(), + bindings: HashMap::new(), } } @@ -102,6 +103,13 @@ impl<'a> DIContainer } /// Returns a new instance of the type bound with `Interface`. + /// + /// # Errors + /// Will return `Err` if: + /// - No binding for `Interface` exists + /// - Resolving the binding for `Interface` fails + /// - Casting the binding for `Interface` fails + /// - The binding for `Interface` is not injectable pub fn get<Interface>( &self, ) -> error_stack::Result<InterfacePtr<Interface>, DIContainerError> @@ -112,7 +120,7 @@ impl<'a> DIContainer let interface_name = type_name::<Interface>(); - let binding = self._bindings.get(&interface_typeid).ok_or_else(|| { + let binding = self.bindings.get(&interface_typeid).ok_or_else(|| { Report::new(DIContainerError) .attach_printable(format!("No binding exists for {}", interface_name)) })?; @@ -145,6 +153,13 @@ impl<'a> DIContainer } /// Returns the factory bound with factory type `Interface`. + /// + /// # Errors + /// Will return `Err` if: + /// - No binding for `Interface` exists + /// - Resolving the binding for `Interface` fails + /// - Casting the binding for `Interface` fails + /// - The binding for `Interface` is not a factory pub fn get_factory<Interface>( &self, ) -> error_stack::Result<FactoryPtr<Interface>, DIContainerError> @@ -155,7 +170,7 @@ impl<'a> DIContainer let interface_name = type_name::<Interface>(); - let binding = self._bindings.get(&interface_typeid).ok_or_else(|| { + let binding = self.bindings.get(&interface_typeid).ok_or_else(|| { Report::new(DIContainerError) .attach_printable(format!("No binding exists for {}", interface_name)) })?; diff --git a/syrette/src/interfaces/factory.rs b/syrette/src/interfaces/factory.rs index 3afd7a8..c97fc09 100644 --- a/syrette/src/interfaces/factory.rs +++ b/syrette/src/interfaces/factory.rs @@ -1,3 +1,4 @@ +#![allow(clippy::module_name_repetitions)] use crate::libs::intertrait::CastFrom; use crate::ptr::InterfacePtr; diff --git a/syrette/src/interfaces/injectable.rs b/syrette/src/interfaces/injectable.rs index 96d4f21..24032a6 100644 --- a/syrette/src/interfaces/injectable.rs +++ b/syrette/src/interfaces/injectable.rs @@ -5,6 +5,10 @@ use crate::DIContainer; pub trait Injectable: CastFrom { + /// Resolves the dependencies of the injectable. + /// + /// # Errors + /// Will return `Err` if resolving the dependencies fails. fn resolve( di_container: &DIContainer, ) -> error_stack::Result<InterfacePtr<Self>, ResolveError> diff --git a/syrette/src/lib.rs b/syrette/src/lib.rs index aee7fe2..992f276 100644 --- a/syrette/src/lib.rs +++ b/syrette/src/lib.rs @@ -1,4 +1,6 @@ #![feature(unboxed_closures, fn_traits)] +#![deny(clippy::all)] +#![deny(clippy::pedantic)] //! Syrette //! diff --git a/syrette/src/libs/intertrait/cast_box.rs b/syrette/src/libs/intertrait/cast_box.rs index d4da740..793efd0 100644 --- a/syrette/src/libs/intertrait/cast_box.rs +++ b/syrette/src/libs/intertrait/cast_box.rs @@ -1,13 +1,13 @@ /** * Originally from Intertrait by CodeChain * - * https://github.com/CodeChain-io/intertrait - * https://crates.io/crates/intertrait/0.2.2 + * <https://github.com/CodeChain-io/intertrait> + * <https://crates.io/crates/intertrait/0.2.2> * * Licensed under either of * - * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) - * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) + * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) + * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) * at your option. */ diff --git a/syrette/src/libs/intertrait/cast_rc.rs b/syrette/src/libs/intertrait/cast_rc.rs index 58d212a..79d8d60 100644 --- a/syrette/src/libs/intertrait/cast_rc.rs +++ b/syrette/src/libs/intertrait/cast_rc.rs @@ -1,13 +1,13 @@ /** * Originally from Intertrait by CodeChain * - * https://github.com/CodeChain-io/intertrait - * https://crates.io/crates/intertrait/0.2.2 + * <https://github.com/CodeChain-io/intertrait> + * <https://crates.io/crates/intertrait/0.2.2> * * Licensed under either of * - * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) - * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) + * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) + * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) * at your option. */ diff --git a/syrette/src/libs/intertrait/hasher.rs b/syrette/src/libs/intertrait/hasher.rs index 1fe7739..e7f110d 100644 --- a/syrette/src/libs/intertrait/hasher.rs +++ b/syrette/src/libs/intertrait/hasher.rs @@ -1,13 +1,15 @@ +#![allow(clippy::module_name_repetitions)] + /** * Originally from Intertrait by CodeChain * - * https://github.com/CodeChain-io/intertrait - * https://crates.io/crates/intertrait/0.2.2 + * <https://github.com/CodeChain-io/intertrait> + * <https://crates.io/crates/intertrait/0.2.2> * * Licensed under either of * - * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) - * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) + * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) + * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) * at your option. */ @@ -34,11 +36,13 @@ impl Hasher for FastHasher let mut bytes = bytes; while bytes.len() > size_of::<u64>() { let (u64_bytes, remaining) = bytes.split_at(size_of::<u64>()); + self.0 ^= u64::from_ne_bytes(u64_bytes.try_into().unwrap()); - bytes = remaining + + bytes = remaining; } self.0 ^= bytes .iter() - .fold(0u64, |result, b| (result << 8) | *b as u64); + .fold(0u64, |result, b| (result << 8) | u64::from(*b)); } } diff --git a/syrette/src/libs/intertrait/mod.rs b/syrette/src/libs/intertrait/mod.rs index a3f24f1..1daca64 100644 --- a/syrette/src/libs/intertrait/mod.rs +++ b/syrette/src/libs/intertrait/mod.rs @@ -1,13 +1,13 @@ /** * Originally from Intertrait by CodeChain * - * https://github.com/CodeChain-io/intertrait - * https://crates.io/crates/intertrait/0.2.2 + * <https://github.com/CodeChain-io/intertrait> + * <https://crates.io/crates/intertrait/0.2.2> * * Licensed under either of * - * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) - * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) + * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) + * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) * at your option. */ diff --git a/syrette/src/provider.rs b/syrette/src/provider.rs index c344f25..3b7e04c 100644 --- a/syrette/src/provider.rs +++ b/syrette/src/provider.rs @@ -1,3 +1,4 @@ +#![allow(clippy::module_name_repetitions)] use std::marker::PhantomData; use crate::castable_factory::AnyFactory; @@ -26,7 +27,7 @@ pub struct InjectableTypeProvider<InjectableType> where InjectableType: Injectable, { - _phantom_data: PhantomData<InjectableType>, + injectable_phantom: PhantomData<InjectableType>, } impl<InjectableType> InjectableTypeProvider<InjectableType> @@ -36,7 +37,7 @@ where pub fn new() -> Self { Self { - _phantom_data: PhantomData, + injectable_phantom: PhantomData, } } } @@ -58,14 +59,14 @@ where pub struct FactoryProvider { - _factory: FactoryPtr<dyn AnyFactory>, + factory: FactoryPtr<dyn AnyFactory>, } impl FactoryProvider { pub fn new(factory: FactoryPtr<dyn AnyFactory>) -> Self { - Self { _factory: factory } + Self { factory } } } @@ -76,6 +77,6 @@ impl IProvider for FactoryProvider _di_container: &DIContainer, ) -> error_stack::Result<Providable, ResolveError> { - Ok(Providable::Factory(self._factory.clone())) + Ok(Providable::Factory(self.factory.clone())) } } diff --git a/syrette/src/ptr.rs b/syrette/src/ptr.rs index 164e061..414d086 100644 --- a/syrette/src/ptr.rs +++ b/syrette/src/ptr.rs @@ -1,6 +1,6 @@ +#![allow(clippy::module_name_repetitions)] use std::rc::Rc; pub type InterfacePtr<Interface> = Box<Interface>; pub type FactoryPtr<FactoryInterface> = Rc<FactoryInterface>; - diff --git a/syrette_macros/src/factory_type_alias.rs b/syrette_macros/src/factory_type_alias.rs index 82e2315..8ea7baa 100644 --- a/syrette_macros/src/factory_type_alias.rs +++ b/syrette_macros/src/factory_type_alias.rs @@ -11,6 +11,7 @@ pub struct FactoryTypeAlias impl Parse for FactoryTypeAlias { + #[allow(clippy::match_wildcard_for_single_variants)] fn parse(input: ParseStream) -> syn::Result<Self> { let type_alias = match input.parse::<ItemType>() { diff --git a/syrette_macros/src/injectable_impl.rs b/syrette_macros/src/injectable_impl.rs index e7d1b54..3000253 100644 --- a/syrette_macros/src/injectable_impl.rs +++ b/syrette_macros/src/injectable_impl.rs @@ -131,6 +131,7 @@ impl InjectableImpl .find(|method_item| method_item.sig.ident == method_name) } + #[allow(clippy::match_wildcard_for_single_variants)] fn get_has_fn_args_self(fn_args: &Punctuated<FnArg, Comma>) -> bool { fn_args.iter().any(|arg| match arg { @@ -170,7 +171,7 @@ impl InjectableImpl match opt_colon_two { Some(colon_two) => { - acc.push_str(colon_two.to_token_stream().to_string().as_str()) + acc.push_str(colon_two.to_token_stream().to_string().as_str()); } None => {} } diff --git a/syrette_macros/src/lib.rs b/syrette_macros/src/lib.rs index f686e1e..2981ea7 100644 --- a/syrette_macros/src/lib.rs +++ b/syrette_macros/src/lib.rs @@ -1,3 +1,6 @@ +#![deny(clippy::all)] +#![deny(clippy::pedantic)] + use proc_macro::TokenStream; use quote::quote; use syn::{parse, parse_macro_input}; @@ -20,6 +23,9 @@ use libs::intertrait_macros::gen_caster::generate_caster; /// /// * A interface trait the struct implements. /// +/// # Panics +/// If the attributed item is not a impl. +/// /// # Examples /// ``` /// trait IConfigReader @@ -74,6 +80,9 @@ pub fn injectable(args_stream: TokenStream, impl_stream: TokenStream) -> TokenSt /// Makes a type alias usable as a factory interface. /// +/// # Panics +/// If the attributed item is not a type alias. +/// /// # Examples /// ``` /// trait IUser diff --git a/syrette_macros/src/libs/intertrait_macros/gen_caster.rs b/syrette_macros/src/libs/intertrait_macros/gen_caster.rs index 213a75e..9126200 100644 --- a/syrette_macros/src/libs/intertrait_macros/gen_caster.rs +++ b/syrette_macros/src/libs/intertrait_macros/gen_caster.rs @@ -1,13 +1,13 @@ /** * Originally from Intertrait by CodeChain * - * https://github.com/CodeChain-io/intertrait - * https://crates.io/crates/intertrait/0.2.2 + * <https://github.com/CodeChain-io/intertrait> + * <https://crates.io/crates/intertrait/0.2.2> * * Licensed under either of * - * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) - * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) + * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) + * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) * at your option. */ diff --git a/syrette_macros/src/libs/intertrait_macros/mod.rs b/syrette_macros/src/libs/intertrait_macros/mod.rs index da9775a..fa8c021 100644 --- a/syrette_macros/src/libs/intertrait_macros/mod.rs +++ b/syrette_macros/src/libs/intertrait_macros/mod.rs @@ -1,13 +1,13 @@ /** * Originally from Intertrait by CodeChain * - * https://github.com/CodeChain-io/intertrait - * https://crates.io/crates/intertrait/0.2.2 + * <https://github.com/CodeChain-io/intertrait> + * <https://crates.io/crates/intertrait/0.2.2> * * Licensed under either of * - * Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) - * MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) + * Apache License, Version 2.0 (LICENSE-APACHE or <http://www.apache.org/licenses/LICENSE-2.0>) + * MIT license (LICENSE-MIT or <http://opensource.org/licenses/MIT>) * at your option. */ |